Pular para o conteúdo principal

Questão de Programação — Programação Orientada a Objetos — FGV 2024

ProgramaçãoProgramação Orientada a Objetos
Código
fg079644
Banca
FGV
Órgão
DATAPREV
Ano
2024
Nível
Superior
Cargo
ATI - Arquitetura, Engenharia e Sustentação Tecnológica
Em um sistema de gerenciamento de pagamentos, existem as classes Pagamento (classe base), PagamentoCartao e PagamentoBoleto (ambas herdam de Pagamento). A classe Pagamento define o método realizarPagamento(), que é sobrescrito tanto por PagamentoCartao quanto por PagamentoBoleto para implementar comportamentos específicos de cada tipo de pagamento. Considere o seguinte código:Q50.png 363×62Assinale a opção que indica o conceito de orientação a objetos que está sendo aplicado quando o método realizarPagamento() é chamado em um objeto do tipo Pagamento, mas o comportamento específico é definido pelas subclasses (PagamentoCartao ou PagamentoBoleto).
  1. AEncapsulamento, pois o método realizarPagamento() está escondido da implementação interna.
  2. BPolimorfismo, pois o método é definido na classe base, mas o comportamento é determinado pelas subclasses.
  3. CHerança, pois as classes filhas estão herdando o método realizarPagamento() da classe Pagamento.
  4. DSobrecarga de métodos, pois o método realizarPagamento() está definido com diferentes assinaturas.
  5. EAbstração, pois o método realizarPagamento() oculta a complexidade da lógica interna de pagamento.
Revelar gabarito e comentário

GabaritoB — Polimorfismo, pois o método é definido na classe base, mas o comportamento é determinado pelas subclasses.

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 Programação Orientada a Objetos

Gabarito: letra B. O conceito aplicado é o polimorfismo, pois o método realizarPagamento() é declarado na classe base Pagamento e sobrescrito (override) pelas subclasses PagamentoCartao e PagamentoBoleto, de modo que, ao chamar o método em um objeto do tipo Pagamento, o comportamento executado é o da subclasse concreta em tempo de execução. Essa é a essência do polimorfismo dinâmico, também chamado de sobrescrita ou override.

O polimorfismo é um dos quatro pilares da programação orientada a objetos, ao lado de encapsulamento, herança e abstração. Ele permite que um mesmo método, definido em uma classe base, tenha comportamentos diferentes em cada subclasse que o sobrescreve. No exemplo do enunciado, a classe Pagamento define o método realizarPagamento(), e as classes PagamentoCartao e PagamentoBoleto o sobrescrevem para implementar a lógica específica de cada forma de pagamento. Quando o código chama realizarPagamento() em uma referência do tipo Pagamento, o Java (ou outra linguagem com suporte a polimorfismo) decide em tempo de execução qual versão do método executar, com base no tipo real do objeto — é a chamada ligação dinâmica (dynamic binding).

Para entender a diferença entre os conceitos, é importante distinguir:

  • Herança: é o mecanismo pelo qual uma classe filha reutiliza atributos e métodos da classe pai. No exemplo, PagamentoCartao e PagamentoBoleto herdam de Pagamento, mas a herança sozinha não explica o comportamento específico — ela apenas permite que as subclasses tenham acesso ao método.

  • Polimorfismo: é a capacidade de um objeto assumir várias formas. No caso, o objeto do tipo Pagamento pode ser, na prática, um PagamentoCartao ou um PagamentoBoleto, e o método chamado executa a versão da subclasse. É exatamente o que a alternativa B descreve.

  • Encapsulamento: é o mecanismo de restringir o acesso aos atributos e métodos internos de um objeto, geralmente usando modificadores de acesso como private e fornecendo métodos públicos get e set. Não tem relação com a sobrescrita de métodos.

  • Sobrecarga (overload): ocorre quando dois ou mais métodos têm o mesmo nome, mas assinaturas diferentes (parâmetros diferentes), dentro da mesma classe. No enunciado, o método tem a mesma assinatura e é sobrescrito, não sobrecarregado.

  • Abstração: é o processo de ocultar detalhes de implementação e expor apenas a interface essencial. Embora o método realizarPagamento() oculte a lógica interna, o conceito central da questão é o polimorfismo, pois o foco está na capacidade de o comportamento variar conforme a subclasse.

