Questão nº 52
Questão de Gestão de TI · 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
A herança é um mecanismo que permite que uma classe (chamada classe filha ou subclasse) herde atributos e métodos de outra classe (chamada classe pai ou superclasse). Isso promove a reutilização de código e a criação de hierarquias de classes.
- (A) Incorreta: Abstração é o processo de focar nos aspectos essenciais de algo, ignorando detalhes irrelevantes. Não explica por que
y.FaleComigo()funciona. - (B) Incorreta: Associação é uma relação entre objetos onde um objeto "usa" outro, mas não implica em compartilhamento de comportamento ou estrutura como na herança.
- (C) Incorreta: Interface, em linguagens que a suportam explicitamente, define um contrato de métodos que uma classe deve implementar. Python não tem interfaces formais como Java ou C#, e o conceito aqui é sobre comportamento herdado.
- (D) Correta: A classe
Fuscaherda da classeCarro. ComoFuscanão define seu próprio métodoFaleComigo, ela herda o métodoFaleComigoda classeCarroe o utiliza. É por isso quey.FaleComigo()executa o método da classe pai. - (E) Incorreta: Polimorfismo significa "muitas formas" e permite que objetos de classes diferentes respondam ao mesmo método de maneiras distintas. Embora o código demonstre um potencial para polimorfismo (se
FuscasobrescrevesseFaleComigo), a saída mostrada é resultado direto da herança do método não sobrescrito. A pegadinha aqui é que, seFuscativesse seu próprioFaleComigocom uma mensagem diferente, aí sim seria polimorfismo. Mas, como está, é a herança que permite queychame o método deCarro.
Fonte: FGV DPGE-RJ 2014 Técnico Superior Especializado em Gestão em Tecnologia da Informação (Caderno Tipo 1). Reproduzida para fins de estudo.