perigos1 perigos da herança e do polimorfismo. perigos2 abusos da herança: uso exagerado da...
TRANSCRIPT
Perigos 1
Perigos da herança e do polimorfismo
Perigos 2
Abusos da herança:
Uso exagerado da herança!
Conjuntos equivocadosHierarquia invertidaConfusão de classe com instânciaUtilização inadequada
Perigos 3
Conjuntos equivocados:
Aeronave
Asa Cauda FuselagemMotor
Perigos 4
Conjuntos equivocados:
Aeronave
Asa Cauda FuselagemMotor
Herança NÃO É Composição
“Asa não é uma espécie de aeronave”!
Perigos 5
…
Aeronave
Asa Cauda FuselagemMotor
“Uma aeronave é umaasa, uma cauda, um motor
e uma fuselagem”
Perigos 6
…
Aeronave
Asa Cauda FuselagemMotor
“Uma aeronave é umaasa, uma cauda, um motor
e uma fuselagem”“Uma aeronave é, simultaneamente,
uma espécie de asa, uma espéciede cauda, …”
Perigos 7
Hierarquia invertida
MembroDeDiretoria
Gerente
Funcionário
Correto ?
Perigos 8
Hierarquia invertida
MembroDeDiretoria
Gerente
Funcionário
“Um membro da Diretoria é uma espécie de Gerente, eum Gerente é uma espécie
de Funcionário.”
Perigos 9
Confundir classe com instância
UrsoEspécieAmeaçada
DeExtinção
Panda
Quais são as instâncias das 3 classes ?
Perigos 10
Utilização inadequada (!)
Cubóide
/volume
volume ampliar (…) rodar (…)
Quarto
As operações deampliar e rodar
são válidas ?
Perigos 11
O perigo do Polimorfismo
Promove concisão!
Polimorfismo de operaçõesPolimorfismo de variáveisPolimorfismo de mensagensPolimorfismo e generalidade
Perigos 12
Polimorfismo de operações
“escopo de polimorfismo de uma operação op é o conjunto de classes sobre as quais é definida op. A classe A junto com todas suas subclasses forma um cone de polimorfismo, tendo A como vértice de polimorfismo”
Perigos 13
Exemplo válido:
Polígono
RetânguloTriângulo Hexágono
Perigos 14
Exemplo inválido:
“Imprimir”
Perigos 15
Polimorfismo de variáveis
“O escopo de polimorfismo de uma variável v é o conjuto das classes às quais os objetos referidos por v (durante a existência inteira de v) podem pertencer.”
Perigos 16
Exemplos:
var t: Triângulo permite que T aponte para qq Triângulo ou seus descendentes OK
Variável v aponte para Cavalo, Círculo ou Cliente Não OK
Aponte para Objeto, que está no topo de uma hierarquia de classes OK
Perigos 17
Polimorfismo em mensagens:
Na passagem de uma mensagem temos:
objetoDestinatário.operaçãoDestinatária
COP: Cone de Polimorfismo do Objeto e Cone de Polimorfismo da Operação
Perigos 18
Caso 1:
COP de operaçãodestinatária
COP de objetodestinatário
Perigos 19
Caso 2:
COP de operaçãodestinatária
COP de objetodestinatário
Perigos 20
Exemplos:
dispositivoDeFábrica.ligar
CASO 1: a msg aponta para Torneira, Motor ou Luz
CASO 2: aponta para qq hardware: Torneira, Motor, Luz, Tubo, Tanque, Porta, Alavanca, …
Perigos 21
Polimorfismo e generalidade
A classe parametrizada:ÁrvoreDeClasse
<ClasseDeNó>pode gerar:
árvoreDeNúmeroReal := ÁrvoreDeClasse <NúmeroReal>.Novo;e dentro da ÁrvoreDeClasse:
nó := ClasseDeNó.Novo;
Perigos 22
Problema:
O desenhista não tem idéia da classe efetiva que será passada em run-time: ÁrvoreDeClasse<Fuselagem>.Nova ÁrvoreDeClasse<NoComplexo>.Nova ÁrvoreDeClasse<Animal>.Nova
Pode haver problema se objeto da classe Animal receber comunicação de “imprimir a si próprio”!
Perigos 23
Soluções:
1. O usuário de classe parametrizada ser responsável e só aceitar classes dinâmicas que sejam compativeis (sic!)
2. Definir “Condição de Guarda” (mecanismo da Linguagem Eiffel!)