Questão de Engenharia de Software — UML — CESPE / CEBRASPE 2025
- Código
- ce195673
- Banca
- CESPE / CEBRASPE
- Órgão
- BDMG
- Ano
- 2025
- Nível
- Superior
- Cargo
- Analista de Desenvolvimento - Sistemas, Arquitetura e Solução de Dados

- CCerto
- EErrado

GabaritoC — Certo
Gabarito: Certo (C). A afirmação está correta porque, no diagrama de classes, as classes Ave e Mamífero herdam atributos e métodos da classe Animal (relação de generalização), e o método falar() sobrescrito nas classes BemTeVi, Papagaio, Vaca e Cachorro é um exemplo clássico de polimorfismo por sobrescrita (override).
A herança é um dos pilares da orientação a objetos e estabelece uma relação "é-um" entre classes, na qual uma subclasse herda atributos e métodos de uma superclasse. No diagrama de classes UML, essa relação é representada por uma seta com ponta vazada (triângulo) apontando da subclasse para a superclasse. Quando as classes Ave e Mamífero herdam de Animal, elas automaticamente possuem todos os atributos e métodos definidos em Animal, podendo adicionar novos membros ou sobrescrever os existentes.
O polimorfismo, por sua vez, significa "muitas formas" e é a capacidade de um objeto ser referenciado por um tipo mais genérico (superclasse) enquanto executa o comportamento específico da sua classe concreta. No contexto do diagrama, o método falar() é declarado na classe Animal (ou em uma das subclasses) e sobrescrito em cada uma das classes concretas (BemTeVi, Papagaio, Vaca e Cachorro), de modo que cada uma implementa o método de forma diferente. Isso permite que uma referência do tipo Animal, ao receber um objeto de qualquer uma dessas subclasses, invoque a implementação correta de falar() em tempo de execução — é o chamado late binding ou ligação tardia.
A distinção importante aqui é entre sobrescrita (override) e sobrecarga (overload). A sobrescrita ocorre quando uma subclasse redefine um método da superclasse com a mesma assinatura (mesmo nome e parâmetros), e é exatamente o que acontece com o método falar() nas classes do diagrama. A sobrecarga, por outro lado, ocorre quando uma mesma classe define múltiplos métodos com o mesmo nome, mas com assinaturas diferentes (diferentes parâmetros). A banca explora essa confusão: o candidato que não distingue os dois conceitos pode achar que o exemplo não configura polimorfismo, quando na verdade a sobrescrita é uma das formas mais comuns de polimorfismo.
A pegadinha desta questão está em reconhecer que o polimorfismo não exige que o método seja declarado na superclasse — basta que as subclasses tenham métodos com a mesma assinatura e comportamentos diferentes. No diagrama, mesmo que falar() não estivesse declarado em Animal, a existência do mesmo método com implementações distintas nas quatro subclasses já caracterizaria polimorfismo. Além disso, a herança de Ave e Mamífero a partir de Animal é evidente pela notação UML de generalização, o que torna a primeira parte da afirmação correta.
Guarde o critério decisivo: herança é a relação estrutural entre classes (seta com triângulo vazio), e polimorfismo é o comportamento que permite que objetos de subclasses diferentes respondam de formas diferentes à mesma mensagem. É exatamente essa combinação que a questão testa.
A afirmação está correta por dois motivos. Primeiro, a herança: as classes Ave e Mamífero herdam de Animal, o que é representado no diagrama de classes pela seta de generalização (triângulo vazio). Isso significa que todos os atributos e métodos de Animal são compartilhados com as subclasses, conforme o princípio de reuso da orientação a objetos.
Segundo, o polimorfismo: o método falar() presente nas classes BemTeVi, Papagaio, Vaca e Cachorro é um exemplo de polimorfismo por sobrescrita (override). Cada uma dessas classes implementa o método de forma específica, mas todas podem ser tratadas como objetos da superclasse Animal. Em tempo de execução, a JVM (ou o runtime da linguagem) decide qual implementação de falar() deve ser executada com base no tipo real do objeto — é a ligação tardia (late binding), característica central do polimorfismo.
Para identificar polimorfismo em um diagrama de classes, procure por métodos com o mesmo nome em classes diferentes que compartilham uma superclasse comum. Se as implementações são diferentes, é polimorfismo por sobrescrita. Não confunda com sobrecarga, que exige assinaturas diferentes (parâmetros diferentes) e ocorre dentro da mesma classe.
Gabarito: Certo (C).
Link permanente: /questoes/ce195673