A Model-Driven Software Reuse Approach (in portuguese)
A Model-Driven Software Reuse Approach (in portuguese)
A Model-Driven Software Reuse Approach (in portuguese)
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
64<br />
caso um deles não seja capaz de atender a uma requisição. A variabilidade pode ser<br />
implementada desta forma, <strong>in</strong>clu<strong>in</strong>do uma funcionalidade padrão ou mandatória em um<br />
objeto, e uma funcionalidade variante em outro objeto, a ser delegado. Esta técnica<br />
funciona com features opcionais, mas apresenta problemas para alternativas, já que é<br />
necessário decidir para quais objetos deve ser feita a delegação;<br />
• Parametrização: consiste na <strong>in</strong>serção de parâmetros em componentes e <strong>in</strong>terfaces, para<br />
seleção das variantes. O componente é então responsável por executar um comportamento<br />
diferente de acordo com o parâmetro especificado;<br />
• Programação orientada a aspectos (AOP - Aspect-Oriented Programm<strong>in</strong>g): com AOP<br />
(KICZALES et al., 1997), funcionalidades mandatórias podem ser implementadas de modo<br />
padrão, enquanto funcionalidades alternativas são implementadas em forma de aspectos,<br />
a serem comb<strong>in</strong>ados posteriormente, num processo conhecido como aspect weav<strong>in</strong>g.<br />
Ou seja, antes da execução, um programa <strong>in</strong>stancia uma configuração do seu código<br />
executável selecionando as alternativas de aspectos que sejam adequadas ao seu estado<br />
atual;<br />
• Arquivos de configuração: consiste na criação de arquivos separados que contêm as<br />
<strong>in</strong>formações variantes, a serem selecionadas e <strong>in</strong>cluídas no produto;<br />
• Carregamento d<strong>in</strong>âmico de classes: permite que um produto solicite uma classe<br />
d<strong>in</strong>amicamente, em tempo de execução. Esta classe é então carregada na memória e<br />
executada. Esta técnica permite a <strong>in</strong>clusão d<strong>in</strong>âmica de alternativas, de acordo, por<br />
exemplo, com parâmetros ou arquivos de configuração.<br />
Outra técnica também bastante utilizada no suporte à variabilidade é o uso de padrões<br />
de projeto (KEEPENCE; MANNION, 1999; ANASTASOPOULOS; GACEK, 2001; LEE; KANG, 2004;<br />
ALMEIDA et al., 2007b). Padrões como o Abstract Factory, S<strong>in</strong>gleton, Factory Method,<br />
Prototype, Strategy, Template Method, Builder, Director, Observer, Decorator, Composite,<br />
Adapter, Bridge, Cha<strong>in</strong> of Responsibility e Command (GAMMA et al., 1995), entre outros, podem<br />
potencializar o uso das técnicas para implementação da variabilidade descritas.<br />
F<strong>in</strong>almente, pode-se implementar variabilidade utilizando técnicas de gerência de<br />
configuração (MUTHIG et al., 2002). Nesta abordagem, variantes alternativas de um<br />
mesmo artefato são <strong>in</strong>cluídas ou excluídas através de mecanismos de controle de versões,<br />
selecionando-se a versão que possui a variante desejada, por exemplo. Esta abordagem é<br />
utilizada por muitos profissionais, mas frequentemente leva a problemas graves quando as<br />
variações são muito complexas (MUTHIG; PATZKE, 2004). Isto porque, em geral, dependem de