Uma empresa concessionária de transporte público utiliza um sistema orientado a objetos para calcular as tarifas cobradas em suas viagens de ônibus e metrô. Existem hoje quatro tipos de tarifa: Comum, Estudante, Idoso e Integração (metrô + ônibus). A área de negócios exige que seja possivel acrescentar novos tipos de tarifa sem modificar o código já existente e testado, apenas adicionando novas classes. O cálculo da tarifa deve ser escolhido em tempo de execução de acordo com o tipo de cartão do passageiro. Nesse cenário, a forma mais adequada ao uso de polimorfismo para esse requisito é:
A
Implementar um método decimal calcularTarifa() na classe Viagem , que recebe uma tabela (mapa/dicionário) de descontos configurável em tempo de execução. O método verifica flags booleanas em Passageiro (isEstudante, isldoso, isIntegracao) e aplica descontos conforme essas flags , sem criar novas classes para os tipos de tarifa.
B
Criar um enum TipoTarifa (Comum, Estudante, Idoso, Integracao) e um método decimal calcularTarifa TipoTarifa tipo) na classe Viagem , que usa um grande switch sobre tipo para decidir o valor. E, quando surge um novo tipo de tarifa, é necessário alterar o switch e recompilar o sistema.
C
Definir uma classe abstrata Tarifa com o método virtual decimal calcular (Viagem viagem), que contém toda a lógica de cálculo usando condicionais baseadas em propriedades de Viagem (tipo de cartão, horário de pico etc). As classes TarifaComum, TarifaEstudante e outras herdam de Tarifa , mas não sobrescrevem o método; apenas definem constantes de desconto utilizadas pelas condicionais da classe base. Para criar um tipo de tarifa, basta adicionar uma nova classe que implementa Tarifa .
D
Implementar um método estático decimal CalcularTarifa (Viagem viagem) na classe utilitária TarifaHelper , que recebe uma string representando o tipo de cartão e usa uma cadeia de if/else para decidir o valor. A classe Viagem apenas delega para esse método passando a string .
E
Definir uma interface Tarifa com o método decimal calcular(Viagem viagem). As classes TarifaComum, TarifaEstudante, TarifaIdoso e TarifaIntegracao implementam essa interface, cada uma com sua própria regra de cálculo. A classe Viagem recebe um objeto Tarifa (por injeção de dependência) e chama tarifa. calcular(this) sem conhecer o tipo concreto. Para criar um novo tipo de tarifa, basta adicionar uma nova classe que implementa Tarifa .
Quer responder esta questão e acompanhar seu desempenho?
Entre na QuestLab para responder, acessar a AURA, estatísticas, cadernos, anotações e outros recursos da plataforma.