15.04.2013 Views

A Model-Driven Software Reuse Approach (in portuguese)

A Model-Driven Software Reuse Approach (in portuguese)

A Model-Driven Software Reuse Approach (in portuguese)

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!