Programação Estruturada

A análise estruturada é uma atividade de construção de modelos. Utiliza uma notação que é própria ao método de análise estruturada e que tem a finalidade de retratar o fluxo e o conteúdo das informações utilizadas pelo sistema, dividindo o sistema em partições funcionais e comportamentais e descrever a essência daquilo que será construído.

Pode ser dividida em dois modelos:

  • Ambiental
  • Comportamental

O modelo ambiental descreve o ambiente no qual o sistema se insere, ou seja, descreve o contexto do sistema, que deve ter 3 componentes:

  1. Definição de objetivos: Finalidade de sistema;
  2. Lista de eventos: Os acontecimentos que ocorrem no exterior e que interagem com o sistema;
  3. Diagrama de Contexto: Representa o sistema como um único processo e as suas interações com o meio ambiente.

O modelo comportamental descreve as ações que o sistema deve realizar para responder da melhor forma aos eventos definidos no modelo ambiental.

Técnicas utilizadas:

  1. Diagrama de fluxos de dados (DFD);
  2. Dicionário de dados (DD);
  3. Diagrama de entidades e associações (ou relacionamentos) (Diagrama entidade relacionamento [DER] ou Modelo de entidades e relacionamentos [MER]);
  4. Especificação de processos (EP) – (DESENHO);
  5. Diagrama de transição de estados (DTE).

Paradigma

Um paradigma é o que determina o ponto de vista da realidade e como se atua sobre ela, os quais são classificados quanto ao seu conceito de base, podendo ser: Imperativo, funcional, lógico, orientado a objetos e estruturado. Cada qual determina uma forma particular de abordar os problemas e de formular respectivas soluções. Além disso, uma linguagem de programação pode combinar dois ou mais paradigmas para potencializar as análises e soluções. Deste modo, cabe ao programador escolher o paradigma mais adequado para analisar e resolver cada problema.

Paradigma de Programação fornece e determina a visão que o programador possui sobre a estruturação e execução do programa.

Paradigma Imperativo (Procedural)

O Paradigma Imperativo é baseado na arquitetura de Von Neumann. É o primeiro paradigma a existir e até hoje é o dominante. Esse paradigma segue o conceito de um estado e de ações que manipulam esse estado, nele encontramos procedimentos que servem de mecanismos de estruturação. Podemos denominá-lo de procedural por incluir sub-rotinas ou procedimentos para estruturação.

Na Ciência da Computação, programação imperativa é um paradigma de programação que descreve a computação como ações, enunciados ou comandos que mudam o estado (variáveis) de um programa. Muito parecido com o comportamento imperativo das linguagens naturais que expressam ordens, programas imperativos são uma sequência de comandos para o computador executar.

As linguagens de programação imperativas são caracterizadas por três conceitos: Variáveis, Atribuições e Laços de Iteração.

As linguagens de programação imperativa contrastam com outros tipos de linguagem, tais como linguagens de programação declarativa, funcional e lógica. Linguagens de programação funcional, como por exemplo Haskell, não são uma sequência de afirmações e não possuem, por consequência, um estado global como as linguagens imperativas. Linguagens de programação lógica, como exemplo Prolog, frequentemente definem “o que” é para ser computado, mais do que “como” computar, como seria normal em uma linguagem imperativa.

Exemplos de linguagens de programação que baseiam-se no modelo imperativo: Ada; ALGOL; Assembler; Basic; C; Cobol; Fortran; Pascal; Python; Lua;

As vantagens desse paradigma são: eficiência (porque embute o modelo de Von Neumann); modelagem “natural” de aplicações do mundo real; paradigma dominante e bem estabelecido; e também muito flexível.

As desvantagens são: difícil legibilidade; as instruções são centradas no como e não no o que.

Paradigma Estruturado

A Programação Estruturada é uma forma de programação de computadores que preconiza que todos os programas possíveis podem ser reduzidos a apenas três estruturas: sequência, decisão e repetição.

A Programação modular é uma forma de programação no qual o desenvolvimento das rotinas de programação é feito através de módulos, que são interligados entre si através de uma interface comum

Este paradigma preconiza que todos os programas possíveis podem ser reduzidos a apenas três estruturas: sequência, decisão e iteração. Tendo, na prática, sido transformada na Programação modular, a Programação estruturada orienta os programadores para a criação de estruturas simples em seus programas, usando as subrotinas e as funções. Foi a forma dominante na criação de software entre a programação linear e a programação orientada por objetos.

Apesar de ter sido sucedida pela programação orientada por objetos, pode-se dizer que a programação estruturada ainda é marcantemente influente, uma vez que grande parte das pessoas ainda aprendem programação através dela.

Exemplo de linguagens de programação que baseiam-se no modelo estruturado: C; Basic; Pascal; Cobol;

Vantagens: Os problemas podem ser quebrados em vários subproblemas, a boa legibilidade e a boa compreensão da estrutura deste paradigma motivam os programadores a iniciarem a programação pelo modelo estruturado.

Desvantagens: Os dados são separados das funções; Mudanças na estrutura dos dados acarreta alteração em todas as funções relacionadas. Gera sistemas difíceis de serem mantidos;

Programação estruturada é uma forma de programação de computadores que preconiza que todos os programas possíveis podem ser reduzidos a apenas três estruturas: sequência, decisão e iteração, desenvolvida por Mchael A.Jackson, no seu livro “Principles of Program Design” de 1975.

O princípio básico de programação estruturada é que um programa é composto por blocos elementares de código que se interligam através de três mecanismos básicos, que são sequência, seleção e iteração (repetição). Cada uma destas construções tem um ponto de início (o topo do bloco) e um ponto de término (o fim do bloco) de execução.

  • Sequência: implementa os passos de processamento necessários para descrever qualquer programa.
  • Seleção: especifica a possibilidade de selecionar o fluxo de execução do processamento baseado em ocorrências lógicas. Há duas formas básicas de condição. Exemplos: IF, ELSE e SWITCH.
  • Iteração: permite a execução repetitiva de segmentos do programa. Exemplos: WHILE e FOR.

Com a programação estruturada mostra-se que é possível escrever qualquer programa usando apenas três estruturas básicas de controle. Desta forma é possível criar programas que podem ser lidos de forma sequencial sem a necessidade de voltar frequentemente a definições anteriores. A programação estruturada reduz a complexidade dos programas e aumenta a clareza da sua lógica. Com isso aumenta a facilidade da sua manutenção e a respectiva diminuição do custo.

Pode-se ainda programar funções independentes (modular) e construir programas que chamam programas numa sequencia de cima para baixo (TOP-DOWN). O método estruturado baseia-se na utilização dos seguintes conceitos básicos:

  • Estruturas básicas
  • Raciocínio TOP-DOWN
  • Modelos de estruturação

Para a resolução de problemas relativamente mais simples e diretos a programação estruturada é muito eficiente. Além disso, por exigir formas de pensar relativamente complexas, a programação orientada a objetos até hoje ainda não é bem compreendida ou usada pela maioria.

Há de se acrescentar também que inúmeras linguagens ainda extremamente relevantes nos dias de hoje, como Cobol, PHP e Perl ainda utilizam o paradigma estruturado (muito embora possuam suporte para a orientação à objetos).

Paradigma Orientado a Objetos

A Programação orientada a objetos é um paradigma de análise, projeto e programação de sistemas de software baseado na composição e interação entre diversas unidades de software chamadas de objetos.

A programação Orientada a Objetos é baseada na composição e interação de diversas unidades de softwares denominados objetos. O funcionamento de um software orientado a objetos se dá através do relacionamento e troca de mensagens entre esses objetos. Esses objetos são classes, e nessas classes os comportamentos são chamados de métodos e os estados possíveis da classe são chamados de atributos. Nos métodos e nos atributos também são definidas as formas de relacionamento com outros objetos.

Exemplos de linguagens de programação que baseiam-se no modelo orientado a objetos: Smalltalk; Python; Ruby; C++; Object Pascal; Java; C#; Oberon; Ada; Eiffel; Simula; .NET

Vantagens: Esse paradigma possui todas as vantagens do paradigma imperativo entre outras: a alteração de um módulo não incorre na modificação de outros módulos; quanto mais um módulo for independente, maior a chance dele poder ser reutilizado em outra aplicação.

