Considere um sistema bancário em Java que possui a classe Cl...

Próximas questões
Com base no mesmo assunto
Q3057461 Programação
Considere um sistema bancário em Java que possui a classe Cliente e suas subclasses, ClientePessoaFisica e ClientePessoaJuridica, onde Cliente é uma classe abstrata. Nesse sistema, um método getDesconto(valor) deve fornecer o cálculo do desconto para um tipo de cliente, de forma que os clientes do tipo pessoa física e os clientes do tipo pessoa jurídica tenham descontos diferenciados. Suponha que, utilizando corretamente os mecanismos associados à herança e ao polimorfismo, se deseje implementar essas classes de modo que o método getDesconto possa ser aplicado indistintamente a qualquer instância que tenha sido declarada como da classe Cliente.
Para atender a essa condição, a implementação dessas classes deve possuir o método getDesconto
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

A alternativa correta é a Alternativa C.

Para entender por que a Alternativa C é a correta, precisamos analisar os conceitos de herança e polimorfismo no contexto da programação orientada a objetos, especialmente em Java.

No Java, herança permite que uma classe herde métodos e atributos de outra classe. Uma classe abstrata, como Cliente no enunciado, pode definir métodos abstratos que precisam ser implementados por suas subclasses. Isso força as subclasses a implementar esses métodos, garantindo que comportamentos específicos sejam definidos para cada tipo de cliente.

Polimorfismo permite que uma função se comporte de maneira diferente com base no objeto que a invoca. Quando temos um método como getDesconto, que deve ser aplicado a qualquer instância da classe Cliente (ou suas subclasses), o polimorfismo é fundamental para que cada subclass implemente o método de forma que ele se adeque ao seu tipo específico de cliente.

A Alternativa C sugere que o método getDesconto seja definido como abstrato na classe Cliente, e que suas subclasses, ClientePessoaFisica e ClientePessoaJuridica, implementem esse método. Isso está correto porque, ao ser declarado abstrato, o método getDesconto obriga as subclasses a fornecerem suas próprias implementações, personalizando o cálculo do desconto conforme necessário.

Agora, vejamos por que as outras alternativas estão incorretas:

Alternativa A: Sugere implementar getDesconto na classe Cliente com estruturas condicionais para identificar o tipo de subclasse. Isso vai contra o princípio de polimorfismo, pois não aproveita as vantagens da sobrescrita de métodos, além de tornar o código menos extensível e mais difícil de manter.

Alternativa B: Diz que o método deve ser implementado apenas nas subclasses. Embora correto em parte, omite a necessidade de declarar o método como abstrato na classe Cliente para forçar essa implementação.

Alternativa D: Propõe implementar o método fora das classes, o que não faz sentido em um paradigma orientado a objetos, onde métodos devem estar associados às suas respectivas classes para aproveitar herança e polimorfismo.

Alternativa E: Sugere que o método getDesconto seja totalmente implementado em todas as classes, com a classe Cliente chamando as implementações das subclasses. Isso é um uso ineficiente dos conceitos de herança e polimorfismo, pois a chamada direta contraria o propósito da declaração abstrata.

Concluindo, a chave para resolver esta questão está na correta aplicação dos princípios de herança e polimorfismo, permitindo que cada subclasse cuide de sua própria lógica de desconto.

Gostou do comentário? Deixe sua avaliação aqui embaixo!

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

Qual o erro da alternativa B?

Alex, a alternativa está errada porque ignora que o método deve ser implementado na classe abstrata Cliente

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo