MVV - Arquitetura da Máquina Virtual Virtuosi Carlos José Johann Kolb Programa de Pós-Graduação em Informática Aplicada Centro de Ciências Exatas e de Tecnologia Pontifícia Universidade Católica do Paraná Outubro de 2004 1 de 26 arquitetura Visão geral metamodelo class Pessoa { composition String nome; association String endereco; constructor make( String pN, ...) exports all { nome = pN; ... class Pessoa { } String nome; method composition void setNome( String n ) exports all { String endereco; nome = association n; constructor make( String }pN, ...) exports all { nome = pN; ... action obeso( ) exports all { if ( sexo}== masculino) { Compilador v = Integer.make(100) method void setNome( String } ... n ) exports all { nome = n; } } } action obeso( ) exports all if ( sexo == masculino) { v = Integer.make(100) Máquina Virtual Virtuosi { } ... } } código fonte das classes de uma aplicação árvores de programa que compõem a aplicação 2 de 26 arquitetura Código fonte escrito em Aram class Pessoa { composition String nome; association String endereco; constructor make( String pN, ...) exports all { nome = pN; ... } method void setNome( Pessoa outraPessoa ) exports all { nome = n; if ( outraPessoa.obeso( ) ){ ... } } action obeso( ) exports all { if ( sexo == masculino) { v = Integer.make(100); return execute } else { return skip; } } } 3 de 26 arquitetura Metamodelo da Virtuosi class Pessoa { composition String nome; association String endereco; ... 4 de 26 arquitetura Bloco de Dados 5 de 26 arquitetura Metamodelo da Virtuosi class Pessoa { constructor make( String pN, ...) ... method void setNome( Pessoa outraPessoa ) ... action obeso( ) ... 6 de 26 arquitetura Comando de Desvio Condicional e uma Ação 7 de 26 arquitetura Metamodelo da Virtuosi ... v = Integer.make(100); objetoTal.metodoTal(); valor = objX.metodoX(); ... 8 de 26 arquitetura Árvore de Programa class Pessoa { composition Integer posicao; method void setPosicao(Integer p) exports all { posicao = p; } } 9 de 26 arquitetura Uma aplicação é composta de muitas árvores de programa 10 de 26 arquitetura Pontos de ligação entre árvores de programa 11 de 26 arquitetura Referências indiretas através de Tabelas de Manipulação 12 de 26 arquitetura Carga das árvores de programa pela MVV pessoa pessoa integer soma 13 de 26 arquitetura Uma instância da Máquina Virtual Virtuosi class A { ... constructor ca( ) exports all { this.ma(); } method metodoA( ) exports all { ... } } 14 de 26 arquitetura Uma atividade navega sobre a árvore de programa 15 de 26 arquitetura Visão Geral da Arquitetura da Virtuosi 16 de 26 implementação Protótipo e Números Java Testes automatizados Testes para criação de árvores Testes para a interpretação das árvores Cento e quarenta e uma (141) classes dividas em dois pacotes: core (47) e meta (94); Trinta e uma classes de teste; 17 de 26 conclusão Contribuição Serve como base para um ambiente distribuído de execução de software orientado a objetos – o ambiente Virtuosi Formaliza o metamodelo da Virtuosi que define e limita os conceitos de orientação a objetos implementados por qualquer linguagem de programação que deseje ser compatível com o ambiente Virtuosi 18 de 26 conclusão Contribuição Científica Valida o uso de árvores de programa como representação intermediária para software orientado a objeto Valida o uso de tabelas de manipulação para manter referências entre árvores de programa carregadas em memória (relacionamentos inter e intra-classes) valida o uso de tabelas de manipulação para manter referências entre objetos instância de classes de aplicação 19 de 26