Dankwoord - martes
Dankwoord - martes
Dankwoord - martes
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.