230 likes | 336 Views
Perigos da herança e do polimorfismo. Abusos da herança:. Uso exagerado da herança! Conjuntos equivocados Hierarquia invertida Confusão de classe com instância Utilização inadequada. Conjuntos equivocados:. Aeronave. Asa. Cauda. Motor. Fuselagem. Conjuntos equivocados:. Aeronave.
E N D
Abusos da herança: Uso exagerado da herança! • Conjuntos equivocados • Hierarquia invertida • Confusão de classe com instância • Utilização inadequada Perigos
Conjuntos equivocados: Aeronave Asa Cauda Motor Fuselagem Perigos
Conjuntos equivocados: Aeronave Asa Cauda Motor Fuselagem Herança NÃO É Composição “Asa não é uma espécie de aeronave”! Perigos
… Asa Cauda Motor Fuselagem “Uma aeronave é uma asa, uma cauda, um motor e uma fuselagem” Aeronave Perigos
… Asa Cauda Motor Fuselagem “Uma aeronave é uma asa, uma cauda, um motor e uma fuselagem” Aeronave “Uma aeronave é, simultaneamente, uma espécie de asa, uma espécie de cauda, …” Perigos
Hierarquia invertida MembroDeDiretoria Gerente Correto ? Funcionário Perigos
Hierarquia invertida Funcionário Gerente “Um membro da Diretoria é uma espécie de Gerente, e um Gerente é uma espécie de Funcionário.” MembroDeDiretoria Perigos
Confundir classe com instância Urso EspécieAmeaçada DeExtinção Panda Quais são as instâncias das 3 classes ? Perigos
Utilização inadequada (!) Cubóide /volume volume ampliar (…) rodar (…) As operações de ampliar e rodar são válidas ? Quarto Perigos
O perigo do Polimorfismo Promove concisão! • Polimorfismo de operações • Polimorfismo de variáveis • Polimorfismo de mensagens • Polimorfismo e generalidade Perigos
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
Exemplo válido: Polígono Triângulo Retângulo Hexágono Perigos
Exemplo inválido: “Imprimir” Perigos
Polimorfismo de variáveis “O escopo de polimorfismo de uma variávelv é o conjuto das classes às quais os objetos referidos por v (durante a existência inteira de v) podem pertencer.” Perigos
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
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
Caso 1: COP de operaçãodestinatária COP de objetodestinatário Perigos
Caso 2: COP de operaçãodestinatária COP de objetodestinatário Perigos
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
Polimorfismo e generalidade • A classe parametrizada:ÁrvoreDeClasse <ClasseDeNó> pode gerar: árvoreDeNúmeroReal := ÁrvoreDeClasse <NúmeroReal>.Novo;e dentro da ÁrvoreDeClasse: nó := ClasseDeNó.Novo; Perigos
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>.NovaPode haver problema se objeto da classe Animal receber comunicação de “imprimir a si próprio”! Perigos
Soluções: • O usuário de classe parametrizada ser responsável e só aceitar classes dinâmicas que sejam compativeis (sic!) • Definir “Condição de Guarda” (mecanismo da Linguagem Eiffel!) Perigos