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.

160<br />

Por exemplo, pode-se embutir o código referente a uma feature opcional dentro de uma tag<br />

do tipo condicional, que aceita como parâmetro um tipo booleano em uma DSL que <strong>in</strong>dica a<br />

presença ou ausência da feature. Especificando-se este parâmetro com o valor VERDADEIRO<br />

faz com que o gerador <strong>in</strong>clua aquele trecho de código, enquanto o valor FALSO faz com que o<br />

gerador não o <strong>in</strong>clua. Exemplos de tags são aquelas <strong>in</strong>cluídas pelo projeto JET (Java Emitter<br />

Templates), descrito na Seção 2.2.2.<br />

Variabilidades mais complexas podem precisar de mecanismos mais flexíveis do que as tags<br />

para serem implementadas e parametrizadas. Neste caso, pode-se utilizar scriptlets, trechos<br />

de metacódigo que fazem um trabalho mais elaborado de cópia/colagem, produz<strong>in</strong>do uma<br />

saída que une fragmentos de código de forma a implementar a variabilidade exatamente como<br />

orig<strong>in</strong>almente idealizada.<br />

Geradores baseados em templates representam transformações modelo-para-texto, em um<br />

único passo. Porém, transformações modelo-para-modelo devem ser utilizadas para produzir<br />

geradores mais bem organizados. Nestes casos, cuidado especial deve ser tomado para<br />

que não seja necessário modificar os modelos <strong>in</strong>termediários, visando evitar problemas de<br />

<strong>in</strong>consistência. Pode-se evitar este tipo de problema através de alguns padrões e práticas de<br />

sucesso na construção de geradores (VÖLTER, 2008; VÖLTER; BETTIN, 2004).<br />

O processo de migração de código deve sempre manter a implementação de referência<br />

consistente com o código gerado, ou seja, deve ser possível gerar uma nova implementação<br />

de referência sempre que desejado, utilizando os geradores construídos. A pr<strong>in</strong>cípio, não<br />

existe nenhum problema, desde que a migração de código não modifique a implementação<br />

de referência. Mas esta situação pode acontecer, já que durante a migração de código pode-se<br />

identificar oportunidades para melhorar o suporte à variabilidade.<br />

Por exemplo, a implementação de referência pode implementar alternativas diferentes para<br />

um ponto de variação através de trechos de código dist<strong>in</strong>tos. Após a migração de código para<br />

o template, o implementador pode perceber que a criação de funções separadas, uma para<br />

cada alternativa, é uma solução melhor. Assim, ele modifica o template para implementar esta<br />

solução, fazendo com que a implementação de referência se torne <strong>in</strong>consistente.<br />

Mesmo que a migração de código não modifique a implementação de referência, a própria<br />

evolução do domínio normalmente causa este tipo de <strong>in</strong>consistência. Sempre que for necessário<br />

corrigir algum erro, seja no gerador ou em outro lugar, deve-se idealmente realizar a manutenção<br />

primeiro na implementação de referência, testá-la e validá-la, e somente então repetir o processo<br />

de migração, de forma que a <strong>in</strong>consistência não exista. Mas na prática, pr<strong>in</strong>cipalmente correções<br />

menores ou de erros do próprio gerador, modifica-se diretamente os templates, causando

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

Saved successfully!

Ooh no, something went wrong!