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.

padrão, cria-se uma classe abstrata para o ponto de variação, com um método pr<strong>in</strong>cipal e um<br />

método para adicionar comportamentos adicionais. Dentro do método pr<strong>in</strong>cipal, adiciona-se<br />

uma chamada para um comportamento abstrato, a ser implementado por cada <strong>in</strong>stância concreta<br />

que corresponde às variantes.<br />

Figura 18: Uso do padrão Cha<strong>in</strong> of Responsibility para or features<br />

A Figura 18 ilustra o uso do padrão Cha<strong>in</strong> of Responsibility na implementação de or<br />

features. Para cada ponto de variação, no caso featureA, cria-se uma classe abstrata, contendo<br />

um método pr<strong>in</strong>cipal (metodo()), a ser chamado no produto. Também é criado um método<br />

(setNext()) que permite “encadear” outras <strong>in</strong>stâncias a esta. Para cada variante (featureA<br />

soz<strong>in</strong>ha e sub-features A1, A2 e A3), cria-se uma subclasse que implementa o comportamento<br />

específico da variante. O gerador, para comb<strong>in</strong>ar as features selecionadas, cria uma <strong>in</strong>stância<br />

da feature pr<strong>in</strong>cipal (l<strong>in</strong>ha 3), cria <strong>in</strong>stâncias das sub-features selecionadas (l<strong>in</strong>has 4 e 5), e faz<br />

o encadeamento (l<strong>in</strong>has 6 e 7). Dessa forma, ao se chamar o método pr<strong>in</strong>cipal (l<strong>in</strong>ha 9), os<br />

comportamentos específicos de cada sub-feature são chamados.<br />

O Cha<strong>in</strong> of Responsibility permite a comb<strong>in</strong>ação de comportamentos sequenciais, ou seja,<br />

um é executado após o outro. Em <strong>in</strong>terações mais complexas, onde a ordem de chamada<br />

dos comportamentos específicos não é sequencial, exig<strong>in</strong>do um código específico para isso,<br />

o padrão Decorator pode ser utilizado. Neste padrão, cria-se um decorator para cada variante.<br />

129

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

Saved successfully!

Ooh no, something went wrong!