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.

136<br />

isto corresponde à criação, no metamodelo de navegação, de um elemento chamado<br />

ReferenciaParaTipoDeDocumento, que pode ser utilizado para estabelecer referências para o<br />

elemento TipoDeDocumento do metamodelo de autoria. Um verificador separado pode então<br />

ajudar a garantir que estas referências sejam válidas (WARMER; KLEPPE, 2006).<br />

Código gerado precisa ser estendido: um exemplo típico é a geração de esqueletos de<br />

classes que precisam ser manualmente implementados após a geração.<br />

Seja qual for a técnica sendo utilizada, uma recomendação importante é a de que a<br />

modificação manual do código gerado não deveria ser necessária (TOLVANEN, 2004; VÖLTER;<br />

BETTIN, 2004). Mesmo com técnicas de “merg<strong>in</strong>g” (mesclagem), como os blocos de usuário do<br />

JET (Java Emitter Templates (POPMA, 2004)), esta não é uma boa prática porque depende da<br />

existência de código que marca os locais onde o código manual começa e onde term<strong>in</strong>a. Se este<br />

código for removido por alguma razão, o código manual pode ser perdido após a regeneração.<br />

Assim, técnicas de “merg<strong>in</strong>g” somente devem ser utilizadas quando estritamente necessárias,<br />

e de preferência com mecanismos que protegem o código manual de modificações acidentais<br />

(WARMER; KLEPPE, 2006).<br />

As melhores táticas para evitar esta situação <strong>in</strong>cluem a geração de classes abstratas ou<br />

<strong>in</strong>terfaces, e a utilização de subclasses para implementar as partes faltantes. Técnicas como<br />

as receitas (recipes) do openArchitectureWare, que consistem na exibição de avisos sobre os<br />

passos a serem seguidos para completar o código, podem ajudar a garantir uma implementação<br />

manual correta.<br />

Um padrão útil nestas situações é chamado “merg<strong>in</strong>g” de geradores. A tática por trás deste<br />

padrão é criar um modelo separado para a especificação das partes faltantes, e então comb<strong>in</strong>ar<br />

estes modelos utilizando um gerador específico. A Figura 23 ilustra a idéia.<br />

Figura 23: “Merg<strong>in</strong>g” de geradores envolvendo modelos estruturais e comportamentais<br />

Neste exemplo, dois tipos de geradores – para modelos estruturais e de comportamento<br />

– são comb<strong>in</strong>ados para produzir código que não precisa ser manualmente completado. O

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

Saved successfully!

Ooh no, something went wrong!