Avaliação de Conhecimento

Tópico: Programação Estruturada e Orientada a Objetos (Padrão ENEM / ENADE)

Resultado do Simulado

0 / 10

Confira abaixo o gabarito comentado para revisão.

Questão 1

O paradigma de programação estruturada baseia-se na decomposição de algoritmos em blocos lógicos modulares. De acordo com o Teorema de Böhm-Jacopini, qualquer algoritmo computacional complexo pode ser construído combinando-se estritamente três estruturas de controle de fluxo de execução nativas. Quais são elas?

Justificativa incorreta: Esses termos formam o núcleo conceitual do paradigma de Orientação a Objetos, não da programação estruturada estrutural.
Justificativa: O teorema demonstra cientificamente que estruturas sequenciais, condicionais (if/else) e laços de repetição (while/for) bastam para mapear toda e qualquer lógica computacional realizável.
Justificativa incorreta: São recursos de arquitetura de baixo e médio nível de linguagens imperativas como C, mas não são estruturas primitivas de fluxo.
Justificativa incorreta: São tópicos avançados de execução de tarefas simultâneas, fora das regras matemáticas da computação puramente estruturada.
Justificativa incorreta: Correspondem a modos de armazenamento e estruturas de dados em memória, e não a mecanismos de controle de fluxo de execução de instruções.
Questão 2

Em Programação Orientada a Objetos (POO), o mecanismo que permite ocultar detalhes de implementação interna e proteger o estado de um objeto contra modificações diretas ou indevidas feitas por agentes externos, forçando o acesso a ocorrer apenas via métodos públicos específicos, é chamado de:

Justificativa incorreta: Polimorfismo trata da capacidade de um método possuir múltiplos comportamentos em tempo de execução, dependendo do objeto instanciado.
Justificativa incorreta: Herança permite que subclasses herdem membros, propriedades e métodos de superclasses para fins de reuso de código.
Justificativa: O encapsulamento blinda o estado do objeto (usando modificadores de acesso como private ou protected) e expõe apenas canais seguros (métodos getters e setters) para interação, garantindo integridade e consistência interna de regras.
Justificativa incorreta: Consiste na criação física em memória Heap de cópias ou objetos distintos a partir de um molde abstrato (classe).
Justificativa incorreta: A sobrecarga permite definir métodos com o mesmo nome na mesma classe, mudando apenas a assinatura e os parâmetros de entrada.
Questão 3

Analise o trecho de código abstrato estruturado abaixo, muito comum em lógicas imperativas de sistemas legados de faturamento comercial:

funcao calcularDesconto(valorTotal) { se (valorTotal > 1000) { retorne valorTotal * 0.10; } senao { retorne valorTotal * 0.05; } }

Se reescrevêssemos essa mesma regra de negócio adotando estritamente os conceitos de POO, qual seria a abordagem correta e conceitualmente recomendada?

Justificativa incorreta: Essa prática continua ferindo o paradigma da POO, agindo de forma estruturada pura sob a camuflagem de tipos.
Justificativa: Na POO, dados (atributos) e comportamentos (métodos) caminham unificados e acoplados harmonicamente dentro de estruturas chamadas classes, garantindo coesão biunívoca.
Justificativa incorreta: A POO não proíbe condicionais primárias, apenas permite modularizá-las de forma elegante por polimorfismo em cenários de alta complexidade.
Justificativa incorreta: Variáveis guardam dados elementares e não devem virar métodos abstratos por herança sem correlação semântica legítima.
Justificativa incorreta: O antipadrão "God Class" quebra severamente a coesão de escopos e os princípios de design de software limpo (SOLID).
Questão 4

Considere um sistema de software que possui uma superclasse abstrata chamada MeioDePagamento com um método processarTransacao(). As subclasses CartaoCredito, Boleto Bancario e Pix estendem essa superclasse e redefinem o comportamento desse método de formas totalmente distintas. Ao invocar pagamento.processarTransacao() sem saber o tipo exato do objeto em tempo de compilação, o sistema demonstra o conceito de:

Justificativa incorreta: Indica amarração de código rígida, e a flexibilidade exemplificada é justamente o oposto: baixo acoplamento.
Justificativa: O polimorfismo assegura que uma mesma chamada de método em uma referência genérica se comporte de maneiras específicas em tempo de execução, de acordo com o tipo real da subclasse que foi instanciada.
Justificativa incorreta: Termo inadequado, uma vez que a execução depende do tipo dinâmico da classe concreta e não de passos imperativos ordenados por arquivos fixos.
Justificativa incorreta: Construtores inicializam variáveis e instanciam objetos em memória Heap, não operando chamadas dinâmicas sobre interfaces.
Justificativa incorreta: Coesão indica focar estritamente em uma única responsabilidade funcional de negócio, o que difere de variação polimórfica.
Questão 5

Em um sistema legado escrito sob o paradigma imperativo-estruturado puro, o compartilhamento excessivo de dados entre diferentes rotinas e funções do sistema ocorre frequentemente por meio de variáveis globais. Diante da Engenharia de Software, o maior risco arquitetural do uso indiscriminado de variáveis globais é:

Justificativa incorreta: Variáveis globais não alteram negativamente os ciclos brutos de clock computacionais de execução da CPU.
Justificativa incorreta: Laços operam sobre qualquer escopo ou alocação de memória disponível e acessível no fluxo.
Justificativa: Variáveis globais geram dependências ocultas e quebram o isolamento dos escopos. Uma rotina isolada pode adulterar o dado indevidamente, gerando bugs complexos de rastrear em outros locais do software.
Justificativa incorreta: Compiladores convertem código nativo independentemente da higienização ou organização de escopo de variáveis das linguagens.
Justificativa incorreta: Sistemas puramente estruturados não possuem herança de classes ativa nativa, inviabilizando essa substituição conceitual.
Questão 6

