1<chapter id="uml-basics">
2<title
3>Grondbeginselen van &UML;</title>
4<sect1 id="about-uml">
5<title
6>Over &UML; ...</title>
7<para
8>Dit hoofdstuk geeft u snel een overzicht van de grondbeginselen van &UML;. Houdt u voor ogen dat dit geen allesomvattende studie is over &UML; maar veeleer een korte inleiding in &UML; die men kan lezen als een basiscursus &UML;. Wilt u meer te weten komen over de Unified Modelling Language, of in bredere zin over software-analyse en -ontwerp, raadpleeg dan een van de vele boeken die over dit onderwerp voorhanden zijn. Er zijn ook een groot aantal cursussen op het Internet voorhanden, waarmee u een goede start kunt maken.  </para>
9
10<para
11>De Unified Modelling Language (&UML;) is een taal om diagrammen te maken of een notatiewijze om modellen van objectgeoriënteerde softwaresystemem te specificeren, te visualiseren en te documenteren. &UML; is geen ontwikkelmethode, d.w.z. het vertelt u niet wat u eerst moet doen en wat daarna, of hoe u uw systeem moet ontwerpen, maar het helpt u om uw systeem te visualiseren en te communiceren met anderen. &UML; staat onder toezicht van de Object Management Group (<acronym
12>OMG</acronym
13>) en is de industriestandaard voor het grafisch weergeven van software. </para>
14<para
15>&UML; is gemaakt voor het ontwerpen van objectgeoriënteerde software en heeft beperkt nut voor andere programmeerparadigma's. </para>
16<para
17>&UML; is opgebouwd uit vele modelelementen die de verschillende delen van een softwaresysteem vertegenwoordigen. De &UML;-elementen worden gebruikt om diagrammen te maken, die een bepaald deel of een gezichtspunt van een systeem voorstellen. De volgende soorten diagrammen worden ondersteund door &umbrello;: </para>
18
19<itemizedlist>
20
21<listitem
22><para
23><emphasis
24><link linkend="use-case-diagram"
25>use case diagrammen</link
26></emphasis
27> tonen actoren (mensen of andere gebruikers van het systeem), use cases (de scenario's wanneer zij het systeem gebruiken), en hun relaties</para
28> </listitem>
29
30<listitem
31><para
32><emphasis
33><link linkend="class-diagram"
34>Klassediagrammen</link
35></emphasis
36> tonen klassen en hun onderlinge relaties</para
37> </listitem>
38
39<listitem
40><para
41><emphasis
42><link linkend="sequence-diagram"
43>Volgordediagrammen</link
44></emphasis
45> tonen objecten en een volgorde van methode-aanroepen die zij doen naar andere objecten.</para
46> </listitem>
47
48<listitem
49><para
50><emphasis
51><link linkend="collaboration-diagram"
52>Collaboratiediagrammen</link
53></emphasis
54> tonen objecten en hun relaties, met nadruk op de objecten die deelnemen aan de berichtenuitwisseling</para>
55</listitem>
56
57<listitem
58><para
59><emphasis
60><link linkend="state-diagram"
61>Toestandsdiagrammen</link
62></emphasis
63> tonen toestanden, toestandsveranderingen en gebeurtenissen van een object of een deel van het systeem</para
64> </listitem>
65
66<listitem
67><para
68><emphasis
69><link linkend="activity-diagram"
70>Activiteitsdiagrammen</link
71></emphasis
72> tonen activiteiten en de overgang van de ene activiteit naar de andere samen met de gebeurtenissen die in een bepaald deel van het systeem optreden</para
73></listitem>
74
75<listitem
76><para
77><emphasis
78><link linkend="component-diagram"
79>Componentdiagrammen</link
80></emphasis
81> tonen programmacomponenten op het hoogste niveau (zoals bijv. KParts of Java Beans).</para
82></listitem>
83
84<listitem
85><para
86><emphasis
87><link linkend="deployment-diagram"
88>Deploymentdiagrammen</link
89></emphasis
90> tonen de instanties van de componenten en hun relaties.</para
91></listitem
92>
93
94<listitem
95><para
96><emphasis
97><link linkend="entity-relationship-diagram"
98>Entiteitsrelatie-diagrammen</link
99></emphasis
100> tonen gegevens en de relaties en beperkingen tussen de gegevens.</para
101></listitem
102>
103
104</itemizedlist>
105
106</sect1
107>   <!-- about-uml -->
108
109<sect1 id="uml-elements"
110>
111<title
112>&UML;-elementen</title>
113<sect2 id="use-case-diagram">
114<title
115>Use case diagram</title>
116<para
117>Use case-diagrammen beschrijven de relaties en afhankelijkheden tussen een groep van <emphasis
118>use cases</emphasis
119> en de actoren die deelnemen aan het proces.</para>
120<para
121>Belangrijk om op te merken is dat use case-diagrammen niet geschikt zijn om het ontwerp te representeren, en niet het inwendige van een systeem kunnen beschrijven. Use case-diagrammen zijn bedoeld om de communicatie met de toekomstige gebruikers van een systeem, en met de klant, te vergemakkelijken, en zijn in het bijzonder behulpzaam bij het vaststellen van welke benodigde kenmerken een systeem moet hebben. Use case diagrammen vertellen <emphasis
122>wat</emphasis
123> het systeem moet doen maar specificeren niet &mdash; en kunnen dat ook niet &mdash; <emphasis
124>hoe</emphasis
125> dit gerealiseerd moet worden.</para>
126<para>
127<screenshot>
128<screeninfo
129>Een voorbeeld van een use case-diagram.</screeninfo>
130	<mediaobject>
131	  <imageobject>
132	    <imagedata fileref="use-case-diagram.png" format="PNG"/>
133	  </imageobject>
134	  <textobject>
135	    <phrase
136>&umbrello; toont een use case-diagram</phrase>
137	  </textobject>
138	  <caption>
139	    <para
140>&umbrello; toont een use case-diagram </para>
141	  </caption>
142	</mediaobject>
143</screenshot>
144</para>
145<sect3 id="use-case">
146<title
147>Use case</title>
148<para
149>Een <emphasis
150>use case</emphasis
151> beschrijft &mdash; vanuit het standpunt van de actoren &mdash; a groep activiteiten in een systeem die een concreet, tastbaar resultaat oplevert.</para>
152<para
153>Use cases zijn beschrijvingen van kenmerkende interacties tussen de gebruikers van een systeem en het systeem zelf. Zij representeren de externe interface van het systeem en specificeren een soort pakket van eisen diehet systeem moet uitvoeren (onthoud: alleen wat, niet hoe). </para>
154<para
155>Bij het werken met use cases is het belangrijk om enkele eenvoudige regels in acht te nemen: <itemizedlist>
156 <listitem
157><para
158>Iedere use case is gerelateerd aan tenminste één actor</para
159></listitem>
160 <listitem
161><para
162>Iedere use case heeft een initiator (&ie; een actor)</para
163></listitem>
164 <listitem
165><para
166>Iedere use case leidt tot een relevant resultaat (een resultaat met <quote
167>waarde</quote
168>)</para>
169 </listitem>
170 </itemizedlist>
171</para>
172<para
173>Use cases kunnen ook relaties met andere use cases hebben. De drie meest karakteristieke relaties tussen use cases zijn:</para>
174<itemizedlist>
175<listitem
176><para
177><emphasis
178>&lt;&lt;include&gt;&gt;</emphasis
179> geeft aan dat een use case zich <emphasis
180>binnen</emphasis
181> een andere use case afspeelt</para
182></listitem>
183<listitem
184><para
185><emphasis
186>&lt;&lt;extends&gt;&gt;</emphasis
187> geeft aan dat in bepaalde situaties, of op een zeker moment (ook wel het uitbreidingspunt genoemd) een use case uitgebreid zal worden met een andere.</para
188></listitem>
189<listitem
190><para
191><emphasis
192>Generalisatie</emphasis
193> geeft aan dat een use case de karakteristieken erft van de <quote
194>super</quote
195>-use case, en sommige ervan kan herdefiniëren of nieuwe kan toevoegen, op eenzelfde wijze als bij de overerving bij klassen het geval is. </para>
196</listitem>
197</itemizedlist>
198</sect3>
199<sect3 id="actor">
200<title
201>Acteur</title>
202<para
203>Een actor is een externe entiteit (buiten het systeem) die samenwerkt met het systeem door deelname aan (en veelal door initiëren van) een use case. In de dagelijkse werkelijkheid kunnen actoren mensen zijn (bijvoorbeeld gebruikers van een systeem), andere computersystemen of externe gebeurtenissen. </para>
204<para
205>Actoren representeren niet de <emphasis
206>fysieke</emphasis
207> mensen of systemen, maar hun <emphasis
208>rol</emphasis
209>. Dit impliceert dat als een persoon met het systeem samenwerkt op verschillende manieren (hij meet zich verschillende rollen aan) hij door meerdere actoren voorgesteld zal worden. Bijvoorbeeld een persoon die telefonische klantenondersteuning geeft en orders invoert van de klant in het systeem, voorgesteld wordt door een actor <quote
210>afdeling ondersteuning</quote
211> en een actor <quote
212>afdeling verkoop</quote
213> </para>
214</sect3>
215<sect3 id="use-case-description">
216<title
217>Use case-omschrijving</title>
218<para
219>Use case-omschrijvingen zijn textuele verhandelingen van de use case. Zij nemen gewoonlijk de de vorm van een aantekening of een document aan dat op een bepaalde manier gekoppeld is aan de use case, en de processen of activiteiten die in de use case plaatsvinden, nader toelicht. </para>
220</sect3>
221</sect2
222> <!-- use-case-diagram -->
223
224<sect2 id="class-diagram">
225<title
226>Klassediagram</title>
227<para
228>Klassediagrammen tonen de verschillende klassen waaruit het systeem is gemaakt, en hoe zij aan elkaar gerelateerd zijn. Van klassediagrammen zegt men dat zij <quote
229>statische</quote
230> diagrammen zijn omdat zij weliswaar de klassen weergeven, samen met hun methoden en attributen, alsmede de statische relaties tussen hen (i.e. welke klassen <quote
231>hebben weet</quote
232> van welke klassen of welke klassen <quote
233>maken deel uit</quote
234> van een andere klasse), maar niet de methode-aanroepen tussen hen onderlingweergeven. </para>
235<para>
236<screenshot>
237<screeninfo
238>Een voorbeeld van een klassediagram</screeninfo>
239	<mediaobject>
240	  <imageobject>
241	    <imagedata fileref="class-diagram.png" format="PNG"/>
242	  </imageobject>
243	  <textobject>
244	    <phrase
245>&umbrello; toont een klassediagram</phrase>
246	  </textobject>
247	  <caption>
248	    <para
249>&umbrello; toont een klassediagram </para>
250	  </caption>
251	</mediaobject>
252</screenshot>
253</para>
254<sect3 id="class">
255<title
256>Klasse</title>
257<para
258>Een klasse definieert de attributes en de methoden van een set objecten. Alle objecten die van deze klasse afgeleid zijn (instanties van deze klasse) hebben eenzelfde gedrag, en hebben overeenkomstige verzamelingen met attributen (ieder object heeft zijn eigen set). I.p.v. klasse wordt ook wet de term <quote
259>type</quote
260> gebezigd, maar het moet nadrukkelijk gesteld worden dat deze twee niet identiek zijn, type is een algemenere term. </para>
261<para
262>In &UML;, worden klassen door rechthoeken gerepresenteerd, met de naam van de klasse; hierin kunnen ook de attributen en operaties van de klasse weergegeven worden in twee andere <quote
263>vakken</quote
264> binnen de rechthoek. </para>
265<para>
266<screenshot>
267<screeninfo
268>Een klasse in &UML;</screeninfo>
269	<mediaobject>
270	  <imageobject>
271	    <imagedata fileref="class.png" format="PNG"/>
272	  </imageobject>
273	  <textobject>
274	    <phrase
275>Visuele representatie van een klasse in &UML;</phrase>
276	  </textobject>
277	  <caption>
278	    <para
279>Visuele representatie van een klasse in &UML; </para>
280	  </caption>
281	</mediaobject>
282</screenshot>
283</para>
284<sect4 id="attribute">
285<title
286>Attributen</title>
287<para
288>In &UML;, worden attributen minsten met hun naam weergegeven, maar ook kunnen hun type, beginwaarde en andere eigenschappen weergegeven worden. Attributen kunnen ook worden getoond met hun zichbaarheid: </para>
289<itemizedlist>
290<listitem
291><para
292><literal
293>+</literal
294> staat voor <emphasis
295>public</emphasis
296> attributen</para
297></listitem>
298<listitem
299><para
300><literal
301>#</literal
302> staat voor <emphasis
303>protected</emphasis
304> attributen</para
305></listitem>
306<listitem
307><para
308><literal
309>-</literal
310> staat voor <emphasis
311>private</emphasis
312> attributen</para
313></listitem>
314</itemizedlist>
315</sect4>
316<sect4 id="operation">
317<title
318>Operaties</title>
319<para
320>Operaties (methoden) worden eveneens met minstens hun naam getoond; Ook zij kunnen hun parameters en return typen tonen. Operaties kunnen, net als attributen, hun zichtbaarheid weergeven: <itemizedlist>
321<listitem
322><para
323><literal
324>+</literal
325> staat voor <emphasis
326>public</emphasis
327> operaties</para
328></listitem>
329<listitem
330><para
331><literal
332>#</literal
333> staat voor <emphasis
334>protected</emphasis
335> operaties</para
336></listitem>
337<listitem
338><para
339><literal
340>-</literal
341> staat voor <emphasis
342>private</emphasis
343> operaties</para
344></listitem>
345</itemizedlist>
346</para>
347</sect4>
348
349<sect4 id="templates">
350<title
351>Sjablonen</title>
352<para
353>Klassen kunnen sjablonen hebben, een waarde die gebruikt wordt voor een niet gespecificeerde klasse of type. Het sjabloontype wordt gespecificeerd wanneer de klasse geïnstantieerd wordt (&ie; een object wordt aangemaakt). Sjablonen komen voor in modern C++ en zullen in Java 1.5 geïntroduceerd worden onder de naam generics. </para>
354</sect4>
355</sect3>
356
357<sect3 id="class-associations">
358<title
359>Klassenassociaties</title>
360<para
361>Klassen kunnen op verschillende wijze aan elkaar gerelateerd zijn (met elkaar geassocieerd zijn):</para>
362<sect4 id="generalization">
363<title
364>Generalisatie</title>
365<para
366>Overerving is een van de fundamentele concepten van objectgeoriënteerdprogrammeren, waarbij een klasse <quote
367>toegang krijgt tot</quote
368> (bijna) alle attributen en operaties van de klasse waar het van erft en sommige ervan opnieuw kan implementeren (overriding), alsook meer attributen en operaties van zichzelf kan toevoegen.</para>
369<para
370>In &UML;, plaatst een <emphasis
371>generalisatie</emphasis
372>-associatie tussen twee klassen hen in een hiërarchie die het concept van overerving van een afgeleide klasse van een basisklasse representeert. In &UML;, worden generalizaties weergegeven door een lijn, die de twee klassen met elkaar verbindt, met een pijlpunt aan de kant van de basisklasse. <screenshot>
373<screeninfo
374>Generalisatie</screeninfo>
375	<mediaobject>
376	  <imageobject>
377	    <imagedata fileref="generalization.png" format="PNG"/>
378	  </imageobject>
379	  <textobject>
380	    <phrase
381>Visuele representatie van een generalisatie in &UML;</phrase>
382	  </textobject>
383	  <caption>
384	    <para
385>Visuele representatie van een generalisatie in &UML; </para>
386	  </caption>
387	</mediaobject>
388</screenshot>
389</para>
390</sect4>
391
392<sect4 id="uml-associations">
393<title
394>Associaties</title>
395<para
396>Een associatie vertegenwoordigt een relatie tussen klassen, en voorziet in de gemeenschappelijke semantiek en structuur voor vele soorten<quote
397>connecties</quote
398> tussen objecten.</para>
399<para
400>Associaties zijn het mechanisme dat objecten in staat stelt met elkaar te communiceren. Het beschrijft de connectie tussen verschillende klassen (de connectie tussen de eigenlijke objecten noemt men een objectconnectie, of <emphasis
401>link</emphasis
402>). </para>
403<para
404>Associaties kunnen een rol hebben die het doel van de associatie specificeert en zowel uni- als bi-directioneel zijn (dit geeft aan of de twee objecten die een relatie hebben, berichten naar elkaar kunnen sturen, of dat slechts één van hen weet heeft van de ander). Ieder uiteinde van de associatie heeft ook een multipliciteit, die oplegt hoeveel objecten aan deze kant van de associatie gerelateerd kunen zijn aan telkens een object aan de andere kant. </para>
405<para
406>In &UML;, worden associaties weergegeven als lijnen, die de klassen die aan de relatie deelnemen, met elkaar verbinden. Hierbij kan ook de rol en de multipliciteit van elk van de deelnemers worden getoond. De multipliciteit wordt afgebeeld als een bereik [min..max] van niet-negative waarden. Een asterisk (<literal
407>*</literal
408>) aan de maximumkant geeft oneindig weer. <screenshot>
409<screeninfo
410>&UML;-associatie</screeninfo>
411	<mediaobject>
412	  <imageobject>
413	    <imagedata fileref="association.png" format="PNG"/>
414	  </imageobject>
415	  <textobject>
416	    <phrase
417>Visuele representatie van een associatie in &UML;</phrase>
418	  </textobject>
419	  <caption>
420	    <para
421>Visuele representatie van een associatie in &UML; </para>
422	  </caption>
423	</mediaobject>
424</screenshot>
425</para>
426</sect4>
427
428<sect4 id="aggregation">
429<title
430>Aggregatie</title>
431<para
432>Aggregaties zijn een speciaal type associaties waarin de twee deelnemende klassen geen gelijkwaardige status hebben, maar een <quote
433>geheel-deel</quote
434> relatie vormen. Een aggregatie beschrijft hoe de klasse die de rol van geheel heeft, samengesteld wordt uit de andere klassen, die de rol van deel hebben. Voor aggregaties heeft de klasse die optreedt als geheel, altijd de multipliciteit één. </para>
435<para
436>In &UML;, worden aggregaties gerepresenteerd door een associatie die een ruit heeft aan de kant van het geheel. <screenshot>
437<screeninfo
438>Aggregatie</screeninfo>
439	<mediaobject>
440	  <imageobject>
441	    <imagedata fileref="aggregation.png" format="PNG"/>
442	  </imageobject>
443	  <textobject>
444	    <phrase
445>Visuele representatie van een aggregatie-relatie in &UML;</phrase>
446	  </textobject>
447	  <caption>
448	    <para
449>Visuele representatie van een aggregatie-relatie in &UML; </para>
450	  </caption>
451	</mediaobject>
452</screenshot>
453</para>
454</sect4>
455<sect4 id="composition">
456<title
457>Compositie</title>
458<para
459>Composities zijn associaties die <emphasis
460>zeer sterke</emphasis
461> aggregaties vertegenwoordigen. Dit betekent dat composities evengoed geheel-deel relaties vormen, maar de relatie is zo sterk dat de delen niet op zichzelf kunnen bestaan. Zij bestaan slechts binnen het geheel, en als het geheel vernietigd wordt, gaan de delen er ook aan.</para>
462<para
463>In &UML;, worden composities gerepresenteerd door een gekleurde ruit aan de kant van het geheel. </para>
464<para
465><screenshot>
466<screeninfo
467>Compositie</screeninfo>
468	<mediaobject>
469	  <imageobject>
470	    <imagedata fileref="composition.png" format="PNG"/>
471	  </imageobject>
472	  <textobject>
473	    <phrase
474>Visuele representatie van een compositie-relatie in &UML;</phrase>
475	  </textobject>
476	</mediaobject>
477</screenshot
478></para>
479</sect4>
480</sect3
481> <!--class-associations-->
482
483<sect3 id="other-class-diagram-items">
484<title
485>Andere klassediagram-onderdelen</title>
486<para
487>Klassediagrammen kunnen verscheidene andere onderdelen bevatten naast klassen.</para>
488<sect4 id="interfaces">
489<title
490>Interfaces</title>
491<para
492>Interfaces zijn abstracte klassen, wat wil zeggen dat instanties niet direct uit hen gemaakt kunnen worden. Zij kunnen operaties bevatten maar geen attributen. Klassen kunnen overerven van interfaces (via een realisatie-associatie) en pas dan kunnen instanties van deze diagrammen gemaakt worden.</para>
493<!-- FIXME screenshot -->
494</sect4>
495<sect4 id="datatype">
496<title
497>Gegevenstypen</title>
498<para
499>Gegevenstypen zijn primitieven die normaal gesproken ingebouwd zijn in een programmeertaal. Bekende voorbeelden zijn integers en booleans. Zij kunnen geen relatie met klassen hebben, maar klassen kunnen wel een relatie met hen hebben.</para>
500<!-- FIXME screenshot -->
501</sect4>
502<sect4 id="enum">
503<title
504>Enumeraties</title>
505<para
506>Enumeratie is een eenvoudige lijst met waarden. Een typisch voorbeeld is een enumeratie voor de dagen van de week. De keuzemogelijkheden binnen een enumeratie noemt men enumeratieconstanten. Evenals gegevenstypen kunnen zij geen relatie met klassen hebben, maar klassen kunnen wel een relatie met hen hebben.</para>
507<!-- FIXME screenshot -->
508</sect4>
509<sect4 id="package">
510<title
511>Pakketten</title>
512<para
513>Pakketten vertegenwoordigen een naamruimte in een programmeertaal. In een diagram worden zij gebruikt om delen van een systeem te representeren, die meer dan één klasse, wellicht zelfs honderden klassen, kunnen bevatten.</para>
514<!-- FIXME screenshot -->
515</sect4>
516</sect3>
517
518</sect2
519> <!-- class diagram -->
520
521<sect2 id="sequence-diagram">
522<title
523>Volgordediagrammen</title>
524
525<para
526>Volgordediagrammen geven de berichtenuitwisseling weer (&ie; methode-aanroep) tussen verscheidene objecten in een specifieke tijd-begrensde situatie. Objecten zijn instanties van klasses. Volgordediagrammen leggen speciale nadruk op de volgorde waarin en de tijdstippen waarop de berichten naar de objecten verstuurd worden.</para>
527
528<para
529>In volgordediagrammen worden objecten gerepresenteerd door vertikale onderbroken lijnen, met de naam van het object bovenaan. De tijd-as loopt ook verticaal, en neemt toe naar beneden, zodat berichten verstuurd worden van het ene object naar de nadere in de vorm van pijlen met de namen van de operatie en de parameters erbij. </para>
530
531<!-- FIXME update screenshot to show synchronous messages -->
532<screenshot>
533<screeninfo
534>Volgordediagram</screeninfo>
535	<mediaobject>
536	  <imageobject>
537	    <imagedata fileref="sequence-diagram.png" format="PNG"/>
538	  </imageobject>
539	  <textobject>
540	    <phrase
541>&umbrello; toont een volgordediagram</phrase>
542	  </textobject>
543	  <caption>
544	    <para
545>&umbrello; toont een volgordediagram </para>
546	  </caption>
547	</mediaobject>
548</screenshot>
549
550<para
551>Berichten kunnen ofwel synchroon zijn, het normale type bericht aanroep waarbij de besturing wordt doorgegeven aan het aangeroepen object totdat de betreffende methode voleindigd is, of asynchroon, waarbij de besturing direct weer teruggeven wordt aan het aanroepende object. Synchrone berichten hebben een verticaal kader aan de kant van het aangeroepen object om het verloop van de programmabesturing te laten zien.</para>
552</sect2
553> <!-- sequence diagrams -->
554
555<sect2 id="collaboration-diagram">
556<title
557>Collaboratiediagrammen</title>
558
559<para
560>Collaboratiediagrammen laten de interacties zien die plaatsvinden tussen objects die participeren in een specifieke situatie. Dit is min of meer dezelfde informatie als weergegeven bij volgordediagrammen maar daar valt de nadruk op hoe de interacties plaats vinden in de tijd, terwijl bij Collaboratiediagrammen de relaties tussen de objecten en hun topologie op de voorgrond treden.</para>
561
562<para
563>In collaboratiediagrammen worden berichten die van het ene object naar het andere worden gestuurd, voorgesteld door pijlen, waarbij de naam van het bericht, de parameters, en de bericht-volgorde, weergegeven wordt. Collaboratiediagrammen zijn bij uitstek geschikt om een specifiek programma-verloop of situatie weer te geven, en zijn een van de beste diagramtypen om snel een process in de programmalogica te demonstreren of toe te lichten. </para>
564
565<screenshot>
566<screeninfo
567>Collaboratie</screeninfo>
568	<mediaobject>
569	  <imageobject>
570	    <imagedata fileref="collaboration-diagram.png" format="PNG"/>
571	  </imageobject>
572	  <textobject>
573	    <phrase
574>&umbrello; toont een collaboratiediagram</phrase>
575	  </textobject>
576	  <caption>
577	    <para
578>&umbrello; toont een collaboratiediagram </para>
579	  </caption>
580	</mediaobject>
581</screenshot>
582
583</sect2
584> <!-- collaboration diagrams -->
585
586<sect2 id="state-diagram">
587<title
588>Toestandsdiagram</title>
589<para
590>Toestandsdiagrammen geven de verschillende toestanden van een object weer gedurende zijn bestaan, en de stimuli, die er voor zorgen dat het object zijn toestand wijzigt. </para
591>
592<para
593>Toestandsdiagrammen kijken naar objecten als <emphasis
594>toestandsmachines</emphasis
595> of eindige automaten, die in een van een set eindige toestanden kunnen verkeren en hun toestand kunnen veranderen middels een van een eindige set stimuli. Bijvoorbeeld een object van het type <emphasis
596>NetServer</emphasis
597> kan in een van de volgende toestanden voorkomen tijdens zijn bestaan: </para>
598<itemizedlist>
599<listitem
600><para
601>Klaar</para
602></listitem>
603<listitem
604><para
605>Luisterend</para
606></listitem>
607<listitem
608><para
609>Werkend</para
610></listitem>
611<listitem
612><para
613>Gestopt</para
614></listitem>
615</itemizedlist>
616<para
617>en de gebeurtenissen die ervoor kunnen zorgen dat het object van toestand verandert, zijn</para>
618<itemizedlist>
619<listitem
620><para
621>Object is aangemaakt</para
622></listitem>
623<listitem
624><para
625>Object ontvangt bericht "luisteren"</para
626></listitem>
627<listitem
628><para
629>Een cliënt vraagt een verbinding aan over het netwerk</para
630></listitem>
631<listitem
632><para
633>Een cliënt beëindigt een aanvraag</para
634></listitem>
635<listitem
636><para
637>De aanvraag is uitgevoerd en beëindigd</para
638></listitem>
639<listitem
640><para
641>Object ontvangt bericht "stoppen"</para
642></listitem>
643<listitem
644><para
645>etc</para
646></listitem>
647</itemizedlist>
648<para>
649<screenshot>
650<screeninfo
651>Toestandsdiagram</screeninfo>
652	<mediaobject>
653	  <imageobject>
654	    <imagedata fileref="state-diagram.png" format="PNG"/>
655	  </imageobject>
656	  <textobject>
657	    <phrase
658>&umbrello; toont een toestandsdiagram</phrase>
659	  </textobject>
660	  <caption>
661	    <para
662>&umbrello; toont een toestandsdiagram </para>
663	  </caption>
664	</mediaobject>
665</screenshot>
666</para>
667<sect3 id="state">
668<title
669>Toestand</title>
670<para
671>Toestanden zijn bouwstenen voor toestandsdiagrammen. Een toestand hoort bij exact één klasse en vertegenwoordigt een opsomming van waarden die de  attributen van een klasse kunnen aannemen. Een &UML;-toestand beschrijft de interne toestand van een object van een bepaalde klasse </para
672>
673<para
674>Merk op dat niet iedere verandering in een van de attributen van een object door een toestand gerepresenteerd dient te worden, maar slechts die veranderingen die significant de werking van het object kunnen beïnvloeden</para>
675<para
676>Er zijn twee bijzondere toestandstypen: begin en eind. Zij zijn bijzonder omdat er geen gebeurtenis bestaat die ervoor kan zorgen dat een object terugkeert naar zijn begin-toestand, evenals er geen gebeurtenis bestaat die mogelijkerwijs een object uit zijn eind-toestand kan halen, wanneer het die eenmaal bereikt heeft. </para>
677</sect3>
678
679</sect2
680> <!-- state diagrams -->
681
682<sect2 id="activity-diagram">
683<title
684>Activiteitsdiagram</title>
685<para
686>Activiteitsdiagrammen beschrijven de volgorde van aktiviteiten in een systeem net behulp van activiteiten. Aktiviteitsdiagrammen zijn een bijzondere vorm van toestandsdiagrammen, die alleen (of voornamelijk) aktiviteiten bevatten. </para>
687<para>
688<screenshot>
689<screeninfo
690>Een voorbeeld van een activiteitsdiagram.</screeninfo>
691	<mediaobject>
692	  <imageobject>
693	    <imagedata fileref="activity-diagram.png" format="PNG"/>
694	  </imageobject>
695	  <textobject>
696	    <phrase
697>&umbrello; toont een activiteitsdiagram</phrase>
698	  </textobject>
699	  <caption>
700	    <para
701>&umbrello; toont een activiteitsdiagram </para>
702	  </caption>
703	</mediaobject>
704</screenshot>
705</para>
706<para
707>Activiteitsdiagrammen zijn vergelijkbaar met procedurele fluxdiagrammen, met dit verschil dat alle aktiviteiten duidelijk gekoppeld zijn aan objecten.</para>
708
709<para
710>Activiteitsdiagrammen worden altijd geassocieerd met een <emphasis
711>klasse</emphasis
712>, een <emphasis
713>operatie</emphasis
714> of een <emphasis
715>use case</emphasis
716>.</para>
717
718<para
719>Aktiviteitsdiagrammen ondersteunen zowel sequentiële als parallelle activiteiten. Parallelle uitvoering wordt gerepresenteerd m.b.v. pictogrammen voor afsplitsen/wachten, en voor de parallel verlopende activiteiten, is het niet van belang in welke volgorde zij worden uitgevoerd (zij kunnen tegelijkertijd uitgevoerd worden, of na elkaar)</para>
720<sect3 id="activity">
721<title
722>Activiteit</title>
723<para
724>Een activiteit is een enkele stap in een process. Een activiteit is een toestand in het systeem met interne activiteit en, ten minste, één uitgaande transitie. Activiteiten kunnen ook meer dan een uitgaande transitie bezitten als zij verschillende voorwaarden hebben. </para
725>
726<para
727>Activiteiten kunnen hiërarchieën vormen, dit wil zeggen dat een activiteit samengesteld kan zijn uit meerdere <quote
728>detail</quote
729>-activiteiten, in welk geval de in- en uitgaande transities zouden moeten overeenstemmen met de in- en uitgaande transities van het detaildiagram. </para>
730
731</sect3>
732</sect2
733> <!-- activity diagram -->
734
735<sect2 id="helper-elements">
736<title
737>Hulpelementen</title>
738<para
739>Er zijn een paar elementen in &UML; die geen reële semantische waarde voor het model, maar helpen bij het verhelderen van delen van het diagram. Deze elementen zijn </para>
740<itemizedlist>
741<listitem
742><para
743>Tekstregels</para
744></listitem>
745<listitem
746><para
747>Notities en ankers</para
748></listitem>
749<listitem
750><para
751>Vakken</para
752></listitem>
753</itemizedlist
754>
755<para
756>Tekstregels zijn nuttig om korte tekstuele informatie aan een diagram toe te voegen. Het is vrijstaande tekst en heeft geen betekenis voor het model zelf. </para
757>
758
759<para
760>Notities zijn nuttig om meer gedetailleerde informatie over een object of een specifieke situatie toe te voegen. Zij hebben het grote voordeel dat notities aan &UML;-elementen verankerd kunnen worden om te laten zien dat de notitie tot een specifiek object of situatie <quote
761>behoort</quote
762>. </para>
763
764<para
765>Vakken zijn vrijstaande rechthoeken die gebruikt kunnen worden om groepen onderdelen samen te voegen en zo de diagrammen leesbaarder te maken. Zij hebben geen logische betekenis voor het model.</para>
766
767<!-- FIXME, screenshot -->
768</sect2
769> <!-- helper elements -->
770
771<sect2 id="component-diagram">
772<title
773>Componentdiagrammen</title>
774<para
775>Componentdiagrammen tonen de softwarecomponenten (ofwel component technologieën zoals KParts, CORBA-componenten of Java Beans ofwelsecties uit het systeem die duidelijk te onderscheiden zijn) en de artefacten waaruit zij gemaakt zijn zoals broncodebestanden, programmabibliotheken en relationele databasetabellen.</para>
776
777<para
778>Componenten kunnen interfaces bezitten (&ie; abstracte klassen met operaties) die associaties tussen componenten toelaten.</para>
779</sect2>
780
781<sect2 id="deployment-diagram">
782<title
783>Deploymentdiagrammen</title>
784
785<para
786>Deploymentdiagrammen tonen de "runtime" componentinstanties en hun associaties. Zij omvatten nodes, die fysieke resources zijn, in het typische geval een enkele computer. Zij tonen ook interfaces en objecten (instanties van klassen).</para>
787
788</sect2>
789
790<sect2 id="entity-relationship-diagram">
791<title
792>Entiteitsrelatie-diagrammen</title>
793
794<para
795>Entity Relationship Diagrams (ER Diagrams) tonen het conceptuele ontwerp van database-toepassingen. Zij laten de verschillende entiteiten (concepten) in het informatiesysteem zien en de bestaande relaties en randvoorwaarden ertussen. Een extensie van Entity Relationship Diagrams genaamd 'Extended Entity Relationship Diagrams' of 'Enhanced Entity Relationship Diagrams' (EER), worden gebruikt om object georiënteerde ontwerptechnieken mee te nemen in ER Diagrams. </para
796>
797<para>
798<screenshot>
799<screeninfo
800>Een voorbeeld van een entiteitrelatiediagram.</screeninfo>
801	<mediaobject>
802	  <imageobject>
803	    <imagedata fileref="entity-relationship-diagram.png" format="PNG"/>
804	  </imageobject>
805	  <textobject>
806	    <phrase
807>Umbrello toont een Entiteitrelatiediagram</phrase>
808	  </textobject>
809	  <caption>
810	    <para
811>Umbrello toont een entiteitrelatiediagram </para>
812	  </caption>
813	</mediaobject>
814</screenshot>
815</para>
816<sect3 id="entity">
817<title
818>Entiteit</title>
819<para
820>Een <emphasis
821>Entiteit</emphasis
822> is elk concept in de echte wereld met een onafhankelijk bestaan. Het kan een object zijn dat fysiek bestaat (voorbeeld, computer, robot) of het kan een object zijn met een conceptueel bestaan (bijv.: universitaire cursus). Elke entiteit heeft een set attributen die de eigenschappen van de entiteit beschrijven.</para>
823<para
824><emphasis
825>Opmerking:</emphasis
826> Er bestaat geen standaard notatie voor het weergeven van ER-diagrammen. Verschillende teksten over dit onderwerp gebruiken verschillende notaties. De concepten en notaties voor EER-diagrammen die in Umbrello worden gebruikt komen uit het volgende boek : <emphasis
827>Elmasri R. and Navathe S. (2004). Fundamentals of Database Systems 4th edn. Addison Wesley</emphasis
828> </para>
829<para
830>In een ER-diagram worden entiteiten door rechthoeken gerepresenteerd, met de naam van de entiteit bovenaan. Hierin kunnen ook de attributen van de eintiteit in een andere <quote
831>vak</quote
832> binnen de rechthoek. </para>
833<para>
834<screenshot>
835<screeninfo
836>Een entiteit in een ER-diagram;</screeninfo>
837	<mediaobject>
838	  <imageobject>
839	    <imagedata fileref="entity.png" format="PNG"/>
840	  </imageobject>
841	  <textobject>
842	    <phrase
843>Visuele representatie van een entiteit in een ER-diagram</phrase>
844	  </textobject>
845	  <caption>
846	    <para
847>Visuele representatie van een entiteit in een ER-diagram </para>
848	  </caption>
849	</mediaobject>
850</screenshot>
851</para>
852<sect4 id="entity-attribute">
853<title
854>Entiteitattributen</title>
855<para
856>In ER-diagrammen, worden entiteitattributen getoond met hun naam in een apart vak van de entiteit waarbij hij behoort. </para>
857</sect4>
858<sect4 id="constraint">
859<title
860>Voorwaarden</title>
861<para
862>Voorwaarden in ER-diagramen specificeren de voorwaarden van gegevens in het informatieschema. </para>
863<para
864>Er zijn vier typen ondersteunde voorwaarden in Umbrello : <itemizedlist>
865 <listitem>
866    <para
867><emphasis
868>Primaire sleutel:</emphasis
869> De set attributen gedeclareerd als <emphasis
870>primaire sleutel</emphasis
871> zijn uniek voor de entiteit. Er kan maar één primaire sleutel in een entiteit zitten en geen van attributen die er onderdeel van zijn kan NULL zijn. </para>
872</listitem>
873 <listitem>
874    <para
875><emphasis
876>Unieke sleutel:</emphasis
877> De set attributen gedeclareerd als <emphasis
878>uniek</emphasis
879> zijn uniek voor de entiteit. Er kunnen vele unieke voorwaarden aan een entiteit hangen. Zijn attributen die er onderdeel van zijn kunnen NULL zijn. Unieke sleutels en primaire sleutels identificeren een rij in een tabel ( entiteit )</para>
880 </listitem>
881 <listitem>
882    <para
883><emphasis
884>Vreemde sleutel:</emphasis
885> Een vreemde sleutel is een referentie voorwaarde tussen twee tabellen. De vreemde sleutel identificeert een kolom of een set kolommen in één (verwijzende) tabel die verwijst naar een kolom of set kolommen in een andere (verwijzende) tabel. De kolommen in de verwijzende tabel moeten een primaire sleutel of unieke sleutel vormen. </para>
886 </listitem>
887 <listitem>
888     <para
889><emphasis
890>Controle voorwaarde:</emphasis
891> Een controle voorwaarde (ook bekend als tabel controle voorwaarde) is een voorwaarde die geldige gegevens definieert bij het toevoegen of bijwerken van een item in een tabel van een relationele database. Een controle voorwaarde wordt toegepast op elke rij in de tabel. De voorwaarde moet een voorspellend zijn. Het kan refereren naar een enkele of meerdere kolommen van de tabel. </para>
892     <para
893>Voorbeeld: prijs
894>= 0 </para>
895 </listitem>
896 </itemizedlist>
897</para>
898</sect4>
899</sect3>
900</sect2>
901<sect2 id="extended-entity-relationship-concepts">
902<title
903>Concepten van Extended Entiteitrelatie-(EER)-diagram</title>
904<sect3 id="specialization">
905<title
906>Specialisatie</title>
907<para
908>Specialisatie is een manier om nieuwe entiteiten te vormen met gebruik van entiteiten die al gedefinieerd zijn. De nieuwe entiteiten, bekend als afgeleide entiteiten, nemen over (of erven) attributen van de vooraf-bestaande entiteiten, waarnaar gerefereerd wordt als basis entiteiten . Het is bedoeld om bestaande gegevens met weinig of geen modificatie.</para>
909<para
910>In Umbrello, men kan losse en overlappende specialisatie</para>
911 <sect4 id="disjoint-specialization">
912   <title
913>Losse specialisatie</title>
914   <para
915>Disjoint Specialization (niet verbonden specialisatie) specificeert dat de subclasses van de specialisatie niet verbonden zijn. Dit betekent dat een entiteit een lid kan zijn van ten hoogste één van de afgeleide entiteiten van de specialisatie</para>
916   <para>
917   <screenshot>
918    <screeninfo
919>Entiteiten die deelnemen in losse specialisatie</screeninfo>
920	<mediaobject>
921	  <imageobject>
922	    <imagedata fileref="disjoint-specialization.png" format="PNG"/>
923	  </imageobject>
924	  <textobject>
925	    <phrase
926>Visuele representatie van losse specialisatie in EER-diagram</phrase>
927	  </textobject>
928	  <caption>
929	    <para
930>Visuele representatie van losse specialisatie in EER-diagram </para>
931	  </caption>
932	</mediaobject>
933   </screenshot>
934    </para>
935 </sect4>
936 <sect4 id="overlapping-specialization">
937   <title
938>Overlappende specialisatie</title>
939   <para
940>Wanneer de afgeleide entiteiten niet voorwaarde bezitten om niet verbonden te zijn, dan betekent dat dat hun set entiteiten zich in overlappende specialisatie bevinden. Dit betekent dat dezelfde entiteit in de echte wereld lid kan zijn van meer dan één afgeleide entiteit van de specialisatie</para>
941   <para>
942   <screenshot>
943    <screeninfo
944>Entiteiten die deelnemen in overlappende specialisatie</screeninfo>
945	<mediaobject>
946	  <imageobject>
947	    <imagedata fileref="overlapping-specialization.png" format="PNG"/>
948	  </imageobject>
949	  <textobject>
950	    <phrase
951>Visuele representatie van overlappende specialisatie in EER-diagram</phrase>
952	  </textobject>
953	  <caption>
954	    <para
955>Visuele representatie van overlappende specialisatie in EER-diagram </para>
956	  </caption>
957	</mediaobject>
958   </screenshot>
959  </para>
960 </sect4>
961 <sect4 id="category">
962
963 <title
964>Categorie</title>
965 <para
966>Een afgeleide entiteit behoort tot een <emphasis
967>Categorie</emphasis
968> wanneer het een verzameling objecten representeert die een subset zijn van vereniging van de onderscheidende entiteitstypen. Een categorie wordt gemodelleerd wanneer het nodig is voor een enkele superclass/subclass relatie met meer dan één superclass, waar de superclasses verschillende entiteitstypen vertegenwoordigt. (Lijkt erg op overerving in object georiënteerd programmeren). </para>
969   <para>
970   <screenshot>
971    <screeninfo
972>Entiteiten die deelnemen in categorierelatie</screeninfo>
973	<mediaobject>
974	  <imageobject>
975	    <imagedata fileref="category.png" format="PNG"/>
976	  </imageobject>
977	  <textobject>
978	    <phrase
979>Visuele representatie van een categorie in EER-diagram</phrase>
980	  </textobject>
981	  <caption>
982	    <para
983>Visuele representatie van een categorie in EER-diagram</para>
984	  </caption>
985	</mediaobject>
986   </screenshot>
987  </para>
988 </sect4>
989
990</sect3>
991</sect2>
992
993</sect1
994>
995</chapter>
996