A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

DI UFPE Sistema de Tipos de Eiffel A Proposal for Making Eiffel Type-safe W. R. Cook ECOOP’87 Proceedings Cambridge University Press, 1989.

Apresentações semelhantes


Apresentação em tema: "DI UFPE Sistema de Tipos de Eiffel A Proposal for Making Eiffel Type-safe W. R. Cook ECOOP’87 Proceedings Cambridge University Press, 1989."— Transcrição da apresentação:

1 DI UFPE Sistema de Tipos de Eiffel A Proposal for Making Eiffel Type-safe W. R. Cook ECOOP’87 Proceedings Cambridge University Press, 1989

2 DI UFPE Sistema de Tipos de Eiffel n Sistema de tipos fortes n Relação de subtipo ligado a hierarquia de herança n Tipo  Tipo simples: REAL, INTEGER  Tipo classe: P[U 1,..., U n ] u Parâmetro formal dentro de uma classe genérica  Tipo associação: like anchor

3 DI UFPE Sistema de Tipos de Eiffel class Base feature base(n: Integer): Integer is do Result := n * 2 end; end class Extra inherit Base feature extra(n: Integer): Integer is do Result := n * n end; end

4 DI UFPE Sistema de Tipos de Eiffel n Conformidade de tipos: relação de subtipo  Y está em conformidade com X X e Y são idênticos X e Y são classes  X não é genérica, e Y é subclasse direta de X  X é da forma P[U 1,..., U n ] e Y é subclasse de P[V 1,..., V n ], onde V i está em conformidade com U i Y é da forma like anchor, e o tipo de anchor está em conformidade com X Há um tipo Z tal que Y está em conformidade com Z e Z está em conformidade com X

5 DI UFPE Sistema de Tipos de Eiffel Em resumo Y está em conformidade com X se Y herda de X n Logo, o mecanismo de herança Deve garantir que objetos de uma subclasse podem ser usados quando objetos da superclasse forem esperados n Modificações que podem ser feitas em uma subclasse u Adição de atributos u Modificação da implementação dos métodos u Modificação de tipos de atributos e métodos

6 DI UFPE Sistema de Tipos de Eiffel n Regra de redefinição de tipo Um atributo, um resultado de função ou o argumento de um método pode ser redeclarado com um novo tipo em uma subclasse, desde que o novo tipo esteja em conformidade com o tipo original.

7 DI UFPE Redefinição de Tipos de Atributos class P1 feature class C1 inherit P1 a: Base; redefine a feature setup is a: Extra; local problem: Integer is x: Base; do do setup; x.Create; Result := a.extra(2); a := x; end; end; end end n Solução: uso de tipo associação

8 DI UFPE Redefinição de Tipos de Argumentos class P2 feature get(arg: Base): Integer is do Result := arg.base(1) end; end class C2 inherit P2 redefine get feature get(arg: Extra): Integer is do Result := arg.extra(2) end; end

9 DI UFPE Redefinição de Tipos de Argumentos Problema: C2 está em conformidade com P2 local a: Base; v: P2; b: C2 do a.Create; b.Create; v := b; v.get(a); end

10 DI UFPE Redefinição de Tipo de Argumento n Solução O resultado e o argumento de um método pode ser redeclarado, desde que l Resultado: esteja em conformidade com o original Argumento: o original esteja em conformidade com o novo tipo n Problema u Redefinição de tipos se torna praticamente inútil

11 DI UFPE Métodos Declarados por Associação n Outro problema associado a nova regra de redefinição u Impacto no uso de tipos associação na declaração de argumentos  Proibir o uso de tipos associação na definição de argumentos? n Solução u Quando a âncora de um tipo de um argumento é redeclarada, conformidade não é mantida u Mas outros problemas surgem

12 DI UFPE Mais um Problema class P3 feature base... get(arg: like Current): Integer is do Result := arg.base(1) end; not_assoc(arg: P3): Integer is local x: P3; do x.Create; Result := arg.get(x); end; subvert(arg: like Current): Integer is do Result := not_assoc(arg); end; end

13 DI UFPE Mais um Problema class C3 inherit P3 redefine get feature extra... get(arg: like Current): Integer is do Result := arg.extra(2) end; end c: C3 c.subvert(c)

14 DI UFPE Conformidade de Tipos Genéricos n Regras atuais  Não consideram que P[V] está em conformidade com P[U] quando V está em conformidade com U n Novas regras  Y está em conformidade com X X e Y são classes  Y é subclasse direta de X  X é da forma P[U 1,..., U n ] e Y é da forma P[V 1,..., V n ], onde V i está em conformidade com U i

15 DI UFPE Conformidade de Tipos Genéricos class Cell[T] feature info: T; change_info(x : T) is do info := x end; end local x: Base; a: Cell[Base]; b: Cell[Extra]; do x.Create; b.Create; a:= b; a.change_info(x); b.info.extra(4); end

16 DI UFPE Conformidade de Tipos Genéricos n Solução: identificar contextos de usos de parâmetros u Parâmetro covariante Tipos de atributos e saídas de métodos u Parâmetro contravariante Tipos de argumentos de métodos u Parâmetro bivariante Tipos de atributos, saídas e argumentos de métodos

17 DI UFPE Conformidade de Tipos Genéricos n Nova regra X e Y são classes, X é da forma P[U 1,..., U n ] e Y é da forma P[V 1,..., V n ], onde para cada para parâmetro T i  se T i é covariante V i está em conformidade com U i  se T i é contravariante U i está em conformidade com V i  se T i é bivariante V i é igual a U i

18 DI UFPE Tipo Associação n Regra de conformidade forte demais Y é da forma like anchor, e o tipo de anchor está em conformidade com X Se X é da forma like left-anchor, então Y tem que ser igual

19 DI UFPE Tipo Associação n Porque... class C feature left-anchor: U; x: like left-anchor; y: T;... x := y; Se T estiver em conformidade com U? end

20 DI UFPE Tipo Associação class D inherit C left-anchor: U’;... x := y Pode ser inválido se T não estiver em conformidade com U’ end

21 DI UFPE Tipo Associação Mas... class C feature left-anchor: U; x: like left-anchor;... x := left-anchor; Deveria ser válido end

22 DI UFPE Tipo Associação n Além disso... class C feature a: T; m(arg: like a)... end local c: C; b: T; do c.m(b);Inválido Solução: atributos de tipo

23 DI UFPE Mecanismo de Exportação n Independência entre exportação e herança é falsa local e: Extra;Hidden feature base v: Base; do v := e; Result := v.base; end n Solução: desistir

24 DI UFPE Conclusão n Recomendações u Substitua tipo associação com atributos de tipo u Elimine redefinição de tipo de atributo u Inverta regra de redefinição de argumento de método u Desconecte a relação de conformidade da relação de herança u Considere as cláusulas ‘export’ cumulativas n Subclasses não são necessariamente subtipos

25 DI UFPE Resposta de Meyer n “Catcalls” polimórficas são proibidas u “Catcall”: método que tem redefinição que pode causar problemas devido a sua remoção da lista de exportação ou novo tipo de argumento u Chamada polimórfica: o tipo do objeto alvo pode variar l Está a esquerda de atribuições l É um argumento de método


Carregar ppt "DI UFPE Sistema de Tipos de Eiffel A Proposal for Making Eiffel Type-safe W. R. Cook ECOOP’87 Proceedings Cambridge University Press, 1989."

Apresentações semelhantes


Anúncios Google