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
Download

Larva/Virtuosí