Questão nº 50
Questão de Tecnologia da Informação · FGV DATAPREV 2024 (nº 50)
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:
```
public void processarPagamento(Pagamento pagamento) {
pagamento.realizarPagamento();
}
```
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. (alternativa correta)
- 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.
Resposta comentada
Gabarito Alternativa B
Polimorfismo é a capacidade de um objeto assumir diferentes formas, ou seja, um mesmo método pode ter comportamentos distintos dependendo do tipo real do objeto que o executa, mesmo que a referência seja de um tipo mais genérico.
(A) Incorreta: Encapsulamento trata de esconder os detalhes internos de uma classe e proteger seus dados, expondo apenas uma interface controlada. O método `realizarPagamento()` não está escondido; ele é parte da interface pública.
(B) Correta: Polimorfismo é exatamente o que ocorre: o método `realizarPagamento()` é chamado em uma referência do tipo `Pagamento`, mas o comportamento executado (seja de `PagamentoCartao` ou `PagamentoBoleto`) é determinado pelo tipo real do objeto em tempo de execução.
(C) Incorreta: Herança é o mecanismo pelo qual `PagamentoCartao` e `PagamentoBoleto` adquirem características de `Pagamento`. Embora a herança seja um pré-requisito para este tipo de polimorfismo, o conceito demonstrado pela chamada do método com comportamento específico da subclasse é o polimorfismo, não a herança em si. A armadilha é que a herança permite a sobrescrita, mas a execução dinâmica do método sobrescrito é polimorfismo.
(D) Incorreta: Sobrecarga de métodos (overloading) ocorre quando há múltiplos métodos com o mesmo nome, mas com assinaturas diferentes (parâmetros diferentes), geralmente dentro da mesma classe. Aqui, o método `realizarPagamento()` tem a mesma assinatura em todas as classes, mas implementações diferentes (sobrescrita).
(E) Incorreta: Abstração foca em representar as características essenciais de um objeto, ocultando os detalhes complexos. Embora o método `realizarPagamento()` possa ser uma abstração de "como pagar", o que está sendo demonstrado na chamada é a capacidade de diferentes implementações serem invocadas através de uma interface comum, que é o polimorfismo.
Fonte: FGV DATAPREV 2024 Analista de Tecnologia da Informação - Arquitetura, Engenharia e Sustentação Tecnológica (Caderno Tipo 1). Reproduzida para fins de estudo.