Questão nº 52
Questão de Redes de Computadores · 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 onde uma nova classe (chamada subclasse ou classe filha) pode reutilizar e estender as características (métodos e atributos) de uma classe existente (chamada superclasse ou classe pai).
- (A) Incorreta: Abstração é o processo de esconder os detalhes de implementação e mostrar apenas a funcionalidade essencial ao usuário. Não explica como um método da classe pai é acessado pela classe filha.
- (B) Incorreta: Associação descreve um relacionamento "tem um" entre duas classes independentes, onde uma classe usa ou contém uma instância de outra. Não se aplica à relação "é um" entre
FuscaeCarro. - (C) Incorreta: Uma interface define um contrato de métodos que uma classe deve implementar, sem fornecer a implementação. Embora Python não tenha interfaces explícitas como outras linguagens, o conceito não explica a reutilização de código da classe pai.
- (D) Correta: A mensagem produzida pelo comando
y.FaleComigo()deve-se ao mecanismo de herança. A classeFuscaherda da classeCarro, o que significa queFuscaautomaticamente possui todos os métodos e atributos deCarro, incluindoFaleComigo, a menos que os sobrescreva. ComoFuscanão sobrescreveuFaleComigo, ela executa a versão herdada deCarro. - (E) Incorreta: Polimorfismo é a capacidade de objetos de diferentes classes responderem ao mesmo método de maneiras diferentes (geralmente por sobrescrita de método) ou de um objeto assumir várias formas. Embora relacionado à herança, neste caso específico,
Fuscanão sobrescreveuFaleComigo, então não há uma "forma diferente" do método sendo executada; é a versão original herdada que está sendo usada. A armadilha aqui é que polimorfismo ocorre com herança, mas a razão fundamental pela qualypossui o métodoFaleComigoé a herança.
Fonte: FGV DPGE-RJ 2014 Técnico Superior Especializado em Rede de Computadores (Caderno Tipo 1). Reproduzida para fins de estudo.