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.

126<br />

Features alternativas: estas são as features onde somente uma alternativa pode estar<br />

presente em uma aplicação.<br />

Quando uma feature pode ser mapeada diretamente em uma única classe, o padrão Abstract<br />

Factory é <strong>in</strong>dicado. Neste padrão, um elemento que realiza o papel de fábrica abstrata e um<br />

elemento que realiza o papel de produto abstrato representam um ponto de variação, uma<br />

feature. Fábricas e produtos concretos representam variantes alternativas. O gerador somente<br />

precisa gerar o código de <strong>in</strong>stanciação da fábrica concreta correspondente, e o restante do código<br />

permanece <strong>in</strong>dependente.<br />

Figura 15: Uso do padrão Abstract Factory para features alternativas<br />

A Figura 15 ilustra o uso deste padrão com um gerador de código para implementar features<br />

alternativas. Para cada ponto de variação, cria-se uma fábrica abstrata e um produto abstrato<br />

(AbstractFactoryFeatureA e FeatureA). Para cada variante alternativa, são criadas as fábricas<br />

e produtos concretos. O gerador, ao criar um produto, só precisa declarar a fábrica abstrata<br />

correspondente ao ponto de variação selecionado, neste caso a featureA, gerando as l<strong>in</strong>has 2 e<br />

6, e <strong>in</strong>stanciar a fábrica correspondente à alternativa selecionada (l<strong>in</strong>ha 3). O resto do código<br />

pode utilizar a feature normalmente.<br />

O padrão Prototype pode ser utilizado com o mesmo propósito, nos casos onde se deseja<br />

evitar a criação de subclasses para os objetos construtores. Neste padrão, cada alternativa é<br />

implementada como uma classe diferente de um protótipo comum. O gerador de código é<br />

responsável por gerar código que <strong>in</strong>stancia somente a alternativa selecionada.

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

Saved successfully!

Ooh no, something went wrong!