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

Slides:



Advertisements
Apresentações semelhantes
Lógica de Predicados e Representação de Conhecimento
Advertisements

Transformação ODMG  Relacional
Modelo de Objetos ODMG.
Desenvolvimento de Sistemas Baseado na Transformação de Modelos
Projeto 1.
Diagrama de Classes continuação.
Modelagem Orientada a Objetos
1 Orientação a Objetos: Herança Alcides Calsavara.
Introdução à Programação Lógica
De 17 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes Aula.
Mapeamento Objeto Relacional
Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones.
Uma aproximação no meio dos nossos dois extremos Motivação: – Se nós não sabemos o valor do vem-1, o que podemos fazer? – Quando nós podemos sempre gerar.
1 Introdução aos padrões de projeto (GoF) Conceitos preliminares –Mecanismos de herança –Princípio de Substituição de Liskov –Acoplamento concreto x Acoplamento.
Sobrecarga de Operadores
Template Method Intenção: definir o esqueleto de um algoritmo em uma operação, postergando (delegando) a definição de alguns passos desse algoritmo para.
Introdução ao paradigma de programação: Orientado a Objetos
Alexandre Parra Site: Os Pilares da OO em Java Alexandre Parra Site:
Números Complexos 1 Prof. Marlon.
Linguagem de Programação II
8 Sistemas de Tipos Polimorfismo de inclusão.
Métodos Programação II
Métodos Programação II 1 Métodos de Programação II (Mestrado Integrado em Engenharia de Comunicações) 1º Ano, 2º Semestre Classes Abstractas.
Geração de Código.
Herança e Polimorfismo
PROPRIEDADES DE UM GRUPÓIDE
Diagrama de Classes.
Curso de extensão em Desenvolvimento Web
I- Introdução A Evolução dos Modelos de Dados e dos Sistemas de Gerência de Banco de Dados.
Transformação ODMG Relacional. Implementação Relacional de BDs OO Transformação Esquema Objeto Esquema Relacional Transformação Esquema Objeto Esquema.
Funções Declaração function nomedafunção (arg_1, arg_2,..., arg_n) corpoDaFunção end.
Aula Prática If669 – Introdução à Programação
Conformidade de tipo e comportamento fechado
Conceitos básicos de orientação a objetos
Programação Avançada Orientação a objetos
Programação Orientada à Objetos
Paradigmas da Programação – Semestre 1 – Aula 2 Professores: Eduardo Mantovani Fábio de Paula.
Lógica Proposicional Resolução.
DI UFPE Semântica de Java Towards na Operational Semantics and Proof of Type Soundness for Java Sophia Drossopoulou e Susan Eisenbach Imperial College.
Paulo Borba Centro de Informática Universidade Federal de Pernambuco
Programação Orientada à Objetos
Herança em POO Importante:
UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng
© Ricardo Pereira e Silva
Analise Semântica aula-10-analise-semântica.pdf.
Aula prática 14 Orientação a Objetos – C++ Parte 2
Projeto Orientado aos Objetos Prof. Wolley W. Silva
Análise Orientado aos Objetos Prof. Wolley W. Silva
UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng
Classes Abstratas P. O. O. Prof. Ângela e Grace.
1 Marcio de Carvalho Victorino JAVA. 2 Declaração de Atributos [ ] [transient] [volatile] [static] [final] ; controle de acesso –public, package (default),
Projeto de Sistemas de Informação Prof. Schneider Oracle Object-Relational.
Paradigmas da Programação – Semestre 2 – Aula 1 Professores: Fábio de Paula Santos Eduardo Mantovani
Paradigmas de Programação –Aula 7 Lab 2 Professores: Eduardo Mantovani Fábio Paula Santos.
Herança Modelagem e Programação Orientada a Objetos
Bruno Inojosa MCP .NET Framework
Conceitos de Orientação a Objetos zConceito de tipo zTipos Abstratos de Dados zMódulos/Pacotes zEncapsulamento.
OO com Java Luiz Carlos d´Oleron Roteiro de aula.
Herança.
Classes abstratas São classes das quais não se pode instanciar objetos. São classes das quais não se pode instanciar objetos. Seu objetivo é ser herdada.
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Relacionamentos UML e Polimorfismo
Herança. É o compartilhamento de características entre classes com base em um relacionamento hierárquico. – Possibilita a derivação de tipos mais específicos.
Prof.: Bruno Rafael de Oliveira Rodrigues. Herança Possibilita a uma classe usar campos ou métodos definidos em outra classe. Assim a classe pai possui.
MATA56 Tipos, Verificação de Tipos Agenda Objetivo desta aula: Introduzir os principais aspectos semânticos de variáveis Palavras-chave – nomes.
Diagrama de Classes Herança Dependências.
Transformação ODMG  Relacional. Implementação Relacional de BDs OO Transformação Esquema Objeto  Esquema Relacional.
Análise do Sistema Alexandre Mota
Java Como Programar, 8/E Deitel/Deitel, 8e. Java – Como programar Copyright © 2010 Pearson Education Slide 1.
Análise e Projeto de Sistemas Análise & modelagem conceitual Prof. Edjandir Corrêa Costa
Transcrição da apresentação:

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

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

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

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

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

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.

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

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

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

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

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

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

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)

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

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

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

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

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

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

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

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

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

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

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

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