Questão de Programação — Programação Orientada a Objetos — Avança SP 2024
- Código
- qg078063
- Banca
- Avança SP
- Órgão
- CISBRA - SP
- Ano
- 2024
- Nível
- Superior
- Cargo
- Analista em T.I
- AI, II e III.
- Bapenas III.
- CI e II.
- DI e III.
- EII e III.
GabaritoC — I e II.
Gabarito: letra C. O polimorfismo, um dos pilares da POO, permite que subclasses definam comportamentos exclusivos (sobrescrita/override) e compartilhem funcionalidades da superclasse (herança), mas não implica que subclasses sejam executadas independentemente de classes maiores — elas dependem da hierarquia de herança. Portanto, apenas as afirmativas I e II são válidas.
O polimorfismo é um conceito fundamental da programação orientada a objetos, que significa literalmente "muitas formas" (do grego poli = muitas, morphos = formas). Na prática, ele permite que objetos de classes diferentes respondam ao mesmo método de maneiras distintas, ou que uma referência de um tipo mais abstrato (superclasse) possa apontar para objetos de tipos mais concretos (subclasses). Isso é possível graças à herança, que estabelece uma relação "é-um" entre classes, e ao mecanismo de ligação tardia (late binding), que decide em tempo de execução qual implementação do método será chamada.
Existem quatro tipos principais de polimorfismo, conforme a literatura clássica:
Tipo | Categoria | Descrição |
|---|---|---|
Inclusão (override) | Universal | Uma referência da superclasse aponta para uma instância da subclasse, que redefine o método (sobrescrita). É o polimorfismo dinâmico. |
Paramétrico | Universal | Uso de generics ou templates para escrever código que funciona com qualquer tipo. |
Sobrecarga (overload) | Ad-Hoc | Métodos com o mesmo nome, mas assinaturas diferentes (parâmetros diferentes). É o polimorfismo estático. |
Coerção (casting) | Ad-Hoc | Conversão implícita ou explícita de um tipo em outro. |
A afirmativa I está correta porque, por meio da sobrescrita (override), uma subclasse pode fornecer uma implementação específica de um método herdado, definindo seu próprio comportamento. A afirmativa II também está correta, pois a herança garante que a subclasse compartilhe os métodos e atributos da superclasse, podendo utilizá-los diretamente ou estendê-los. Já a afirmativa III está incorreta: as subclasses dependem da superclasse na hierarquia de herança — elas não são executadas "independentemente de classes maiores". A independência total contraria o próprio princípio da herança, que estabelece uma relação de dependência estrutural.
A pegadinha desta questão está em confundir o polimorfismo com a independência total entre classes. O polimorfismo promove o desacoplamento entre objetos que usam as classes, mas as subclasses permanecem acopladas à superclasse pela relação de herança. Guarde essa distinção: é exatamente nela que as alternativas se dividem.
As subclasses podem definir seus próprios comportamentos exclusivos. Isso é a essência da sobrescrita (override), um dos mecanismos do polimorfismo por inclusão. A subclasse herda os métodos da superclasse, mas pode redefini-los para atender às suas necessidades específicas. Por exemplo, uma classe Animal pode ter o método emitirSom(), e as subclasses Cachorro e Gato o sobrescrevem para emitir sons diferentes.
As subclasses compartilham funcionalidades da superclasse por meio da herança. Esse compartilhamento é a base do polimorfismo: como a subclasse é um tipo da superclasse (relação "é-um"), ela pode ser tratada como tal, e os métodos herdados podem ser invocados de forma polimórfica. Isso permite reutilização de código e extensibilidade.
As subclasses não podem ser executadas independentemente de classes maiores. A herança cria uma dependência estrutural: a subclasse depende da superclasse para herdar seus membros. Sem a superclasse, a subclasse não existe como tal. A afirmativa confunde o desacoplamento promovido pelo polimorfismo (entre quem usa as classes) com a relação de dependência interna da hierarquia de herança.
A banca explora a confusão entre o desacoplamento que o polimorfismo proporciona aos clientes das classes e a dependência interna entre subclasse e superclasse. O polimorfismo permite que o código que usa as classes seja mais flexível e independente, mas as subclasses continuam acopladas à superclasse pela herança. Fique atento: "independência" no contexto de POO quase sempre se refere ao desacoplamento entre objetos que se comunicam, não à relação de herança.
Gabarito: letra C — corretos apenas os itens I e II.
Link permanente: /questoes/qg078063