Desvantagens: Por exigir formas de pensar relativamente complexas, a programação orientada a objetos até hoje ainda não é bem compreendida ou usada pela maioria.

Paradigma Declarativo

É um paradigma de programação baseado em programação funcional, programação lógica ou programação restritiva. Tal termo é utilizado para discernir tais linguagens em relação à linguagens de programação imperativa.

O programa é estruturado como uma coleção de propriedades para encontrar o resultado esperado, e não um procedimento a ser seguido.

Outra definição determina que um programa é declarativo se descreve o que ele faz e não como seus procedimentos funcionam. Dessa forma, linguagens de marcação são declarativas, pois descrevem o que são suas estruturas e não como elas serão utilizadas. Tal definição foge do escopo, pois não se trata de linguagens de programação.

Em particular, a programação restritiva e a programação lógica descrevem propriedades da solução desejada, não especificando como o algoritmo em si deve agir. Apesar disso a maioria das linguagens desses paradigmas permite que os algoritmos sejam implementados com detalhes, então não constituem uma linguagem declarativa pura por definição.

Similarmente, é possível escrever programas de forma declarativa utilizando linguagens de programação imperativas. Isso pode ser obtido utilizando métodos como encapsulamento para esconder detalhes de implementação fora de uma biblioteca.

Linguagens funcionais que admitem tal abordagem incluem Erlang, Haskell e Lisp. Linguagens lógicas que admitem tal abordagem incluem Prolog e Mercury. Linguagens restritivas que admitem tal abordagem incluem Oz.

Paradigma Funcional

Este paradigma trata a computação como uma avaliação de funções matemáticas. Este método enfatiza a aplicação de funções, as quais são tratadas como valores de primeira importância, ou seja, funções podem ser parâmetros ou valores de entrada para outras funções e podem ser os valores de retorno ou saída de uma função.

Exemplos de linguagens de programação que baseiam-se no modelo funcional: Lambda (não implementado para computadores); LISP; Scheme (tentativa de simplificar e melhorar o LISP); ML (Criada em universidade); Miranda (também criada em universidade); Haskell;

Desvantagens: Na programação funcional parecem faltar diversas construções frequentemente (embora incorretamente) consideradas essenciais em linguagens imperativas, como C. Por exemplo, não há alocação explícita de memória nem de variáveis.

Vantagens: Devido ao processo automático de alocação de memória, então efeitos colaterais no cálculo da função são eliminados. Sem estes efeitos, a linguagem assegura que o resultado da função será o mesmo para um dado conjunto de parâmetros não importando onde, ou quando, seja avaliada e é empregado em computações independentes para execução paralela. A recursividade em programação funcional pode assumir várias formas e é em geral uma técnica mais poderosa que o uso de laços do paradigma imperativo.

Paradigma Lógico

Nesse paradigma programas são relações entre Entrada/Saída. Possui estilo declarativo, como o paradigma funcional. Inclui características imperativas, por questões de eficiência. Aplicações em prototipação em geral, sistemas especialistas, bancos de dados, etc.

Exemplos de linguagens de programação que baseiam-se no paradigma lógico: Popler; Conniver; QLISP; Planner; Prolog; Mercury; Oz; Frill.

Vantagens: Possui a princípio todas as vantagens do paradigma funcional. E permite concepção da aplicação em um alto nível de abstração (através de associações entre E/S).

Desvantagens: Variáveis de programa não possuem tipos, nem são de alta ordem

Paradigma Linear

A Programação Linear envolve problemas de otimização nos quais a função objetivo e as restrições são todas lineares.

Problemas de Programação Linear são problemas de otimização nos quais a função objetivo e as restrições são todas lineares. Programação Linear é uma importante área da otimização por várias razões. Muitos problemas práticos em pesquisa operacional podem ser expressos como problemas de programação linear. Certos casos especiais de programação linear, tais como problemas de network flow e problemas de multicommodity flow são considerados importantes o suficiente para que se tenha gerado muita pesquisa em algoritmos especializados para suas soluções. Vários algoritmos para outros tipos de problemas de otimização funcionam resolvendo problemas de PL como subproblemas. Historicamente, ideias da programação linear inspiraram muitos dos conceitos centrais de teoria da otimização, tais como dualidade, decomposição, e a importância da convexidade e suas generalizações.

Programação Estruturada

A Programação Estruturada pode ser entendida como uma forma de programar que visa facilitar a escrita, entendimento, validação e manutenção de programas. Para Dijkstra, “a arte de programar consiste na arte de organizar e dominar a complexidade”. A Programação Estruturada procura reduzir o nível de complexidade através de três níveis:

  • Desenvolvimento do programa em diferentes fases por refinamento sucessivo (desenvolvimento top-down);
  • Decomposição do programa total em módulos funcionais, organizados de preferência num sistema hierárquico;
  • Uso de um número limitado de estruturas básicas de fluxo de controle dentro de cada módulo.

Desenvolvimento Top-Down: Na Programação Estruturada, ao desenvolvermos um algoritmo, temos como objeto um produto final – o programa.  Todavia, para termos esta transição, passamos por várias fases, no sentido “cima para baixo”, onde cada fase é documentada e principalmente obtida por “refinamento” da fase anterior, até chegarmos a um nível de detalhamento que permita implementar o algoritmo diretamente na linguagem de programação.

Modularização: A solução final de um problema é obtida através de soluções de subproblemas, o que permite dividir o programa em módulos com subfunções claramente delimitadas, que podem, inclusive, ser implementados separadamente, por diversos programadores de uma equipe.

Estruturas de Controle: São representadas pela sequência simples, o comando condicional e o comando repetitivo, e fornecem ao programador um aumento da legibilidade e compreensão de cada módulo de programa.  Assim, temos como uma das principais normas da Programação Estruturada: não usar comandos de desvio (GOTO).

Confiabilidade: Medimos a confiabilidade de um sistema através de sua resposta ao uso constante, no tocante a: não apresentar erros; e, corresponder às especificações. Atualmente, a sociedade está totalmente dependente dos sistemas de computação.  Assim, aumenta exponencialmente a importância do nosso trabalho. Nos fins dos anos 60, constatou-se que as sistemáticas usadas pelos programadores eram os grandes responsáveis pela baixa confiabilidade dos programas.  Como solução destes problemas, surgiu a Programação Estruturada (PE).

Manutenibilidade: As revisões sofridas por um programa (releases) tanto para correção de erros quanto para mudanças de especificação, são consideradas como manutenção de software. Os programas devem passar por testes exaustivos de confiabilidade antes de serem colocados em produção. Falhas nesta fase levam a altos níveis de manutenção, que consequentemente, levam a altos custos.

Raciocínio Matemático: As crianças aprendem facilmente como adicionar e subtrair valores.  Suas dificuldades começam no momento em que elas se deparam com problemas e necessitam identificar quais operações trarão soluções para os mesmos. Podemos pensar também num algoritmo como um “mecanismo” de transformação de entradas em saídas.  Assim, um algoritmo ao ser “executado”, receberá algumas entradas, que serão processadas e nos devolverá algumas saídas.

Fluxos de Controle em Algoritmos: Um algoritmo é um texto estático, onde temos vários passos que são lidos e interpretados de cima para baixo.  Para que venhamos a obter o(s) resultado(s) deste algoritmo, necessitamos “executá-lo”, o que resulta em um processo dinâmico.  No fluxo de controle identificamos em cada passo da execução qual é o próximo comando a ser executado. A compreensão da lógica de programação de um algoritmo está diretamente ligada a compreensão de seu fluxo de controle.   A partir de uma compreensão correta, podemos traçar as diversas execuções possíveis de um algoritmo.   Se testarmos todas essas possibilidades, e obtivermos resultados corretos, podemos ter certeza de estar entregando um produto final confiável. Os iniciantes no mundo da programação encontram alguma dificuldade em diminuir a distância conceitual que separa a representação estática de um algoritmo do(s) processo(s) dinâmico(s) de sua execução.  É importante frisar que quando nos propomos a entender um algoritmo, lidamos fisicamente com um texto, mas mentalmente temos processos.

Modularidade

Acoplamento e coesão são conceitos fundamentais da Engenharia de Software. O livro do Pressman apresenta-os de forma clara e sucinta. Vamos revisá-los.

Coesão

