Em um jogo de estratégia online, você tem diferentes classes...
Considerando princípios de programação orientada a objetos, assinale a abordagem mais adequada para implementar essa diferenciação.
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
A alternativa correta para esta questão é a C.
Vamos agora explicar por que a alternativa C é a correta e analisar as outras opções.
Programação Orientada a Objetos (POO) é um paradigma de programação que utiliza "objetos" – que podem conter dados, na forma de campos, e código, na forma de procedimentos – para projetar aplicativos e programas de computador. Um dos princípios fundamentais da POO é o polimorfismo, que permite que métodos de classes derivadas tenham implementações diferentes das classes base. Isso é essencial para flexibilizar o comportamento dos objetos em uma hierarquia de classes, como a apresentada na questão.
Alternativa C: Marcar o método "ExecutarHabilidade" como virtual na classe base "Personagem" e fornecer implementações específicas nas classes derivadas. Isso é um exemplo clássico de polimorfismo. Ao tornar o método virtual, permitimos que as classes derivadas, como "Guerreiro" e "Mago", forneçam suas próprias implementações para "ExecutarHabilidade". Essa abordagem respeita o design orientado a objetos, promovendo a reutilização de código e a extensibilidade.
Alternativa A: Utilizar variáveis de controle condicional dentro do método "ExecutarHabilidade" para verificar explicitamente o tipo da instância. Esta abordagem é menos eficiente e vai contra os princípios da POO, pois envolve o uso de verificações de tipo (como no caso de type casting ou instanceof), o que pode tornar o código mais difícil de manter e entender. Ela não aproveita os benefícios do polimorfismo.
Alternativa B: Criar versões específicas do método para cada classe. Embora funcione, não utiliza o mecanismo de polimorfismo de forma adequada, pois requer repetição de código entre as classes, o que não é ideal em POO.
Alternativa D: Permitir que "Guerreiro" e "Mago" herdem métodos específicos de diferentes classes. Esta alternativa pode levar a uma complexidade desnecessária e contraria a simplicidade e clareza do polimorfismo, já que não trata diretamente da questão de "ExecutarHabilidade".
Alternativa E: Ocultar a implementação na classe base e redefini-lo nas derivadas. Isso descreve mais o conceito de sombreamento ou esconder (hiding), que não é a prática ideal quando queremos diferentes implementações de um mesmo método. Novamente, o polimorfismo é a solução mais limpa e eficaz para essa situação.
Em suma, a alternativa C é a que melhor aplica os conceitos de polimorfismo em POO, permitindo que cada classe derivada tenha seu comportamento específico para o método "ExecutarHabilidade".
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
A alternativa mais adequada, considerando os princípios de programação orientada a objetos (POO), é:
C. Marcar o método "ExecutarHabilidade" como virtual na classe base "Personagem" e fornecer implementações específicas nas classes derivadas.
- A abordagem C utiliza polimorfismo, um dos pilares da POO. Ao marcar o método como na classe base, ele permite que as classes derivadas (como "Guerreiro" e "Mago") sobrescrevam o comportamento padrão, fornecendo implementações específicas. Isso resulta em um código mais limpo, extensível e fácil de manter.
- A. Essa abordagem viola o princípio de substituição de Liskov e resulta em código acoplado e difícil de manter. Verificar o tipo explicitamente com condicionais ( ou ) contradiz os benefícios do polimorfismo.
- B. Embora forneça implementações específicas, essa alternativa não utiliza o conceito de sobrescrita do método. Sem o uso do modificador ou , o método na classe base não poderá ser invocado corretamente, e o comportamento esperado pode não ser garantido.
- D. Essa abordagem sugere herança múltipla, o que não é nativamente suportado em muitas linguagens, como Java e C#. Além disso, complexifica a hierarquia desnecessariamente.
- E. "Ocultar" a implementação pode indicar o uso do modificador (em C#), o que é considerado uma má prática em design orientado a objetos, pois dificulta a previsibilidade do comportamento ao usar referências do tipo base.
Assim, a alternativa C é a escolha mais alinhada com boas práticas de design orientado a objetos.
gepeto
Justificativa para (C):
- Marcando o método como virtual na classe base "Personagem", você permite que classes derivadas, como "Guerreiro" e "Mago", substituam (override) o método com suas implementações específicas.
- Isso promove extensibilidade e evita a necessidade de verificações explícitas de tipo (evitando violações do princípio aberto/fechado da POO).
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo