22.11.2013 Views

Dankwoord - martes

Dankwoord - martes

Dankwoord - martes

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

3.2. BESCHRIJVING VAN DE METHODOLOGIE 31<br />

source1->select(source2->forall(body))<br />

In deze OCL expressie hebben we met twee collecties te maken. De ene die over source1<br />

itereert en de andere die over source2 itereert. In OCL is wel mogelijk dat we meerdere<br />

geneste operaties over collecties kunnen hebben alhoewel dat uitzonderlijk is. De vertaalde<br />

JAVA code is als volgt:<br />

Listing 15 Sjabloon voor combinatie van collectieiteratoren<br />

Iterator it1 = source1.iterator();<br />

Set result = new HashSet();<br />

while(it1.hasNext()){<br />

Source1 s1 = (Source1) it.next();<br />

Iterator it2 = s1.source2.iterator();<br />

boolean forAllRes = true;<br />

while(it2.hasNext()){<br />

Source2 s2 = (Source2) it2.next();<br />

forAllRes = forAllRes && (s2.body);<br />

}<br />

if(forAllRes ){<br />

result.add(s1);<br />

}<br />

}<br />

return result;<br />

We kunnen samenvatten dat iedere collectieoperatie over een sjabloon moet beschikken. Deze<br />

sjabloon moet vervolgens ingevuld worden met de elementen van de OCL expressies. Er<br />

mogen nog wat optimalisaties over de sjablonen gemaakt worden. Natuurlijk resulteert dat in<br />

ingewikkelde JAVA code. Bijvoorbeeld, de sjabloon van hierboven kan herschrijven worden.<br />

Met andere woorden moet de iteratie stopen zodra het resultaat fout is.<br />

Een andere oplossing voor geneste collectieiteratoren is om gewoon de voorgestelde sjablonen<br />

voor elke collectieiterator te gebruiken. In ons voorbeeld van daarboven passen we eerst de<br />

sjabloon voor de select operatie toe. Vervolgens roepen we de sjabloon voor de forAll operatie<br />

op in de plaats waarin we de body van de select operatie nagaan. Op deze manier<br />

moeten we geen nieuwe sjablonen voor geneste collectieiteratoren denieren die wat gecompliceerd<br />

kunnen zijn. Als resultaat verkrijgen we in dit voorbeeld twee in plaats van een hulp<br />

methoden. Daarenboven zijn de verkregen hulp methoden overzichtelijk en eenvoudig.<br />

Met deze oplossing reduceren we niet alleen de complexiteit van onze sjablonen maar ook<br />

het aantal sjablonen die in elk geval gedenieerd moeten worden door een hergebruik van al<br />

bestaande sjablonen te maken.<br />

3.2.3.3 Inkapseling van sjablonen voor collectieoperaties in JAVA methoden<br />

De daarnet beschreven sjablonen voor OCL collectieoperaties moeten op een of andere manier<br />

in JAVA methoden ingekapseld worden. Hieronder geven we een aantal mogelijke oplossingen<br />

voor dit probleem.

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

Saved successfully!

Ooh no, something went wrong!