Questão de TI - Desenvolvimento de Sistemas — Conceitos Básicos de Orientação a Objetos (Classe, Objeto, Encapsulamento, Herança, Polimorfismo) — FCC 2026
TI - Desenvolvimento de SistemasConceitos Básicos de Orientação a Objetos (Classe, Objeto, Encapsulamento, Herança, Polimorfismo)
- Código
- fc142288
- Banca
- FCC
- Órgão
- ARTESP
- Ano
- 2026
- Cargo
- Esp RT ( )
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 possível 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 é:
- AImplementar 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, isIdoso, isIntegracao) e aplica descontos conforme essas flags, sem criar novas classes para os tipos de tarifa.
- BCriar 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.
- CDefinir 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.
- DImplementar 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.
- EDefinir 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.