Na modelagem e implementação orientada a objetos, qual é o conceito que funciona estritamente como um "molde", "modelo" ou "projeto abstrato" definindo quais atributos estruturais e quais comportamentos operacionais uma entidade concreta de software possuirá ao ser instanciada em memória?

Justificativa incorreta: A instância é o objeto físico concreto já materializado e alocado em memória, e não o molde conceitual abstrato inicial.
Justificativa: A classe é a representação abstrata que serve de fôrma/gabarito para a criação de instâncias concretas (objetos), agrupando ali sua estrutura de atributos e comportamentos mapeados.
Justificativa incorreta: Corresponde a uma função interna específica de alteração de dados usada para fins de controle e encapsulamento de atributos privados.
Justificativa incorreta: É uma referência efêmera que reside na memória Stack apenas durante a execução de uma determinada função modular fechada.
Justificativa incorreta: É um dado atômico elementar que compõe o estado interno do objeto (como inteiros, booleanos ou strings).
Questão 7

O princípio da herança em POO permite o reuso de código, mas seu uso indevido pode criar hierarquias rígidas e acopladas. O princípio de design de software limpo que prega que "as subclasses devem ser totalmente substituíveis pelas suas superclasses sem que isso quebre a integridade da execução da aplicação" é o:

Justificativa incorreta: Estipula que cada classe ou módulo do sistema deve possuir apenas uma única razão técnica clara para mudar.
Justificativa: O LSP (L do acrônimo SOLID) define que objetos de uma superclasse devem poder ser substituídos por objetos de suas subclasses sem alterar as propriedades corretas do programa.
Justificativa incorreta: Determina que artefatos de software devem estar abertos para extensão, porém fechados para modificações diretas no core do código.
Justificativa incorreta: Orienta que módulos de alto nível não devem depender de módulos de baixo nível, mas sim de abstrações seguras e interfaces estáveis.
Justificativa incorreta: Afirma que uma classe cliente jamais deve ser forçada a depender de interfaces extensas ou métodos que ela não consome de fato.
Questão 8

Durante uma auditoria de arquitetura de código em um sistema corporativo escrito em Java/C#, o analista deparou-se com uma situação onde precisava criar um método capaz de receber qualquer objeto que implementasse uma determinada interface, independentemente de qual fosse a classe concreta de origem. Essa flexibilidade de design de tipos baseia-se fortemente em:

Justificativa: Interfaces definem contratos operacionais puros que as classes se obrigam a implementar. Isso viabiliza programar focado na abstração dos comportamentos exigidos, e não em acoplamentos com tipos de dados concretos.
Justificativa incorreta: O comando GOTO força saltos diretos arbitrários de linhas no fluxo estruturado básico, prática nociva banida na engenharia de software limpo.
Justificativa incorreta: Trata de requisições de IO em nível de baixo hardware (como gravar arquivos em disco ou enviar pacotes de rede via Kernel), sem relação com polimorfismo de tipos em POO.
Justificativa incorreta: Consiste na limpeza e liberação automática ou manual de espaço físico de memória consumido por objetos descartados ou órfãos no fluxo da aplicação.
Justificativa incorreta: São diretivas compilatórias básicas textuais de substituição de constantes comuns em linguagens procedimentais nativas.
Questão 9

Ao comparar as abordagens de depuração e testes de erros de software entre o paradigma estruturado e o paradigma de POO, um engenheiro concluiu corretamente que:

Justificativa incorreta: O encapsulamento auxilia os testes na medida em que garante caminhos únicos controlados de alterações de dados nos estados internos.
Justificativa incorreta: Programação estruturada comum não dispõe nativamente de recursos de herança ou objetos dinâmicos em níveis nativos de linguagem.
Justificativa: Em POO, o desacoplamento propiciado por classes e interfaces viabiliza instanciar mocks (dublês de testes), isolando completamente o comportamento da unidade técnica em auditoria sob condições de laboratório estáveis.
Justificativa incorreta: Sistemas estruturados sofrem severamente com quebras inesperadas devido ao acoplamento por variáveis globais e ponteiros de memória soltos.
Justificativa incorreta: Loops geram repetições de instruções em tempo de execução, não afetando os tempos nativos estáveis de compilação ou build de pacotes estáticos.
Questão 10

Em engenharia de software corporativo, o reuso de código é um pilar estratégico. Enquanto a programação estruturada busca o reuso por meio de bibliotecas de sub-rotinas e funções matemáticas utilitárias soltas, o paradigma de Orientação a Objetos atinge reusabilidade sofisticada através do acoplamento dinâmico baseado na composição ou na extensão de objetos. Qual a recomendação atual das boas práticas de design (como os padrões de projeto do GoF) referente a herança e composição?

Justificativa incorreta: Hierarquias de herança excessivamente profundas engessam o software e tornam manutenções inviáveis devido ao forte acoplamento com a classe mãe.
Justificativa: Favorecer a composição (ter uma instância de um objeto como atributo de outro) em detrimento da herança direta (is-a) mitiga acoplamentos rígidos e possibilita alterar os comportamentos agregados dinamicamente em runtime de forma segura.
Justificativa incorreta: Servidores em nuvem rodam soluções massivas corporativas robustas em POO (Java, .NET) de alta performance e escalabilidade operacional sem gargalos físicos por paradigma.
Justificativa incorreta: Atributos estáticos pertencem à classe e não às instâncias de modo individualizado, gerando anomalias conceituais semelhantes às das variáveis globais imperativas.
Justificativa incorreta: Métodos construtores são essenciais para garantir a correta inicialização de dados e alocação física estável dos objetos em memória Heap, não devendo ser omitidos.