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.

Features opcionais: para features opcionais, o mesmo conjunto de padrões utilizados para<br />

as or features podem ser utilizados, com a diferença de que neste caso não é necessário garantir<br />

que ao menos uma feature esteja presente na aplicação.<br />

Para a implementação de variabilidade baseada em features, podem também ser utilizados<br />

dois padrões baseados em práticas bem conhecidas para a escrita de geradores de código<br />

(CZARNECKI et al., 2002).<br />

O primeiro padrão é conhecido como a abordagem visitante (CZARNECKI; HELSEN, 2006;<br />

JOUAULT; BÉZIVIN; KURTEV, 2006; FEILKAS, 2006). Neste padrão, o modelo de entrada é<br />

percorrido e cada elemento é visitado. Para cada elemento, um template correspondente é<br />

chamado, de acordo com o tipo do elemento. No cenário de engenharia de domínio, este padrão<br />

é particularmente útil para diferentes tipos de features mandatórias e opcionais. A Figura 20<br />

ilustra este padrão.<br />

Figura 20: Padrão visitante sendo aplicado à implementação de variabilidade baseada em<br />

features<br />

Neste exemplo, um visitante percorre o modelo de features e, para cada feature selecionada,<br />

chama o template correspondente, que gera código para ela. Normalmente, cada template<br />

produz uma única classe que implementa a feature, que se encaixa na arquitetura através de<br />

padrões de projeto como os descritos anteriormente nesta seção.<br />

O padrão visitante é uma boa opção quando é possível encapsular a funcionalidade de<br />

uma feature em uma única classe. Caso não seja possível, a abordagem template (CZARNECKI;<br />

HELSEN, 2006) pode ser utilizada. Consiste em um único template que é o ponto de entrada,<br />

responsável por consultar os modelos e chamar outros templates. Esta abordagem difere<br />

da abordagem visitante no sentido em que a ordem e lógica por trás das chamadas dos<br />

templates é explicitamente programada pelo desenvolvedor, não dependendo de alguma política<br />

pré-estabelecida. Além disso, um template não necessariamente produz uma unidade dist<strong>in</strong>ta<br />

como uma classe. Um template pode <strong>in</strong>troduzir apenas um único método, um pedaço de texto,<br />

131

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

Saved successfully!

Ooh no, something went wrong!