Pular para o conteúdo principal

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 é:
  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
Revelar gabarito e comentário

GabaritoE — 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.

Link permanente: /questoes/fc142288