Coesão: é a medida da “força funcional” relativa de um módulo. Um módulo coeso realiza uma única tarefa dentro de um procedimento de software, requerendo pouca ou nenhuma interação com procedimentos sendo realizados em outras partes de um programa. O ideal é buscar uma alta coesão. Há vários tipos de coesão, alguns menos desejáveis do que outros.

Segundo Pressman: “… Coesão é uma extensão natural do conceito de ocultamento de informação”. Um módulo coeso realiza uma única tarefa, requerendo pouca interação com outros componentes em outras partes do programa. Dito simplesmente, um módulo coeso deveria (idealmente) fazer apenas uma coisa.

Tipos indesejáveis de coesão:

  • Coesão coincidental: ocorre quando um módulo realiza um conjunto de tarefas frouxamente relacionadas.
  • Coesão lógica: ocorre quando um módulo realiza um conjunto de tarefas que estão relacionadas logicamente.
  • Coesão temporal: ocorre quando um módulo realiza um conjunto de tarefas que devem ser executadas dentro do mesmo decurso de tempo.

Tipos intermediários de coesão:

  • Coesão procedural: ocorre quando os elementos de processamento do módulo são relacionados e devem ocorrer em uma ordem específica.
  • Coesão de comunicação: ocorre quando todos os elementos de processamento do módulo se concentram em uma única área de uma estrutura de dados.

Coesão desejável:

  • Coesão funcional: quando um módulo realiza uma única tarefa procedural distinta.

Ou seja, Segundo Pressman, a classificação das coesões das mais desejada para a pior:

  1. Funcional,
  2. Sequencial,
  3. Comunicacional,
  4. Procedimental
  5. Temporal
  6. Lógico
  7. Coincidental

Acoplamento

Acoplamento: é a medida de interconexão entre módulos em uma estrutura de software. Depende da complexidade de interface entre eles, o ponto no qual a entrada ou referência é feita a um módulo e que dados passam pela interface. O ideal é buscar o mais baixo acoplamento. Também, assim como Coesão, há vários tipos de acoplamento, em diferentes níveis.

O baixo acoplamento entre módulos resulta em menor propensão a efeitos de propagação.

Tipos indesejáveis de Acoplamento:

  • Acoplamento comum: quando um conjunto de módulos acessa uma área global de dados
  • Acoplamento por conteúdo: ocorre quando um módulo faz uso de estruturas de dados ou de controle mantidas no escopo de outro módulo

Tipo intermediário de Acoplamento:

  • Acoplamento por controle: quando módulo passa decisões de controle a outro módulo.

Tipo desejável de acoplamento:

  • Acoplamento de dados: ocorre quando apenas uma lista de dados simples é passada como parâmetro de um módulo para o outro, com uma correspondência um-para-um de itens.

Ou seja, o acoplamento ordenado do mais baixo, para o maior (ou seja, do mais desejado para o menos desejado):

  1. Nenhum acoplamento direto;
  2. Por Dados;
  3. Por Imagem;
  4. Por Controle;
  5. Externo;
  6. Comum;
  7. Por Conteúdo.

Divisão de Decisão

Uma decisão é constituída de duas partes: o reconhecimento da ação a ser tomada e a execução desta ação. Deve-se evitar ao máximo a divisão de decisão. A parte referente à execução da decisão deve ser mantida o mais próximo possível da parte referente ao reconhecimento, a fim de que a informação reconhecida não tenha que percorrer um longo caminho para ser processada (dado migrante).

• Escopo de Controle: conjunto formado por um módulo e todos os seus subordinados;

• Escopo de Efeito de uma Decisão: conjunto de todos os módulos cujo seu procedimento depende da decisão.

É importante que o Escopo de Efeito de uma Decisão de um módulo seja um subconjunto do Escopo de Controle deste módulo. Sempre que esta regra for violada, deve-se elaborar uma nova organização dos módulos com o objetivo de aproximar o reconhecimento da execução.

Recursividade

A recursividade na programação de computadores envolve a definição de uma função que pode invocar a si própria, ou seja, nesta mesma função ela chama a si mesma até que a condição do loop satisfaça terminando a execução da função.

Recursão é o processo de definir algo em termos de si mesmo e é, algumas vezes, chamado de definição circular. Assim, pode-se dizer que o conceito de algo recursivo está dentro de si, que por sua vez está dentro de si e assim sucessivamente, INFINITAMENTE.

Um algoritmo recursivo sempre deverá ter uma condição de parada (solução trivial) que define quando a recursão se encerra, ou seja a sua formulação é FINITA. Mas, os OBJETOS que serão utilizado no algoritmo recursivo terão  definições INFINITAS. Cabe o algoritmo limitá-los.

Exemplo de objetos: O primeiro número natural é zero. O sucessor de um número natural é um número natural.

Percebe-se que os valores desses objetos nunca vão acabar até que o algoritmo recursivo limite-os. Portanto, a definição dos objetos são INFINITOS e a formulação do seu algoritmos tenha uma resposta FINITA.

O poder da recursão deve-se à possibilidade de definição de um conjunto infinito de objetos por meio de uma formulação finita.

Subprogramação

Não devemos nos preocupar com a palavrinha bonitinha e esquisitinha chamada SUBPROGRAMAÇÃO. Apenas devemos pensar que essa palavra nada mais é do que um MÉTODO na Programação Orientada a Objetos, ou simplesmente uma FUNÇÃO na programação estruturada. Então, um método ou uma função pode tranquilamente exercer todas as quatro funções acima.

Os critérios para quebrar um programa em subprogramas em geral levam em conta que cada subprograma deve ser funcionalmente independente e que desempenhe uma tarefa específica única.

Cada subprograma deve possuir suas próprias variáveis (variáveis locais) e receber e/ou retornar valores do/para seu chamador apenas por meio dos parâmetros; variáveis globais devem ser evitadas.

O uso do subprograma torna-se oportuno quando alguma parte do programa desempenha uma tarefa específica e/ou quando algumas linhas de código aparecem repetidas em trechos distintos do programa.

Um subprograma tanto pode estar contido em outro programa, quanto ser ativado até mesmo por outro subprograma.

Um identificador, uma lista de parâmetros para possibilitar a comunicação com outros procedimentos e as ações que nele serão executadas constituem a essência da criação de um procedimento. Mesmo que um procedimento seja criado sem parâmetros, isso não invalida os parâmetros como características essenciais, podemos dizer que é opcional.

Parâmetros (Por Valor, Por Referência)

A passagem de parâmetros envolve o conceito de dois tipos de parâmetros:

  • Parâmetro Real: Variável que contém o valor, utilizada como parâmetro na execução de uma função.
  • Parâmetro Formal: Variável que receberá o valor ou referência, utilizada na definição (formalização) da assinatura do parâmetro.

Exemplo:

Dim parâmetroReal as String
  Public function nomeFunção (ByVal parâmetroFormal as String)

End Function
 
Execução:

nomeFunção (parâmetroReal)  

Na execução é exibido o conteúdo do Parâmetro Real sendo passado para o Parâmetro Formal.

Observe que a passagem de parâmetro foi definida como “Por Valor” (ByVal), no Visual Basic a passagem por referência seria declarada como “ByRef”.

A passagem de parâmetros em uma função pode se dar de diferentes formas. As duas principais são:

  • Por valor: neste mecanismo, o parâmetro formal faz uma cópia do valor do parâmetro real, fazendo com que todas as ações da função manipulem somente o valor copiado, evitando a alteração do valor original. Normalmente utilizada nos casos em que se pretende apenas fornecer um valor (argumento de entrada) para a função sem a necessidade de preservar as alterações que ocorram sobre o mesmo;
  • Por Referência: Neste mecanismo, a relação existente entre os parâmetros formal e real está no endereço dos parâmetros e não em seus valores. O que realmente é passado é o endereço do parâmetro real para o formal. Assim, quem sofre a ação é o próprio parâmetro real; Esta ação é de caráter permanente; Normalmente utilizada quando se pretende preservar as alterações ocorridas sobre o objeto passado como parâmetro real. Principalmente nos casos em que se deseja preservar alterações ocorridas em mais de um valor.

Bibliografia

Questões

Resolução de Questões de Concursos Anteriores

TCM-GO – Auditor de Controle Externo – 2012 – Instituto Cidades
Analise:

