Pular para o conteúdo principal

Questão de Engenharia de Software — Orientação a Objetos — FGV 2023

Engenharia de SoftwareOrientação a Objetos
Código
fg065326
Banca
FGV
Órgão
PGM - Niterói
Ano
2023
Nível
Superior
Cargo
Analista de Tecnologia da Informação
Observe o método liga() do seguinte trecho de código escrito na linguagem Java.Imagem associada para resolução da questãoEm orientação a objeto, o uso de um método com comportamento diferente, como liga(), é realizado por meio do emprego de:
  1. ALean;
  2. BEventos;
  3. CRecursão;
  4. DPolimorfismo;
  5. EEncapsulamento.
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 Orientação a Objetos

Gabarito: letra D. O uso de um método com o mesmo nome, mas com comportamentos diferentes conforme o objeto que o invoca — exatamente o caso do método liga() — é a definição de polimorfismo, um dos pilares da orientação a objetos. O polimorfismo permite que classes derivadas de uma mesma superclasse tenham métodos de mesma assinatura, mas com implementações distintas, resolvidos em tempo de execução (ligação tardia).

O polimorfismo é um dos quatro pilares da orientação a objetos, ao lado de abstração, encapsulamento e herança. A palavra vem do grego e significa "muitas formas": um mesmo nome de método pode assumir diferentes comportamentos dependendo do objeto que o recebe. No trecho citado, o método liga() provavelmente é sobrescrito (override) em subclasses — por exemplo, uma classe Televisao e uma classe Radio podem ter o mesmo método liga(), mas cada uma executa uma ação específica. Essa é a essência do polimorfismo: o código que chama liga() não precisa saber qual implementação será executada; isso é decidido em tempo de execução, com base no tipo real do objeto.

Para entender bem, é preciso distinguir polimorfismo de outros conceitos próximos:

  • Sobrescrita (override): uma subclasse redefine um método da superclasse, mantendo o mesmo nome e a mesma assinatura. É a forma mais comum de implementar polimorfismo.

  • Sobrecarga (overload): a mesma classe define vários métodos com o mesmo nome, mas com assinaturas diferentes (diferente número ou tipo de parâmetros). A sobrecarga é resolvida em tempo de compilação, não em tempo de execução.

O polimorfismo também se manifesta quando uma subclasse é referenciada como sua superclasse: um objeto de uma classe derivada pode ser tratado como um objeto da classe base, e o método chamado será o da classe real do objeto, não o da referência.

A banca explora a confusão entre polimorfismo e outros pilares, como encapsulamento e herança. O encapsulamento esconde os detalhes de implementação e protege os atributos; a herança estabelece uma relação "é-um" entre classes. Nenhum deles, isoladamente, explica o comportamento diferente de um mesmo método — essa é a marca registrada do polimorfismo.

Guarde a fronteira: polimorfismo = mesmo nome, comportamentos diferentes, decidido em tempo de execução. É exatamente nesse critério que as alternativas se dividem.

Polimorfismo
  • 1Mesmo nome, comportamentos diferentes
  • 2Decidido em tempo de execução (ligação tardia)
  • 3Implementado por sobrescrita (override)
  • 4Conceitos próximos
    • Sobrescrita (override)
      • Subclasse redefine método da superclasse
    • Sobrecarga (overload)
      • Mesma classe, assinaturas diferentes
      • Resolvida em tempo de compilação
  • 5Outros pilares
    • Encapsulamento
      • Esconde atributos e métodos
    • Herança
      • Relação "é-um"
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

Lean é uma filosofia de gestão focada na eliminação de desperdícios e na melhoria contínua, originada no Sistema Toyota de Produção. Não tem relação com o comportamento de métodos em orientação a objetos. A banca incluiu essa opção apenas como distrator, aproveitando que o termo "Lean" pode ser associado a metodologias ágeis, mas não há qualquer vínculo com o conceito de polimorfismo.

Alternativa B — ❌ Incorreta

Eventos são mecanismos de comunicação entre objetos, nos quais um objeto notifica outros sobre uma ocorrência (por exemplo, um clique de botão). Embora eventos possam disparar métodos, eles não são o mecanismo que permite a um método ter comportamentos diferentes. A confusão aqui é entre "disparar uma ação" e "ter múltiplas implementações para a mesma ação". O polimorfismo não depende de eventos; ele é uma característica estrutural das classes.

Alternativa C — ❌ Incorreta

Recursão é uma técnica em que um método chama a si mesmo, direta ou indiretamente, para resolver um problema dividindo-o em subproblemas menores. É um conceito de algoritmos, não de orientação a objetos. A banca pode tentar confundir o candidato que pensa em "repetição" ou "chamada de método", mas recursão não tem relação com o comportamento polimórfico.

Alternativa D — ✅ Correta ⟵ GABARITO

Polimorfismo é exatamente o que o enunciado descreve: um método com o mesmo nome (liga()) que se comporta de maneira diferente conforme a classe do objeto que o invoca. Isso é possível porque as subclasses podem sobrescrever o método da superclasse, e a decisão de qual implementação executar ocorre em tempo de execução (ligação tardia). O polimorfismo é um dos pilares da orientação a objetos e é fundamental para o desacoplamento e a extensibilidade do código.

Alternativa E — ❌ Incorreta

Encapsulamento é o pilar que esconde os atributos e métodos de uma classe, protegendo o estado interno e expondo apenas interfaces controladas (geralmente por meio de modificadores de acesso como private e public). Ele não tem relação com a variação de comportamento de um método. A banca costuma cobrar encapsulamento em questões sobre modificadores de acesso e proteção de dados, mas aqui o foco é o comportamento polimórfico.

NÃO CAIA NESSA!

A banca explora a confusão entre os pilares da POO. O candidato que memoriza apenas os nomes pode marcar "Encapsulamento" por ser um termo mais conhecido, mas o enunciado fala de "comportamento diferente" — isso é a assinatura do polimorfismo. Lembre-se: encapsulamento esconde, polimorfismo varia.

PEGA ESSA DICA!

Para identificar polimorfismo em uma questão, procure por indícios de sobrescrita (override) ou de uma mesma chamada de método produzindo resultados diferentes. Se a questão menciona "mesmo nome, comportamentos diferentes" ou "ligação tardia", a resposta é polimorfismo. Compare com a tabela:

Critério

Polimorfismo

Encapsulamento

Herança

Foco

Comportamento variável

Proteção de dados

Reutilização de código

Mecanismo

Sobrescrita/sobrecarga

Modificadores de acesso

Relação "é-um"

Tempo de decisão

Execução (late binding)

Compilação

Compilação

Gabarito: letra D — polimorfismo.

Link permanente: /questoes/fg065326