Introdução


O principal objetivo dessa página é disseminar nosso conhecimento sobre uma forma de produção de software inovadora, mas ainda em fase de pesquisa. A grande meta de nosso projeto é dispor no futuro, não só de uma máquina de pordução automática de sistemas, mas também de muitos domínios que tornarão possível o uso efetivo dessa máquina. No estágio atual temos utilizado a máquina em tarefas de tradução de linguagens como também para a re-engenharia de sistemas (vide as referências).

Comentários e dúvidas sobre o nosso projeto podem ser feitos através do nosso livro de visitas ou por e-mail para draco@inf.puc-rio.br

A máquina Draco-PUC é uma implementação parcial do Paradigma Draco no desenvolvimento de software.O paradigma Draco defende a possibilidade de desenvolver software baseado no reuso de abstrações de alto nível, as quais são escritas em linguagens de proprósitos especiais. Estas linguagens são chamadas linguagens de domínios. O nome Draco reflete o fato de estarmos tratando com uma constelação e portanto com um conjunto de estrelas, que no caso seriam as linguagens. Clique aqui para pesquisar páginas relacionadas a astronomia.

Nosso trabalho na PUC-Rio é fundamentado na re-engenharia do protótipo construído por Neigbohrs e na construção de domínios.

A idéia de domínios e análise de domínios tem sido um importante tema na pesquisa de reuso de software. O ganho na produtividade pelo reuso de abstrações de alto nível compensa o investimento na modelagem, organização e armazenamento das abstrações.

A máquina Draco-PUC reúne tecnologias que permitem a construção e uso de domínios do Draco.Estes domínios podem ser classificados em três grupos :

Domínios de Aplicação
Domínios de Modelagem
Domínios Executáveis

Domínios de Aplicação são domínios que encapsulam conhecimento não relacionado a Ciência da Computação. Domínios de Modelagem são modelos básicos utilizados em aplicações e desenvolvidas por especialistas, assim como base de dados, interfaces e sistemas operacionais. Domínios executáveis são linguagens de programação.

Os Domínios são descritos em linguagens, logo temos linguagens pertencendo a diferentes classes. Por exemplo, um dominiio de aplicação X pode ter sua semântica descrita nas linguagens C,B e D, onde,: C está descrita em Y e Z, B está descrita em Y e W, D está descrita em T, e Y e Z estão descritas em T, de modo que T e W são domínios executáveis.

A rede de domínios é um conjunto de linguagens onde uma linguagem possui sua semântica descrita em linguagens do Draco. A Figura abaixo indica que : a análise de domínios executáveis é responsável pela escolha da linguagem de programação; a análise de domínios de modelagem busca na literatura e define um conjunto de modelagens de domínios; a análise de domínios de aplicação, elicitam com os clientes a definição de um domínio de aplicação, e os projetistas de domínio encapsulam as informações na forma de domínios, com a possibilidade de reutilizar domínios já construídos.




A hipótese por trás de nosso projeto de pesquisa é que o uso do paradigma Draco aumentara a produtividade da produção de software com base na reutilização de domínios.(vide figura abaixo)



Analistas de Sistemas reutilizam as abstrações de alto nível para elicitar e representar as nececidades dos clientes. Os desenhistas do sistema reusam modelos já existentes para a geração automática de código.

Analistas de Sistemas reutilizam as abstrações de alto nível para elicitar e representar as nececidades dos clientes. Os desenhistas do sistema reusam modelos já existentes para a geração automática de código.

O objetivo de nossa pesquisa é investigar a praticidade do paradigma Draco. A estratégia que estamos seguindo é baseada na existência de uma máquina, Draco-PUC, na construção de domínios e na utilização destes domínios no desenvolvimento de software. Atualmente ainda estamos centrando nossa atenção na parte da máquina. Como resultado do processo de re-engenharia, conseguimos hoje uma máquina extremamente versátil sob o ponto de vista de análise sintática e um sistema transformacional bastante poderoso.