I. A programação estruturada é um paradigma de análise, projeto e programação de sistemas de software baseado na composição e interação entre diversas unidades de software chamadas de objetos.
II. A Programação modular é uma forma de programação de computadores que preconiza que todos os programas possíveis podem ser reduzidos a apenas três estruturas: sequência, decisão e repetição.  
III. A Programação orientada a objetos é uma forma de programação no qual o desenvolvimento das rotinas de programação é feito através de módulos, que são interligados entre si através de uma interface comum.  
IV. A Programação Linear envolve problemas de otimização nos quais a função objetivo e as restrições são todas lineares.  
São incorretas as afirmações:

a) III e IV, somente;
b) I e III, somente;
c) I, II e IV, somente;
d) I, II e III, somente;
e) Todas as afirmações.

RESPOSTA: D

Ele deseja saber quais estão Incorretas.

I. A Programação orientada a objetos é um paradigma de análise, projeto e programação de sistemas de software baseado na composição e interação entre diversas unidades de software chamadas de objetos.

II. A Programação Estruturada  é uma forma de programação de computadores que preconiza que todos os programas possíveis podem ser reduzidos a apenas rês estruturas: sequência, decisão e repetição.

III. A Programação modular é uma forma de programação no qual o desenvolvimento das rotinas de programação é feito através de módulos, que são interligados entre si através de uma interface comum

TER-SP – Técnico Judiciário – 2012 – FCC
Em relação à programação estruturada, considere:   Analise o algoritmo a seguir:   Algoritmo Cálculo   var n, r, cont: inteiro início    r ß 0    Cont ß 1    Enquanto(cont<=5) faça       leia(n)       r ß r * n       Cont ß cont + 1    Fim_enquanto    Imprima (r)   fim   Se forem lidos os valores 2, 5, 7, 3 e 4,   a) a saída será 840.   b) haverá um erro, pois o resultado de um cálculo envolvendo a variável r não pode ser armazenado na própria variável r.   c) a saída será 210.   d) haverá um erro, pois o valor gerado será maior do que uma variável do tipo inteiro pode suportar.   e) a saída será 0.

RESPOSTA: E

A saída será sempre 0(zero), não importando o n que será lido pela função “leia()”.

TRE-CE – Técnico Judiciário – 2012 – FCC
Em uma linguagem de programação, considere um tipo de dado inteiro que utiliza 2 bytes de memória para seu armazenamento. Quantos valores únicos diferentes é possível colocar nesse espaço no decorrer da execução de um programa?   a) 256. b) 32768. c) 65536. d) 16777216. e) 4294967296.

RESPOSTA: C

2 Bytes = 256 * 256 = 65536 números.

EBC – Analista de Sistemas – 2011 – CESPE
O mecanismo de iteração pode ser utilizado para sequenciar comandos, controlando a execução do programa.   Certo ou Errado?

RESPOSTA: Errado

Existem basicamente 3 estruturas na programação.

  • Sequência = uma sequência de comandos
  • Seleção = IF, THEN e ELSE
  • Repetição (ou Iteração) = LOOPS
EBC – Analista de Sistemas – 2011 – CESPE
Em programação estruturada, por meio do mecanismo de seleção, é possível testar determinada condição e estabelecer ações a serem realizadas.   Certo ou Errado?

RESPOSTA: Certo

É para isso que serve o comando IF, que é um mecanismos de seleção.

EBC – Analista de Sistemas – 2011 – CESPE
Um programa que possui somente um ponto de entrada e somente um ponto de saída pode ser considerado estruturado.   Certo ou Errado?

RESPOSTA: Certo

Lembre-se que o comando GOTO não invalida um programa como Estruturado. É apenas um comando não aconselhável.

Nossa Caixa – Analista de Sistemas – 2011 – FCC
Em relação à programação estruturada, considere:   I. É uma técnica de desenvolvimento que enfatiza a abstração, que é a habilidade de se concentrar nos principais aspectos de um algoritmo, em vez de se preocupar com as suas especificações.   II. Qualquer algoritmo, independentemente da área de aplicação, de sua complexidade e da linguagem de programação na qual será codificado, pode ser descrito através do número restrito de mecanismos de controle da execução de programas.   III. Sequência, seleção e iteração constituem os blocos elementares de código que se interligam para formar um programa.   IV. É uma técnica que aumenta consideravelmente a velocidade de desenvolvimento dos programas graças à utilização dos conceitos de herança e polimorfismo.   Está correto o que se afirma APENAS em   a) I e II. b) I, II e III. c) I, III e IV. d) II e III. e) II, III e IV.

RESPOSTA: D

I. É uma técnica de desenvolvimento que enfatiza a abstração, que é a habilidade de se concentrar nos principais aspectos de um algoritmo, em vez de se preocupar com as suas especificações – Errado. É POO.

IV. É uma técnica que aumenta consideravelmente a velocidade de desenvolvimento dos programas graças à utilização dos conceitos de herança e polimorfismo – Errado. É POO.

TRT 1ª Região – Analista Judiciário – 2011 – FCC
Considere:   I. Sequência, decisão e iteração são as estruturas necessárias e suficientes para o desenvolvimento da programação de computadores.   II. Uma sequência de passos, incluindo a forma como os dados serão armazenados no computador, permitindo que o problema possa ser resolvido de maneira automática e repetitiva.   III. Cada instrução é traduzida para uma representação interna e interpretada pela simulação de funcionamento do processador, o que torna mais rápido o ciclo escrita-execução-modificação.   IV. A sua aplicação divide e estrutura o algoritmo em partes fechadas e coerentes para evitar a repetição de uma sequência de comandos que é utilizada em várias partes do programa.   Em relação à programação de computadores, as definições contidas nos itens I, II, III e IV correspondem, respectivamente, à programação   a) linear, ao fluxograma, à compilação e ao procedimento. b) modular, ao algoritmo, à constante e à interpretação. c) orientada a objetos, ao projeto lógico, ao fluxograma e à compilação. d) linear, ao algoritmo, à compilação e à função. e) estruturada, ao algoritmo, à interpretação e ao procedimento.

RESPOSTA: E

Programação estruturada é uma forma de programação de computadores que preconiza que todos os programas possíveis podem ser reduzidos a apenas três estruturas: sequência, decisão e interação;

Modularização em tecnologia da informação é um conceito onde o sistema ou software é divido em parte distinta. Compõe o ferramental necessário para um programa mais legível com uma melhor manutenção e melhor desempenho por meio da programação estruturada.

Pode se caracterizado da seguinte forma: Elemento separadamente endereçável do sistema, menor parte do sistema que realiza uma função completa independente de outras funções, conjunto de instruções de um programa que pode ser chamado por um nome, sendo ideal que para os outros módulos seja uma caixa preta.

TRT 1ª Região – Analista Judiciário – 2011 – FCC
Em relação à programação de computadores, considere:   I. Métodos de passagem de parâmetros permitem que parâmetros sejam transmitidos entre o programa principal e os subprogramas, sendo que, na passagem de parâmetros por valor, o valor real é passado e uma variável local é criada para armazená-lo; nesse processo sempre será efetuada a cópia dessa variável.   II. Pilha é uma estrutura de dados com acesso restrito aos seus elementos ordenados pelo princípio FIFO; a pilha pode ser usada na avaliação de expressões numéricas, na recursividade e pelos compiladores, na passagem de parâmetros para as funções.   III. Prototipação é uma abordagem que envolve a produção de versões iniciais de um sistema futuro com a qual pode-se realizar verificações e experimentações para se avaliar algumas de suas qualidades antes que o sistema venha realmente a ser construído.   IV. Registro é uma estrutura básica que permite guardar coleções de dados de diferentes tipos, sendo normalmente utilizado quando um objeto tem diferentes atributos.   É correto o que consta APENAS em   a) I e III. b) II e IV. c) I, II e III. d) I, III e IV e) II, III e IV.

RESPOSTA: D

TRT 20ª Região – Analista Judiciário – 2011 – FCC
No contexto de subprogramação, é correto afirmar sobre a recursividade e a passagem de parâmetros:   a) Na subprogramação, para se criar um procedimento é necessário um identificador, uma lista de parâmetros e as ações que nele serão executadas.   b) Um procedimento pode ser ativado em qualquer parte do programa e sua ativação se dá por meio do uso de sua lista de parâmetros.   c) Dentro de um procedimento ou de uma função, quando ocorre a passagem de parâmetro por valor, as alterações que a função ou procedimento efetuar afetarão diretamente a variável original.   d) Para processar todos os “nós” de uma árvore, um procedimento chama a si mesmo recursivamente para todos os “nós” filhos, exceto o caso base, que é o nó usualmente chamado “folha”.   e) Uma característica típica da recursão é que um conjunto, desde que finito, de sentenças ou outros dados pode ser definido, analisado ou produzido por um programa de computador.

