Pular para o conteúdo principal

Questão de Programação — Linguagens de programação — CESPE / CEBRASPE 2024

ProgramaçãoLinguagens de programação
Código
ce176022
Banca
CESPE / CEBRASPE
Órgão
LNA
Ano
2024
Nível
Superior
Cargo
Tecnologista – Especialidade: Desenvolvimento e Arquitetura de Software
Imagem associada para resolução da questãoA seguir, é apresentado o resultado do código precedente, desenvolvido em Python, ao final de sua execução.Ação:correvoaCom base nessas informações, é correto afirmar que o princípio da orientação a objeto utilizado nesse programa, especialmente em relação ao método acao, é a(o)
  1. Aabstração.
  2. Bencapsulamento.
  3. Cherança.
  4. Dpolimorfismo.
  5. Erecursividade.
Revelar gabarito e comentário

GabaritoD — polimorfismo.

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Polimorfismo em Python

Gabarito: letra D. O princípio da orientação a objetos utilizado no programa, especialmente em relação ao método acao, é o polimorfismo, pois o mesmo método (acao) é sobrescrito em classes diferentes, produzindo comportamentos distintos ("corre" e "voa"). O polimorfismo permite que objetos de classes diferentes respondam à mesma mensagem de maneiras diferentes, e é exatamente isso que o código demonstra.

O polimorfismo é um dos quatro pilares da programação orientada a objetos (POO), ao lado da abstração, encapsulamento e herança. Ele se manifesta de duas formas principais: estático (sobrecarga) e dinâmico (sobrescrita). O polimorfismo estático ocorre quando uma classe define múltiplos métodos com o mesmo nome, mas com assinaturas diferentes (diferentes parâmetros). Já o polimorfismo dinâmico ocorre quando uma subclasse fornece uma implementação específica de um método já definido em sua superclasse, ou seja, quando há sobrescrita (override) de métodos. É essa segunda forma que o código da questão exemplifica: classes diferentes (provavelmente subclasses de uma mesma superclasse) implementam o método acao de maneiras distintas, e ao chamar esse método em objetos dessas classes, obtêm-se resultados diferentes.

Na prática, o polimorfismo é o que permite escrever código que trata objetos de forma genérica, sem precisar saber exatamente qual é a classe concreta do objeto em tempo de compilação. Por exemplo, se temos uma lista de objetos de diferentes subclasses, podemos iterar sobre ela e chamar o método acao em cada um, e cada objeto executará sua própria versão do método. Isso promove a extensibilidade e a reutilização de código, pois novas classes podem ser adicionadas sem alterar o código que as utiliza.

A pegadinha da questão está em confundir polimorfismo com outros pilares da POO. A abstração é o processo de modelar objetos do mundo real, focando apenas nas características relevantes para o sistema. O encapsulamento é o mecanismo de esconder os detalhes internos de uma classe, protegendo seus atributos e métodos. A herança é o mecanismo que permite que uma classe herde atributos e métodos de outra, promovendo o reuso de código. A recursividade não é um princípio da POO, mas sim uma técnica de programação em que uma função chama a si mesma. O polimorfismo, por sua vez, é a capacidade de um mesmo método se comportar de formas diferentes em classes diferentes, que é exatamente o que o código demonstra.

Guarde a distinção central: enquanto a herança é o mecanismo que permite o reuso de código e a criação de hierarquias, o polimorfismo é a capacidade de usar essa hierarquia para que objetos de classes diferentes respondam à mesma mensagem de maneiras diferentes. É essa capacidade que o código da questão explora.

Alternativa A — ❌ Incorreta

A abstração é o pilar da POO que consiste em modelar objetos do mundo real, focando apenas nas características essenciais para o sistema, ignorando detalhes irrelevantes. No código, o método acao não está sendo usado para abstrair características de um objeto, mas sim para demonstrar que o mesmo método pode ter comportamentos diferentes em classes diferentes. A abstração é um conceito mais amplo, relacionado à modelagem, e não à execução de um método com comportamentos distintos.

Alternativa B — ❌ Incorreta

O encapsulamento é o mecanismo que esconde os detalhes internos de uma classe, protegendo seus atributos e métodos, geralmente por meio de modificadores de acesso (como private e public). No código, não há evidência de que o método acao esteja encapsulado ou que haja proteção de atributos. O foco da questão é o comportamento do método em diferentes classes, o que caracteriza o polimorfismo, não o encapsulamento.

Alternativa C — ❌ Incorreta

A herança é o mecanismo que permite que uma classe herde atributos e métodos de outra, promovendo o reuso de código. Embora o polimorfismo dinâmico (sobrescrita) dependa da herança para existir, a questão pergunta especificamente sobre o princípio utilizado "especialmente em relação ao método acao". O que está em destaque é o fato de o mesmo método se comportar de formas diferentes, o que é a essência do polimorfismo, e não a herança em si. A herança é o meio, o polimorfismo é o fim.

Alternativa D — ✅ Correta ⟵ GABARITO

O polimorfismo é o princípio da POO que permite que objetos de classes diferentes respondam à mesma mensagem (chamada de método) de maneiras diferentes. No código, o método acao é sobrescrito em classes diferentes, produzindo saídas distintas ("corre" e "voa"). Isso é um exemplo clássico de polimorfismo dinâmico, também conhecido como sobrescrita (override). O polimorfismo é o que permite tratar objetos de forma genérica, chamando o mesmo método e obtendo comportamentos específicos de cada classe.

Alternativa E — ❌ Incorreta

A recursividade é uma técnica de programação em que uma função chama a si mesma, direta ou indiretamente, para resolver um problema dividindo-o em subproblemas menores. Não é um princípio da orientação a objetos, e o código da questão não apresenta nenhuma chamada recursiva. A recursividade é um conceito de algoritmos e estruturas de dados, não um pilar da POO.

Gabarito: letra D — o princípio utilizado é o polimorfismo, pois o método acao se comporta de formas diferentes em classes diferentes.

Link permanente: /questoes/ce176022