A pegadinha da banca está em confundir polimorfismo com herança e sobrecarga. A herança é o mecanismo que permite a sobrescrita, mas o que a questão descreve — método definido na base e comportamento determinado pelas subclasses — é a definição clássica de polimorfismo. A sobrecarga, por sua vez, envolve métodos com assinaturas diferentes, o que não ocorre aqui.

Na prática, o polimorfismo permite escrever código genérico que funciona com qualquer subtipo. Por exemplo, um método que recebe um Pagamento e chama realizarPagamento() funcionará corretamente tanto para PagamentoCartao quanto para PagamentoBoleto, sem precisar de condicionais. Isso promove a extensibilidade e a manutenibilidade do código.

Guarde a fronteira entre sobrescrita (override) e sobrecarga (overload): a primeira é polimorfismo dinâmico, ocorre entre classes diferentes (herança) e mantém a mesma assinatura; a segunda é polimorfismo estático, ocorre na mesma classe e altera a assinatura. É exatamente nessa distinção que as alternativas se dividem.

1Definição
Método na classe base
Comportamento na subclasse
2Sobrescrita (override)
Mesma assinatura
Entre classes (herança)
Ligação dinâmica
3Sobrecarga (overload)
Mesma classe
Assinaturas diferentes
Polimorfismo
LEVELsoulevel.com.br
Polimorfismo: Definição (Método na classe base, Comportamento na subclasse); Sobrescrita (override) (Mesma assinatura, Entre classes (herança), Ligação dinâmica); Sobrecarga (overload) (Mesma classe, Assinaturas diferentes)

Alternativa A — ❌ Incorreta

O encapsulamento é o mecanismo de restringir o acesso aos atributos e métodos internos de um objeto, geralmente usando modificadores de acesso como private e fornecendo métodos públicos get e set. Não tem relação com a sobrescrita de métodos. A alternativa confunde o conceito de encapsulamento com o de polimorfismo.

Alternativa B — ✅ Correta ⟵ GABARITO

O polimorfismo é exatamente o que a alternativa descreve: o método é definido na classe base, mas o comportamento é determinado pelas subclasses. Isso é o polimorfismo dinâmico, também chamado de sobrescrita (override). A alternativa está correta e é o gabarito.

Alternativa C — ❌ Incorreta

A herança é o mecanismo pelo qual as classes filhas herdam métodos e atributos da classe pai. No exemplo, PagamentoCartao e PagamentoBoleto herdam de Pagamento, mas a herança sozinha não explica o comportamento específico — ela apenas permite que as subclasses tenham acesso ao método. A alternativa descreve a herança, mas o conceito cobrado é o polimorfismo.

Alternativa D — ❌ Incorreta

A sobrecarga de métodos (overload) ocorre quando dois ou mais métodos têm o mesmo nome, mas assinaturas diferentes (parâmetros diferentes), dentro da mesma classe. No enunciado, o método tem a mesma assinatura e é sobrescrito, não sobrecarregado. A alternativa confunde sobrecarga com sobrescrita.

Alternativa E — ❌ Incorreta

A abstração é o processo de ocultar detalhes de implementação e expor apenas a interface essencial. Embora o método realizarPagamento() oculte a lógica interna, o conceito central da questão é o polimorfismo, pois o foco está na capacidade de o comportamento variar conforme a subclasse. A alternativa descreve a abstração, mas não é o conceito aplicado.

Gabarito: letra B

Link permanente: /questoes/fg079644