RESPOSTA: A

Banco da Amazônia – Técnico Científico – 2010 – CESPE
Na programação estruturada, existem estruturas de sequência, de decisão e de iteração. No primeiro tipo, uma tarefa é executada após a outra, linearmente. No segundo, a partir de um teste lógico, determinado trecho de código é executado, ou não. No terceiro, a partir de um teste lógico, determinado trecho de código é repetido por um número finito de vezes.   Certo ou Errado?

RESPOSTA: Certo

Acredito que talvez esta questão esteja incorreta, pois ela diz que um Loop deve ser executado finitas vezes, e sabemos que é possível executar até infinitas vezes.

Metrô-SP – Analista de Sistemas – 2010 – FCC
Fornece e determina a visão que o programador possui sobre a estruturação e execução do programa. Trata-se   a) do paradigma de programação. b) do conceito de programação. c) de métodos de programação. d) do paradigma de informação. e) do conceito de informação.

RESPOSTA: A

Metrô-SP – Analista de Sistemas – 2010 – FCC
As linguagens de programação imperativas são caracterizadas por três conceitos:   a) Variáveis, Atribuições e Laços de Iteração. b) Funções, Atribuições e Laços de Iteração. c) Variáveis, Definições e Laços de Iteração. d) Funções, Definições e Laços de Iteração. e) Variáveis, Atribuições e Definições.

RESPOSTA: A

TCM-PA – Técnico em Informática – 2010 – FCC
Os fluxos básicos de controle de um módulo são:   a) composição, interação e repetição. b) repetição, seleção e dependência. c) agregação, composição e seleção. d) seleção, repetição e sequência. e) iteração, modularidade e frequência.

RESPOSTA: D

TCM-PA – Técnico em Informática – 2010 – FCC
Extensão natural do conceito de ocultação de informações, que diz: “um módulo deve executar uma única tarefa dentro do procedimento de software, exigindo pouca interação com procedimentos que são executados em outras partes de um programa”, é o conceito de   a) coesão. b) enfileiramento. c) acoplamento. d) visibilidade. e) recursividade.

RESPOSTA: A

Retirado do livro do PRESSMAN, página 193, Capítulo 9 – Engenharia de projetos na seção 9.3.6 – Independência Funcional:

“… Coesão é uma extensão natural do conceito de ocultamento de informação descrito na Seção 9.3.5″. Um módulo coeso realiza uma única tarefa, requerendo pouca interação com outros componentes em outras partes do programa. Dito simplesmente, um módulo coeso deveria (idealmente) fazer apenas uma coisa.

TER-AM – Técnico Judiciário – 2010 – FCC
Em subprogramação,   a) na modularização de um programa, as partes que o compõe podem ser desenvolvidas por diferentes equipes, sem necessidade de estabelecimento prévio de padrões de programação.   b) um identificador, uma lista de parâmetros para possibilitar a comunicação com outros procedimentos e as ações que nele serão executadas constituem a essência da criação de um procedimento.   c) um objeto é dito global quando sua definição estiver dentro de um procedimento ou quando for declarado como parâmetro formal do procedimento.   d) na passagem de parâmetros por referência, o parâmetro real é passado para o parâmetro formal, fazendo com que todas as ações do procedimento manipulem somente as referências, evitando a alteração do valor original.   e) na passagem de parâmetros por valor, a relação existente entre os parâmetros formal e real está no conteúdo dos parâmetros e não em seu endereço.

RESPOSTA: B

A passagem de parâmetros envolvem o conceito de dois parâmetros:

  • Parâmetro Real: Variável que contém o valor, utilizada como parâmetro na execução de uma função.
  • Parâmetro Formal: Variável que receberá o valor ou referência, utilizada na definição (formalização) da assinatura do parâmetro.

A passagem de parâmetros em uma função pode se dar de diferentes formas. As duas principais são:

  • Por valor: neste mecanismo, o parâmetro formal faz uma cópia do valor do parâmetro real, fazendo com que todas as ações da função manipulem somente o valor  copiado, evitando a alteração do valor original. Normalmente utilizada nos casos em que se pretende apenas fornecer um valor (argumento de entrada) para a função sem a necessidade de  preservar as alterações que ocorram sobre o mesmo;
  • Por Referência: Neste mecanismo, a relação existente entre os parâmetros formal e real está no endereço dos parâmetros e não em seus valores. O que realmente é passado é o endereço do parâmetro real para o formal. Assim, quem sofre a ação é o próprio parâmetro real; Esta ação é de caráter permanente; Normalmente utilizada quando se pretende preservar as alterações ocorridas sobre o objeto passado como parâmetro real. Principalmente nos casos em que se deseja preservar alterações ocorridas em mais de um valor.

Acredito que as alternativas B e E estejam corretas.

TER-RS – Técnico Judiciário – 2010 – FCC
O programa é estruturado como uma coleção de propriedades para encontrar o resultado esperado, e não um procedimento a ser seguido. Este é tipicamente um paradigma relacionado à programação   a) orientada a objetos. b) procedural. c) declarativa. d) imperativa. e) estruturada.

RESPOSTA: C

São as linguagens declarativas como SQL e Prolog.

Nessas linguagens, você descreve o que você quer, e não como obter, isto é, construções procedurais.

TRT 20ª Região – Analista Judiciário – 2010 – FCC
No desenvolvimento de sistemas, no âmbito das relações intermodulares entre as classes, diz-se que o programa está bem estruturado quando há   a) maior coesão e maior acoplamento. b) menor coesão e maior acoplamento. c) menor coesão e menor acoplamento. d) maior coesão e menor acoplamento. e) apenas coesão ou apenas acoplamento.

RESPOSTA: D

TRT 18ª Região – Analista Judiciário – 2008 – FCC
No projeto de módulos adequadamente estruturados deve-se   a) evitar o baixo acoplamento. b) evitar escopo de efeito de um módulo fora de seu escopo de controle. c) evitar a coesão funcional. d) adotar o acoplamento por conteúdo. e) adotar a coesão lógica.

RESPOSTA: B

Divisão de Decisão

Uma decisão é constituída de duas partes: o reconhecimento da ação a ser tomada e a execução desta ação. Deve-se evitar ao máximo a divisão de decisão. A parte referente à execução da decisão deve ser mantida o mais próximo possível da parte referente ao reconhecimento, a fim de que a informação reconhecida não tenha que percorrer um longo caminho para ser processada (dado migrante).

• Escopo de Controle: conjunto formado por um módulo e todos os seus subordinados;

• Escopo de Efeito de uma Decisão: conjunto de todos os módulos cujo seu procedimento depende da decisão.

É importante que o Escopo de Efeito de uma Decisão de um módulo seja um subconjunto do Escopo de Controle deste módulo. Sempre que esta regra for violada, deve-se elaborar uma nova organização dos módulos com o objetivo de aproximar o reconhecimento da execução.

TRT 18ª Região – Analista Judiciário – 2008 – FCC
Visando obter maior independência funcional, é adequado que o esforço seja direcionado ao projeto de módulos   a) que não usem estruturas de seleção. b) cujas tarefas tenham elevada coesão. c) cujas tarefas tenham coesão procedimental. d) que não usem estruturas de repetição. e) cujas tarefas tenham coesão lógica.

RESPOSTA: B

TRT 20ª Região – Técnico Judiciário – 2010 – FCC
Na subprogramação, sobre objetos locais, considere:   I. Um objeto é dito local quando sua definição estiver dentro de um procedimento, ou quando for declarado como parâmetro formal do procedimento.   II. Um objeto local só é visível dentro da unidade onde foi declarado.   III. Objetos locais são aqueles declarados em unidades mais externas, podendo ser referenciados em unidades mais internas.   Está correto o que se afirma APENAS em   a) II e III. b) III. c) I. d) II. e) I e II.

RESPOSTA: E

