Perigos1 Perigos da herança e do polimorfismo. Perigos2 Abusos da herança: Uso exagerado da...

23
Perigos 1 Perigos da herança e do polimorfismo

Transcript of Perigos1 Perigos da herança e do polimorfismo. Perigos2 Abusos da herança: Uso exagerado da...

Page 1: Perigos1 Perigos da herança e do polimorfismo. Perigos2 Abusos da herança: Uso exagerado da herança! zConjuntos equivocados zHierarquia invertida zConfusão.

Perigos 1

Perigos da herança e do polimorfismo

Page 2: Perigos1 Perigos da herança e do polimorfismo. Perigos2 Abusos da herança: Uso exagerado da herança! zConjuntos equivocados zHierarquia invertida zConfusão.

Perigos 2

Abusos da herança:

Uso exagerado da herança!

Conjuntos equivocadosHierarquia invertidaConfusão de classe com instânciaUtilização inadequada

Page 3: Perigos1 Perigos da herança e do polimorfismo. Perigos2 Abusos da herança: Uso exagerado da herança! zConjuntos equivocados zHierarquia invertida zConfusão.

Perigos 3

Conjuntos equivocados:

Aeronave

Asa Cauda FuselagemMotor

Page 4: Perigos1 Perigos da herança e do polimorfismo. Perigos2 Abusos da herança: Uso exagerado da herança! zConjuntos equivocados zHierarquia invertida zConfusão.

Perigos 4

Conjuntos equivocados:

Aeronave

Asa Cauda FuselagemMotor

Herança NÃO É Composição

“Asa não é uma espécie de aeronave”!

Page 5: Perigos1 Perigos da herança e do polimorfismo. Perigos2 Abusos da herança: Uso exagerado da herança! zConjuntos equivocados zHierarquia invertida zConfusão.

Perigos 5

Aeronave

Asa Cauda FuselagemMotor

“Uma aeronave é umaasa, uma cauda, um motor

e uma fuselagem”

Page 6: Perigos1 Perigos da herança e do polimorfismo. Perigos2 Abusos da herança: Uso exagerado da herança! zConjuntos equivocados zHierarquia invertida zConfusão.

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, …”

Page 7: Perigos1 Perigos da herança e do polimorfismo. Perigos2 Abusos da herança: Uso exagerado da herança! zConjuntos equivocados zHierarquia invertida zConfusão.

Perigos 7

Hierarquia invertida

MembroDeDiretoria

Gerente

Funcionário

Correto ?

Page 8: Perigos1 Perigos da herança e do polimorfismo. Perigos2 Abusos da herança: Uso exagerado da herança! zConjuntos equivocados zHierarquia invertida zConfusão.

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.”

Page 9: Perigos1 Perigos da herança e do polimorfismo. Perigos2 Abusos da herança: Uso exagerado da herança! zConjuntos equivocados zHierarquia invertida zConfusão.

Perigos 9

Confundir classe com instância

UrsoEspécieAmeaçada

DeExtinção

Panda

Quais são as instâncias das 3 classes ?

Page 10: Perigos1 Perigos da herança e do polimorfismo. Perigos2 Abusos da herança: Uso exagerado da herança! zConjuntos equivocados zHierarquia invertida zConfusão.

Perigos 10

Utilização inadequada (!)

Cubóide

/volume

volume ampliar (…) rodar (…)

Quarto

As operações deampliar e rodar

são válidas ?

Page 11: Perigos1 Perigos da herança e do polimorfismo. Perigos2 Abusos da herança: Uso exagerado da herança! zConjuntos equivocados zHierarquia invertida zConfusão.

Perigos 11

O perigo do Polimorfismo

Promove concisão!

Polimorfismo de operaçõesPolimorfismo de variáveisPolimorfismo de mensagensPolimorfismo e generalidade

Page 12: Perigos1 Perigos da herança e do polimorfismo. Perigos2 Abusos da herança: Uso exagerado da herança! zConjuntos equivocados zHierarquia invertida zConfusão.

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”

Page 13: Perigos1 Perigos da herança e do polimorfismo. Perigos2 Abusos da herança: Uso exagerado da herança! zConjuntos equivocados zHierarquia invertida zConfusão.

Perigos 13

Exemplo válido:

Polígono

RetânguloTriângulo Hexágono

Page 14: Perigos1 Perigos da herança e do polimorfismo. Perigos2 Abusos da herança: Uso exagerado da herança! zConjuntos equivocados zHierarquia invertida zConfusão.

Perigos 14

Exemplo inválido:

“Imprimir”

Page 15: Perigos1 Perigos da herança e do polimorfismo. Perigos2 Abusos da herança: Uso exagerado da herança! zConjuntos equivocados zHierarquia invertida zConfusão.

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.”

Page 16: Perigos1 Perigos da herança e do polimorfismo. Perigos2 Abusos da herança: Uso exagerado da herança! zConjuntos equivocados zHierarquia invertida zConfusão.

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

Page 17: Perigos1 Perigos da herança e do polimorfismo. Perigos2 Abusos da herança: Uso exagerado da herança! zConjuntos equivocados zHierarquia invertida zConfusão.

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

Page 18: Perigos1 Perigos da herança e do polimorfismo. Perigos2 Abusos da herança: Uso exagerado da herança! zConjuntos equivocados zHierarquia invertida zConfusão.

Perigos 18

Caso 1:

COP de operaçãodestinatária

COP de objetodestinatário

Page 19: Perigos1 Perigos da herança e do polimorfismo. Perigos2 Abusos da herança: Uso exagerado da herança! zConjuntos equivocados zHierarquia invertida zConfusão.

Perigos 19

Caso 2:

COP de operaçãodestinatária

COP de objetodestinatário

Page 20: Perigos1 Perigos da herança e do polimorfismo. Perigos2 Abusos da herança: Uso exagerado da herança! zConjuntos equivocados zHierarquia invertida zConfusão.

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, …

Page 21: Perigos1 Perigos da herança e do polimorfismo. Perigos2 Abusos da herança: Uso exagerado da herança! zConjuntos equivocados zHierarquia invertida zConfusão.

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;

Page 22: Perigos1 Perigos da herança e do polimorfismo. Perigos2 Abusos da herança: Uso exagerado da herança! zConjuntos equivocados zHierarquia invertida zConfusão.

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”!

Page 23: Perigos1 Perigos da herança e do polimorfismo. Perigos2 Abusos da herança: Uso exagerado da herança! zConjuntos equivocados zHierarquia invertida zConfusão.

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!)