Questão de Programação — Programação Orientada a Objetos — FGV 2024
Programação›Programaçã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:Assinale 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).
AEncapsulamento, pois o método realizarPagamento() está escondido da implementação interna.
BPolimorfismo, pois o método é definido na classe base, mas o comportamento é determinado pelas subclasses.
CHerança, pois as classes filhas estão herdando o método realizarPagamento() da classe Pagamento.
DSobrecarga de métodos, pois o método realizarPagamento() está definido com diferentes assinaturas.
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.
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.