TRT 20ª Região – Técnico Judiciário – 2010 – FCC
Objeto que se constitui parcialmente ou é definido em termos de si próprio. Nesse contexto, um tipo especial de procedimento (algoritmo) será utilizado, algumas vezes, para a solução de alguns problemas. Esse procedimento é denominado:   a) Recursividade. b) Rotatividade. c) Repetição. d) Interligação. e) Condicionalidade.

RESPOSTA: A

Um objeto é dito recursivo se ele consistir parcialmente ou for definido em termos de si próprio. Nesse contexto, um tipo especial de procedimento (algoritmo) será utilizado, algumas vezes, para a solução de alguns problemas. Esse procedimento é denominado recursivo. Todo procedimento, recursivo ou não, deve possuir pelo menos uma chamada proveniente de um local exterior a ele. Essa chamada é denominada externa. Um procedimento não recursivo é, pois, aquele em que todas as chamadas são externas.

TRT 8ª Região – Analista Judiciário – 2010 – FCC
O procedimento abaixo preenche uma matriz quadrada n × n com:   • −1 nos elementos abaixo da diagonal principal; • 0 nos elementos da diagonal principal; • 1 nos elementos acima da diagonal principal.   procedure PreencheMatriz; var    i, j: integer; begin    for i:= 1 to n do       for j := 1 to n do          if i > j then matriz[i,j] := ?          else if i < j then matriz[i,j] := ?          else matriz[i,j] := ? end;   Os valores que devem ser respectivamente colocados no primeiro, segundo e terceiro comandos de atribuição, marcados no código com uma interrogação (?), para o preenchimento correto da matriz são:   a) 1, -1, 0 b) 1, 0, -1 c) 0, -1, 1 d) -1, 0, 1 e) -1, 1, 0

RESPOSTA: E

i são as linhas da matriz, e j são as colunas da matriz. Se i for maior que j, ou seja, se a linha for maior que a coluna, eu estou abaixo da diagonal principal, logo essa posição deve ser -1; Se i for menor que j, ou seja, se a linha for menor que a coluna, eu estou acima da diagonal principal, logo essa posição deve ser 1; e se caso nenhuma dessas condições acima seja verdadeira, eu tenho que linha é igual a coluna que é igual a diagonal principal, logo essa posição deve ser 0

TER-RS – Técnico Judiciário – 2010 – FCC
O programa é estruturado como uma coleção de propriedades para encontrar o resultado esperado, e não um procedimento a ser seguido. Este é tipicamente um paradigma relacionado à programação   a) orientada a objetos. b) procedural. c) declarativa. d) imperativa. e) estruturada.

RESPOSTA: C

São as linguagens declarativas como SQL e Prolog.

Nessas linguagens, você descreve o que você quer, e não como obter, isto é, construções procedurais.

TRT 8ª Região – Analista Judiciário – 2010 – FCC
Numa competição de programação, ganhava mais pontos o time que apresentasse o algoritmo mais eficiente para resolver o pior caso de um determinado problema. A complexidade assintótica (notação Big O) dos algoritmos elaborados está ilustrada na tabela abaixo.



O time que obteve a medalha de prata (2º algoritmo mais eficiente) é o

a) Branco.
b) Amarelo.
c) Azul.
d) Verde.
e) Vermelho.

RESPOSTA: B

Análise Assintótica: Em ciência da computação e matemática aplicada, particularmente a análise de algoritmos, análise real, e engenharia, análise assintótica é um método de descrever o comportamento de limites. Exemplos incluem o desempenho de algoritmos quando aplicados a um volume muito grande de dados de entrada, ou o comportamento de sistemas físicos quando eles são muito grandes.

Exemplo, se uma função de hash para mapear uma chave em n posições for perfeita – sem colisões-, a performance de busca considerando-se essa função para buscar um elemento vai ser constante porque a posição é calculada a partir da chave apenas.

Isso já nos garante que a equipe com a melhor performance foi a equipe Azul. O que resta fazer é comparar as funções das demais equipes e verficar qual delas dá o menor resultado para um valor de N grande.

Consideremos algumas coisas:

  • n^20 é igual a n*n*n^18
  • n! é igual a n*(n-1)*(n-2)!
  • log(n) < n e log(n) >1
  • 2^n>n para todo n (prova-se isso por indução). Assim, log(n)*2^n > 2^n > n*log(n).

Note que há um fator comum em todas as assertivas acima – n -. Da comparação dos fatores a direita concluímos que n^20 > n! > 2^ > n log(n)

Logo, n log(n) é de menor complexidade assintótica, à excessão da O(1).

Resposta B.

Metrô-SP – Analista de Sistemas – 2010 – FCC
As linguagens de programação imperativas são caracterizadas por três conceitos:

a) Variáveis, Atribuições e Laços de Iteração.
b) Funções, Atribuições e Laços de Iteração.
c) Variáveis, Definições e Laços de Iteração.
d) Funções, Definições e Laços de Iteração.
e) Variáveis, Atribuições e Definições.

RESPOSTA: A

Linguagem de programação imperativa ou programação procedural é um paradigma de programação que descreve a programação como ações (comandos) que muda o estado (variáveis) de um programa.

Metrô-SP – Analista de Sistemas – 2010 – FCC
Fornece e determina a visão que o programador possui sobre a estruturação e execução do programa. Trata-se

a) do paradigma de programação.
b) do conceito de programação.
c) de métodos de programação.
d) do paradigma de informação.
e) do conceito de informação.

RESPOSTA: A

Um paradigma de programação fornece e determina a visão que o programador possui sobre a estruturação e execução do programa. Por exemplo, em programação orientada a objetos, programadores podem abstrair um programa como uma coleção de objetos que interagem entre si, enquanto em programação funcional os programadores abstraem o programa como uma sequência de funções executadas de modo empilhado.

Bahiagás – Analista de Processos Organizacionais – 2010 – FCC
Uma proposição (uso em programação lógica) pode ser observada como uma declaração lógica que pode ou não ser verdadeira. Ela consiste em objetos e nas suas inter-relações. A lógica formal foi desenvolvida para fornecer um método de descrição de proposições com o objetivo de permitir que estas, formalmente declaradas, sejam

a) quantificadas.
b) verificadas quanto à validade.
c) analisadas por sua qualidade.
d) classificadas por sua complexidade.
e) escritas sempre em hexadecimal.

RESPOSTA: B

TER-RS – Técnico Judiciário – 2010 – FCC
A linguagem de programação onde o tipo da variável é definido em tempo de compilação, tem sua estrutura de tipos denominada

a) fracamente tipada.
b) fortemente tipada.
c) dinamicamente tipada.
d) absolutamente tipada.
e) estaticamente tipada.

RESPOSTA: E

DPE-SP – Agente da Defensoria – 2010 – FCC
Um objeto é dito recursivo se ele consistir parcialmente ou for definido em termos de si próprio. Todo procedimento, recursivo ou não, deve possuir pelo menos uma chamada proveniente de um local exterior a ele. Essa chamada é denominada

a) interna.
b) lógica.
c) direta.
d) externa.
e) main.

RESPOSTA: D

DPE-SP – Agente da Defensoria – 2010 – FCC
É utilizada para avaliar uma determinada expressão e definir se um bloco de código deve ou não ser executado. Essa é a definição da estrutura condicional:

a) For
b) If…Then…Else
c) While
d) Do…While
e) Next

RESPOSTA: B

A) estrutura de controle condicional utilizada quando o número de laços é determinado.

B) OK

C) estrutura de controle condicional utilizada quando o número de laços é indeterminado.

D) estrutura de controle condicional utilizada quando o número de laços é indeterminado, mas tem a certeza que será executado ao menos 1 vez

E) nada a ver

TER-RS – Técnico Judiciário – 2010 – FCC
Considere:   I. Acoplamento entre módulos em uma estrutura de software. II. Coesão entre tarefas que se relacionam em um módulo.   Considerando os espectros mais aceitos na programação estruturada (por ex. Pressman), a mais adequada escolha é   a) I. nenhum acoplamento direto; II. coesão funcional. b) I. nenhum acoplamento direto; II. coesão lógica. c) I. acoplamento por dados; II. coesão sequencial. d) I. acoplamento por imagem;  II. coesão procedimental. e) I. acoplamento por conteúdo;  II. coesão funcional.

RESPOSTA: A

O tipo mais desejável de coesão é a funcional, e o tipo mais desejado de acoplamento é

  • Nenhum acoplamento direto;
  • Por Dados;
  • Por Imagem;
  • Por Controle;
  • Externo;
  • Comum;
  • Por Conteúdo.
