A Model-Driven Software Reuse Approach (in portuguese)
A Model-Driven Software Reuse Approach (in portuguese)
A Model-Driven Software Reuse Approach (in portuguese)
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
• Para os casos de DSLs executáveis, a perda potencial de desempenho quando<br />
comparado com código construído à mão.<br />
Alguns dos benefícios das DSLs, como aumento da produtividade, confiabilidade,<br />
manutenibilidade, portabilidade, a reutilização de conhecimento sobre o domínio, entre outros,<br />
podem ser igualmente alcançados por meio da utilização de frameworks, descritos mais adiante<br />
neste apêndice, ou outras técnicas de reutilização. Dessa forma, frente às suas desvantagens,<br />
pode-se argumentar que em alguns casos o uso de DSLs é desnecessário. Já outros benefícios,<br />
como a possibilidade de se trabalhar nos termos e no nível de abstração do domínio do problema,<br />
só podem ser obtidos por meio de DSLs. Neste sentido, a decisão de se utilizar ou não essa<br />
técnica se resume à análise dos benefícios obtidos versus o custo necessário para construir as<br />
ferramentas necessárias para oferecer um suporte eficiente para DSLs (FOWLER, 2005).<br />
Esse custo depende da forma escolhida para se implementar o suporte para a DSL. Após a<br />
análise do domínio e projeto da DSL, existem duas alternativas pr<strong>in</strong>cipais para se implementar<br />
esse suporte:<br />
1. Compilador/<strong>in</strong>terpretador: a forma mais comum de se implementar uma DSL<br />
envolve construir uma biblioteca que implementa as noções semânticas, e projetar e<br />
implementar um compilador que traduza programas na DSL para chamadas a essa<br />
biblioteca (DEURSEN; KLINT; VISSER, 2000). Esse tipo de abordagem é também conhecido<br />
como DSL externa (FOWLER, 2005); e<br />
2. L<strong>in</strong>guagem embutida: nesse tipo de DSL, também conhecida como DSL <strong>in</strong>terna<br />
(FOWLER, 2005), uma l<strong>in</strong>guagem de programação genérica é estendida com conceitos e<br />
operações do domínio. A pr<strong>in</strong>cipal vantagem é que o próprio compilador da l<strong>in</strong>guagem<br />
base pode ser utilizado. Em contrapartida, a expressividade da l<strong>in</strong>guagem estendida é<br />
limitada ao poder expressivo da l<strong>in</strong>guagem base (DEURSEN; KLINT; VISSER, 2000). Por<br />
exemplo, a UML (OMG, 2007), com seu mecanismo de extensão, possibilita a criação<br />
de l<strong>in</strong>guagens de modelagens específicas de forma bastante razoável. Os perfis UML<br />
(OMG, 2006a) são um exemplo desse poder. A l<strong>in</strong>guagem LISP, ou outras l<strong>in</strong>guagens<br />
adaptáveis, também são exemplos dessa possibilidade. Já a l<strong>in</strong>guagem Java não possui<br />
um mecanismo simples de extensão, dificultando o uso de l<strong>in</strong>guagens embutidas.<br />
Enquanto a primeira abordagem resulta em uma DSL mais limpa e fácil de ser utilizada, ela<br />
requer maior trabalho para implementar o compilador. Já a segunda abordagem é mais rápida<br />
e simples de ser implementada, pois não requer a construção de um compilador. Porém, os<br />
resultados não são tão satisfatórios como na primeira abordagem.<br />
261