Questão nº 52
Questão de Suporte · FGV DPGE-RJ 2014 (nº 52)
Considere o seguinte trecho de um programa escrito na linguagem Python.
```
class Carro(object):
def FaleComigo(self):
print "Sou um carro"
class Fusca (Carro):
def FaleComUmFusca(self):
print "Sou um Fusca"
x = Carro()
y = Fusca()
x.FaleComigo()
y.FaleComigo()
```
No primeiro bloco, o método FaleComigo é definido para a classe Carro, que simplesmente produz a mensagem "Sou um carro" ao ser invocado. Para a classe Fusca, definida no segundo bloco, foi definido o método FaleComUmFusca, que apenas produz a mensagem "Sou um Fusca". No terceiro bloco, os objetos x e y tornam-se instâncias das classes Carro e Fusca, respectivamente. No quarto bloco, o método FaleComigo é invocado para cada um dos dois objetos, x e y. Ao ser executado, esse programa produz duas linhas na sua tela de saída:
```
Sou um carro
Sou um carro
```
A mensagem produzida no comando y.FaleComigo deve-se ao mecanismo de
- Aabstração.
- Bassociação.
- Cinterface.
- Dherança. (alternativa correta)
- Epolimorfismo.
Resposta comentada
Gabarito Alternativa D
Herança é um conceito da programação orientada a objetos que permite que uma classe (chamada de subclasse ou classe filha) adquira características (atributos e métodos) de outra classe (chamada de superclasse ou classe pai). Isso promove a reutilização de código e estabelece uma relação "é um tipo de".
- (A) Incorreta: Abstração é o processo de ocultar detalhes complexos de implementação e mostrar apenas as funcionalidades essenciais. Embora seja um princípio fundamental da POO, não é o mecanismo direto que explica por que
Fuscapode chamar o método deCarro. - (B) Incorreta: Associação descreve um relacionamento onde uma classe "tem um" objeto de outra classe (ex: um carro tem um motor). Não é o caso aqui, onde
Fusca"é um"Carro. - (C) Incorreta: Uma interface define um contrato de métodos que uma classe deve implementar. O código não descreve a implementação de um contrato, mas sim a reutilização de um método já existente na classe pai.
- (D) Correta: A classe
Fuscaherda da classeCarro. Isso significa queFuscaautomaticamente "ganha" todos os métodos e atributos públicos deCarro, a menos que os sobrescreva. Quandoy.FaleComigo()é chamado, e o métodoFaleComigonão é encontrado diretamente na classeFusca, o Python o procura na classe pai (Carro) devido à herança, e o executa. - (E) Incorreta: Polimorfismo (muitas formas) permite que objetos de diferentes classes sejam tratados como objetos de um tipo comum, e que um mesmo método possa ter comportamentos diferentes dependendo do objeto que o invoca (geralmente por sobrescrita de método). No exemplo,
Fuscanão sobrescreve o métodoFaleComigo; ele simplesmente usa a implementação herdada deCarro. SeFuscativesse sua própria versão deFaleComigoe a chamasse, aí sim seria polimorfismo. A armadilha é que o polimorfismo frequentemente depende da herança, mas o mecanismo que permite aoFuscaacessarFaleComigoé a herança em si, não a alteração de seu comportamento.
Fonte: FGV DPGE-RJ 2014 Técnico Superior Especializado em Suporte (Caderno Tipo 1). Reproduzida para fins de estudo.