Questão nº 52
Questão de Segurança da Informação · 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 pilar da Programação Orientada a Objetos (POO) que permite que uma classe (subclasse ou classe filha) adquira características e comportamentos (atributos e métodos) de outra classe (superclasse ou classe pai).
(A) Incorreta: Abstração é o processo de esconder detalhes complexos de implementação e mostrar apenas a funcionalidade essencial, o que não é o foco principal da saída deste código.
(B) Incorreta: Associação descreve um relacionamento onde objetos de uma classe estão conectados a objetos de outra classe, mas não é o mecanismo que explica a chamada do método `FaleComigo` em `y`.
(C) Incorreta: Interface define um contrato de métodos que uma classe deve implementar. Embora relacionada à POO, a execução do método `FaleComigo` em `y` não é uma demonstração direta de uma interface.
(D) Correta: A classe `Fusca` herda da classe `Carro`. Como `Fusca` não sobrescreve o método `FaleComigo`, quando `y.FaleComigo()` é chamado, o interpretador Python procura o método na classe `Fusca` e, não o encontrando, sobe na hierarquia de herança para a classe `Carro`, onde o método é definido, e o executa. Isso é um comportamento direto da herança.
(E) Incorreta: Polimorfismo (especificamente por sobrescrita de método) ocorreria se a classe `Fusca` tivesse sua própria implementação do método `FaleComigo`. Como `Fusca` não define `FaleComigo`, ela simplesmente utiliza a versão herdada de `Carro`. A armadilha aqui é confundir a capacidade de um objeto de subclasse chamar um método herdado com a sobrescrita desse método, que é o que caracteriza o polimorfismo neste contexto.
Fonte: FGV DPGE-RJ 2014 Técnico Superior Especializado em Segurança da Informação (Caderno Tipo 1). Reproduzida para fins de estudo.