ANAC – Técnico Administrativo – 2009 – CESPE
Tipos abstratos de dados só podem ser definidos em linguagens que implementam o paradigma de programação estruturada.
Certo ou Errado?

RESPOSTA: Errado

Tipos abstratos de dados são definidas em linguagens que implementam o paradigma de programação orientada a objetos.

ANA – Analista Administrativo (Tecnologia da Informação) – 2009 – ESAF
Na programação estruturada, são necessários apenas três blocos de formas de controle para implementar algoritmos. São eles:   a) seleção, repetição e aninhamento. b) empilhamento, aninhamento e operação. c) sequência, aninhamento e seleção. d) sequência, seleção e repetição. e) função, operação e programa.

RESPOSTA: D

O princípio básico de programação estruturada é que um programa é composto por blocos elementares de código que se interligam através de três mecanismos básicos, que são sequência, seleção e iteração (repetição). Cada uma destas construções tem um ponto de início (o topo do bloco) e um ponto de término (o fim do bloco) de execução.

  • Sequência: implementa os passos de processamento necessários para descrever qualquer programa.
  • Seleção: especifica a possibilidade de selecionar o fluxo de execução do processamento baseado em ocorrências lógicas. Há duas formas básicas de condição. Exemplos: IF, ELSE e SWITCH.
  • Iteração: permite a execução repetitiva de segmentos do programa. Exemplos: WHILE e FOR.
TCE-GO – Analista de Controle Externo – 2009 – FCC
No âmbito das linguagens de programação puramente funcionais, considere:   I. Elas não utilizam variáveis. II. Construções iterativas não são possíveis sem variáveis. III. Sem variáveis, a repetição deve ser feita por meio de recursão e não por meio de laços.   Está correto o que se afirma em   a) I, apenas. b) I e II, apenas. c) I e III, apenas. d) II e III, apenas. e) I, II e III.

RESPOSTA: E

“Uma linguagem de programação puramente funcional não usa variáveis ou instruções de atribuição. Isso libera o programador de preocupar-se com as células de memória do computador no qual o programa é executado. Sem variáveis, construções iterativas não são possíveis, porque elas são controladas por variáveis. A repetição deve ser feita por meio de recursão, não por meio de laços.” [Trecho do livro Conceitos de Linguagem de Programação de Robert W. Sebesta].

TJ-PA – Analista Judiciário – 2009 – FCC
Considere as afirmativas abaixo.   I. A mais adequada coesão entre tarefas de um módulo é a sequencial.   II. É mais adequado o acoplamento por controle entre módulos do que nenhum acoplamento direto.   III. O baixo acoplamento entre módulos resulta em menor propensão a efeitos de propagação.   De acordo com as recomendações da Engenharia de Software quanto à melhoria da qualidade dos projetos, é correto o que se afirma APENAS em   a) I. b) II. c) I e II. d) III. e) II e III.

RESPOSTA: D

I – A mais adequada coesão entre tarefas de um modulo é a funcional

II – O acoplamento mais adequado é nenhum acoplamento.

TJ-SE – Técnico Judiciário – 2009 – FCC
A recursividade na programação de computadores envolve a definição de uma função que   a) apresenta outra função como resultado. b) aponta para um objeto. c) aponta para uma variável. d) chama uma outra função. e) pode chamar a si mesma.

RESPOSTA: E

A recursividade na programação de computadores envolve a definição de uma função que pode invocar a si própria, ou seja, nesta mesma função ela chama a si mesma até que a condição do loop satisfaça terminando a execução da função.

TJ-SE – Técnico Judiciário – 2009 – FCC
  Em uma faculdade, o professor queria testar o conhecimento de seus alunos/técnicos, então ele deu as seguintes ordens (algumas contraditórias):   Todos os módulos agora devem   I. Ser construídos com alto acoplamento de dados entre si e coesão comunicacional entre seus elementos internos;   II. Ter suas estruturas construídas com seu escopo de efeito dentro de seu escopo de controle;   III. Ser construídos com alto acoplamento de controle entre si e coesão lógica entre seus elementos internos;   IV. Ser construídos com baixo acoplamento de dados entre si e coesão funcional entre seus elementos internos.   Considerando as regras de programação estruturada, a estrutura de módulos mais adequada foi acertada por quem, de acordo com a ordem, projetou APENAS as ordens   a) IV. b) II. c) I e II. d) II e III. e) II e IV.

RESPOSTA: E

TJ-PA – Analista Judiciário – 2009 – FCC
Na programação estruturada é adequado e fundamental   a) o conhecimento e uso de construções de sequência, repetição e seleção. b) o uso da mais baixa coesão possível entre tarefas de um módulo. c) o uso do mais alto acoplamento possível entre módulos. d) construir módulos cujo escopo de efeito não esteja no seu alcance de controle. e) aumentar a redundância das interfaces modulares sempre que possível.

RESPOSTA: A

TRE-AM – Técnico Judiciário – 2009 – FCC
Considere os níveis de coesão entre tarefas de um módulo no espectro de Pressman que são: Procedimental (PR), Coincidental (CD), Temporal (TP), Lógico (LG), Funcional (FU), Sequencial (SE) e Comunicacional (CM). A recomendação para obtenção de módulos com um só propósito, iniciando com a pior solução e caminhando para a melhor, no espectro, é dada pela sequência:   a) LG-TP-CM-FU-SE-PR-CD. b) CD-TP-PR-SE-CM-FU-LG. c) CD-LG-TP-PR-CM-SE-FU. d) TP-PR-SE-CM-CD-LG-FU. e) PR-SE-CM-TP-LG-CD-FU.

RESPOSTA: C

Basta Saber que a melhor coesão é a funcional, e a pior é a coincidental.

TRE-PI – Técnico Judiciário – 2009 – FCC
Com relação a conceitos de programação estruturada e lógica de programação, assinale a opção incorreta.   a) Na maioria das linguagens de programação modernas, a coluna em que a instrução está localizada é irrelevante, e dessa forma, na codificação das construções estruturadas, é recomendável que sejam usados diferentes níveis de tabulação para indicar blocos de distintos níveis.   b) A compilação é o processo de tradução em que um programa do sistema traduz determinado programa descrito por meio de uma linguagem de alto nível específica para um programa equivalente em linguagem assembly.   c) Para que um programa possa ser executado, seu código de máquina deve estar presente na memória. O ligador é o programa do sistema responsável por transferir o código de máquina de um módulo objeto para a memória e encaminhar o início de sua execução. d) A programação estruturada tem como princípio básico compor um programa por blocos elementares de código, que se interligam por meio de três mecanismos básicos: sequência; seleção; e iteração.

RESPOSTA: C

Programas complexos raramente são descritos através de um único arquivo-fonte, mas sim organizados em módulos objetos inter-relacionados. Tais módulos podem agregar funcionalidades da aplicação sendo desenvolvida ou recursos comuns do sistema que devem ser integrados à aplicação. O programa do sistema ligador é o responsável por interligar os diversos módulos de um programa para gerar o programa que será posteriormente carregado para a memória. Essa etapa de preparação de um programa para sua execução é denominada ligação.

Para que um programa possa ser executado, seu código de máquina deve estar presente na memória. O carregador é o programa do sistema responsável por transferir o código de máquina de um módulo objeto para a memória e encaminhar o início de sua execução. O processo de transferir o conteúdo de um módulo objeto para a memória principal é denominado carregamento. A execução de qualquer programa deve ser precedida por seu carregamento.

TRE-PI – Técnico Judiciário – 2009 – FCC
Em relação à subprogramação, considere:   I. Os critérios para quebrar um programa em subprogramas em geral levam em conta que cada subprograma deve ser funcionalmente independente e que desempenhe uma tarefa específica única.   II. Cada subprograma deve possuir suas próprias variáveis (variáveis locais) e receber e/ou retornar valores do/para seu chamador apenas por meio dos parâmetros; variáveis globais devem ser evitadas.   III. O uso do subprograma torna-se oportuno quando alguma parte do programa desempenha uma tarefa específica e/ou quando algumas linhas de código aparecem repetidas em trechos distintos do programa.   IV. Um subprograma tanto pode estar contido em outro programa, quanto ser ativado até mesmo por outro subprograma.   Está correto o que se afirma em:   a) I, II, III e IV. b) I, II e III, apenas. c) II, III e IV, apenas. d) II e III, apenas. e) I e IV, apenas.

