Larva/Virtuosí Antonio Kantek Tópicos Avançados de Programação Orientada a Objetos - MAC 413/5715 Segundo Semestre de 2003 Prof. Fabio Kon Agenda Reflexão Computacional Orientação a Aspectos Extensões e ferramentas para Java Árvores de Programas Arquitetura Larva/Virtuosí [1] Reflexão Computacional Reflexão computacional é fortemente recomendada na construção de sistemas de softwares complexos Pode-se implementar reflexão computacional modificando-se uma máquina virtual estendendo assim a linguagem Linguagens híbridas se baseiam em desvios extras no fluxo de execução para executar reflexão computacional Orientação a Aspectos Possibilidade de separar regras de negócio de serviços de infraestrutura Alterações feitas em código fonte ou em código compilado Aspectos e reflexão computacional não são excludentes Árvores de Programas [] Compiladores Just-in-Time não conseguem criar otimizações drásticas Representação intermediária de um programa Reflexão computacional é realizada através da modificação dinâmica de árvores de programa Árvores de Programas [] Árvores de programa possibilitam a edição do comportamento das aplicações antes ou durante a sua execução Árvores de programa relacionam-se entre si de acordo com os relacionamentos das classes Extensões e Ferramentas para Java [7] BCEL JavaAssist Juice Guaraná OpenJava [2] [3] [4] [5] [6] Larva/Virtuosí Linguagem de programação reflexiva orientada a objetos. Todo elemento do programa pode sofrer reflexão computacional. Reflexão computacional é realizada através da modificação dinâmica de árvores de programa. Larva/Virtuosí Combina características encontradas em Java , SmallTalk e Eiffel . Não há comandos nem tipos primitivos. Os únicos símbolos reservados são: [7] [8] [9] := atribuição return retorno em método Larva/Virtuosí oferece facilidades sintáticas para lidar com objetos que dizem respeito ao fluxo de execução (como if ou while) Larva/Virtuosí Tipagem forte X tipagem fraca? Larva/Virtuosí possui tipagem forte. Extensibilidade, Larva/Virtuosí implementa o conceito de herança simples. A classe herdeira possui acesso total e irrestrito aos métodos da superclasse. Qualquer classe pode ser especializada sem restrição. Larva/Virtuosí A implementação de um método é feita por uma composição de Statements (Composite Pattern), onde cada Statement representa um comando. Construtores são um tipo de método especial que possuem como tipo de retorno uma instância da própria classe que define o construtor. Construtores são chamados de forma estática, enquanto que métodos normais precisam ser executados sobre uma instância Larva/Virtuosí Classes podem ser redefinidas em tempo de execução Classe é uma implementação de um tipo abstrato Uma classe pode possuir um bloco de dados (DataBlock), atributos e um conjunto de métodos Método possui nome, tipo de retorno, parâmetro de entrada e uma lista de exportação como em Eiffel. Larva/Virtuosí Em Larva/Virtuosí, todas as classes herdam de Object, mesmo não havendo herança explícita como em Java Não existe modificadores de acesso tais como public, private ou protected. O controle é feito por lista de exportação Um método exportado para a classe Object, significa que ele está disponibilizado para qualquer classe Larva/Virtuosí class Conta { Real saldo := 0; Integer numero; constructor fabrique(Integer n) export Gerente { numero := n; } void depoisite(Real d) export Gerente { saldo.add(d); } } class Gerente { constructor trabalhe() { Conta conta := Conta.fabrique(220); c.deposite(10); } } Meta-Modelo Trabalhos Futuros Definição do mecanismo de coleta de lixo Extensão do Meta-Modelo para incluir eventos e asserções Definição de um código nativo Mecanismo de segurança Definição de uma biblioteca padrão Definição de uma biblioteca de metacomponentes (transação, persistência e segurança) Dúvidas ? [email protected] [email protected] Referências [1] Nunes, Leonardo e Calsavara, Alcides (2000), Estudos sobre a concepção de uma linguagem de programação reflexiva e correspondente ambiente de programação [2] BCEL -The Byte Code Engineering Library http://jakarta.apache.org/bcel/index.html [3] Javassist http://www.csg.is.titech.ac.jp/~chiba/javassist/ [4] Michael Franz and Thomas Kistler. Introducing Juice http://citeseer.nj.nec.com/context/608344/0 [5] Guaraná http://www.dcc.unicamp.br/~oliva/guarana/ [6] OpenJava http://openjava.sourceforge.net/ Referências [7] Sun MicroSystems (2000). Java Language Specification http://java.sun.com/aboutJava/communityproces s/maintenance/JLS/jls2draft.pdf [8] Robson, D and Goldberg, A (1983) SmallTalk: The Language [9] ISE Eiffel (2000). An invitation to Eiffel http://eiffel.com/doc/manuals/language/intro/pa ge.html