RESPOSTA: A

Não devemos nos preocupar com a palavrinha bonitinha e esquisitinha chamada SUBPROGRAMAÇÃO. Apenas devemos pensar que essa palavra nada mais é do que um MÉTODO na programação OO, ou simplesmente uma FUNÇÃO na programação estruturada. Então, um método ou uma função pode tranquilamente exercer todas as quatro funções acima.

TRT 7ª Região – Analista Judiciário – 2009 – FCC
No projeto de software, excetuando-se o acoplamento direto entre módulos, o seguinte no espectro (PRESSMAN) e o mais baixo desejado possível é o acoplamento:   a) por dados. b) por controle. c) por conteúdo. d) externo. e) comum.

RESPOSTA: A

Questão extremamente mal feita, ela não quer o nível menos desejado. Ela quer o nível de mais baixo acomplamento. Ou seja, o nível de acoplamento mais desejado.

Os níveis referidos são, do mais baixo acoplamento ao mais alto acoplamento:

  1. Nenhum acoplamento direto;
  2. Por Dados;
  3. Por Imagem;
  4. Por Controle;
  5. Externo;
  6. Comum;
  7. Por Conteúdo.
TRT 16ª Região – Analista Judiciário – 2009 – FCC
O poder da recursão deve-se à possibilidade de definição de um conjunto   a) finito de objetos por meio de uma formulação finita. b) finito ou não de objetos por meio de uma formulação infinita. c) infinito de objetos por meio de uma formulação finita. d) infinito de objetos por meio de uma formulação infinita. e) finito de objetos por meio de uma formulação infinita.

RESPOSTA: C

Recursão é o processo de definir algo em termos de si mesmo e é, algumas vezes, chamado de definição circular. Assim, pode-se dizer que o conceito de algo recursivo está dentro de si, que por sua vez está dentro de si e assim sucessivamente, INFINITAMENTE.

Um algoritmo recursivo sempre deverá ter uma condição de parada (solução trivial) que define quando a recursão se encerra, ou seja a sua formulação é FINITA. Mas, os OBJETOS que serão utilizado no algoritmo recursivo terão  definições INFINITAS. Cabe o algoritmo limitá-los.

Exemplo de objetos: O primeiro número natural é zero. O sucessor de um número natural é um número natural.

Percebe-se que os valores desses objetos nunca vão acabar até que o algoritmo recursivo limite-os. Portanto, a definição dos objetos são INFINITOS e a formulação do seu algoritmos tenha uma resposta FINITA.

TRT 16ª Região – Analista Judiciário – 2009 – FCC
Dentro do espectro de coesão entre tarefas de um módulo é menos indicado usar a   a) procedimental do que a temporal. b) funcional do que a temporal. c) lógica do que a coincidental. d) comunicacional do que a procedimental. e) sequencial do que a funcional.

RESPOSTA: E

Bastava saber que a funcional é a mais desejada.

Mas para uma resposta mais fundamentada, segue a lista das mais desejadas:

  1. Funcional,
  2. Sequencial,
  3. Comunicacional,
  4. Procedimental
  5. Temporal
  6. Lógico
TRT 16ª Região – Analista Judiciário – 2009 – FCC
O escopo de efeito de um módulo está fora do alcance de controle desse módulo quando o   a) efeito da decisão é hierarquicamente superior à decisão. b) efeito da decisão é subordinado à decisão. c) escopo do acoplamento entre suas tarefas ocorre por intermédio de dados. d) escopo do acoplamento entre suas tarefas ocorre por intermédio de conteúdo. e) efeito da coesão entre suas tarefas tem escopo funcional.

RESPOSTA: A

Divisão de Decisão

Uma decisão é constituída de duas partes: o reconhecimento da ação a ser tomada e a execução desta ação. Deve-se evitar ao máximo a divisão de decisão. A parte referente a execução da decisão deve ser mantida o mais próximo possível da parte referente ao reconhecimento, a fim de que a informação reconhecida não tenha que percorrer um longo caminho para ser processada (dado migrante).

• Escopo de Controle: conjunto formado por um módulo e todos os seus subordinados;

• Escopo de Efeito de uma Decisão: conjunto de todos os módulos cujo seu procedimento depende da decisão.

É importante que o Escopo de Efeito de uma Decisão de um módulo seja um subconjunto do Escopo de Controle deste módulo. Sempre que esta regra for violada, deve-se elaborar uma nova organização dos módulos com o objetivo de aproximar o reconhecimento da execução.

MPE-RS – Técnico Judiciário – 2008 – FCC
As palavras reservadas estão diretamente associadas ao conceito de   a) variable. b) alias. c) constant. d) data type. e) identifier.

RESPOSTA: E

Metrô-SP – Analista Trainee – 2008 – FCC
Programar o computador significa “dar ordens a ele,” as quais são executadas sequencialmente. Em tal paradigma, “representar” a solução de um problema para ser resolvido pelo computador envolve escrever uma série de ações que, se executadas sequencialmente, levam à solução. Trata-se do paradigma:   a) Programação em Lógica. b) Funcional. c) Orientado a Objetos. d) Procedural. e) Orientado a Símbolos.

RESPOSTA: D

Procedural ou Imperativa.

Metrô-SP – Analista Trainee – 2008 – FCC
Programar o computador significa “dar ordens a ele,” as quais são executadas sequencialmente. Em tal paradigma, “representar” a solução de um problema para ser resolvido pelo computador envolve escrever uma série de ações que, se executadas sequencialmente, levam à solução. Trata-se do paradigma:   a) Programação em Lógica. b) Funcional. c) Orientado a Objetos. d) Procedural. e) Orientado a Símbolos.

RESPOSTA: D

Metrô-SP – Analista Trainee – 2008 – FCC
Os paradigmas das linguagens de programação, interpretados como “meios” onde problemas são resolvidos, apresentam diferentes significados para “programa” e para a “máquina que executa o programa”. Nesse sentido, no meio funcional,   a) o computador é entendido como uma máquina que obedece ordens e o programa como uma prescrição de solução para o problema.   b) uma expressão é avaliada e seu resultado, em geral, é armazenado em uma célula de memória representada por uma variável.   c) a ordem de avaliação de suas expressões de mapeamento é controlada por sequenciarão e iteração.   d) os programas não estabelecem exatamente “como” um resultado deve ser computado, mas, descrevem fatos e regras que podem levar a máquina à dedução desse cálculo.   e) o computador atua como uma máquina que avalia funções e o programa consiste da definição e composição de funções.

RESPOSTA: E

TCE-AL – Programador – 2008 – FCC
A estrutura de dados de iteração na qual uma ação será executada pelo menos uma vez, antes da avaliação da condição, é implementada pelo comando básico   a) condicional. b) faça enquanto. c) sequencial. d) de repetição. e) de seleção.

RESPOSTA: D

A programação estruturada é composta de 3 estruturas básicas.

i) Sequência: Refere-se a ordem de execução das instruções.

ii) Seleção/Decisão: Refere-se a execução de partes de código apenas sob determinado estado do programa, na prática é alcançado por estruturas como if else, switch case

iii) Repetição/Iteração: Baseia-se em repetições da execução de um trecho de código até o programa chegar a um certo estado cuja repetição possa ser interrompida.

Na prática usa-se

  • Repetição pré-testada: while ()  , for ( )
  • Repetição pós-testada: do … while (), repeat … until ()

É possível que essa questão tenha sido anulada pois há duas alternativas corretas.

b) “faça enquanto” refere-se ao do {} while ( ); onde as instruções são executadas pelo menos uma vez e até que a condição seja falsa.

d) “de repetição” refere-se ao repeat {} until( ); onde as instruções são executadas pelo menos uma vez e até que a condição seja verdadeira.

Porém, a questão pode ter considerado que existem apenas 3 tipos de estruturas básicas e “Faça enquanto” não é uma delas.

MPU – Analista de Informática – 2007 – FCC
Especificar um valor a ser armazenado na área de memória referenciada por um nome descritivo caracteriza uma   a) variável. b) instrução de controle. c) sintaxe de comentário. d) constante. e) instrução de atribuição.

RESPOSTA: E

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Sair da versão mobile