ontwerpen klassendiagrammen. case 1: mario wat zijn de objecten?
TRANSCRIPT
![Page 1: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/1.jpg)
Ontwerpen
Klassendiagrammen
![Page 2: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/2.jpg)
Case 1: Mario
Wat zijn de objecten?
![Page 3: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/3.jpg)
Case 1: Mario
![Page 4: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/4.jpg)
Case 1: Mario• Mario• Luigi• Toad1• Toad2• Yoshi Groen• Yoshi Rood• Hamerman 1• Hamerman 2• Hamer 1• Hamer 2• Hamer 3• Munt 1• Munt 2• Munt 3
• Mushroom• Mysterieblok• Rij blokken 1
– Blok1– Etc.
• Rij blokken 2– Blok1– Etc.
• Vloer• Dakje• Platform 1• Platform 2• Platform 3• Platform 4
Onhandig
![Page 5: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/5.jpg)
Case 1: Mario
• Een lijst maken met objecten maken is onhandig– Stel je voor dat je 200 munten hebt in een level!– Wat nou als we ook nog eigenschappen van
objecten willen beschrijven?• Veel objecten zijn (vrijwel) hetzelfde!– Probeer objecten die erg op elkaar lijken onder 1
‘blauwdruk’ samen te nemen!– Dit is een klasse
![Page 6: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/6.jpg)
Klasse• Een klasse beschrijft een blauwdruk van een collectie individuen
(objecten)• Voorbeeld: De klasse mens beschrijft ons allemaal.
– Wij zijn dan de ‘objecten van klasse mens’• Een klasse beschrijft per klasse:
– Attributen: Eigenschappen– Methoden: vaardigheden
• Methoden mens:– Lopen, praten, zitten– Methoden zijn voor elk object identiek
• Attributen mens:– Haarkleur, lengte, gewicht– Attributen hebben voor elk object een andere waarde
![Page 7: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/7.jpg)
Klasse UML syntax
• Syntax zijn de ‘spellingsregels’ van een computertaal.– UML: Hoe hoor je de plaatjes te tekenen
Mens
- haarkleur- lengte- gewicht
- lopen- praten- zitten
![Page 8: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/8.jpg)
Case 1: MarioMunt
- locatie- waarde
Mysterieblok
- locatie- inhoud
- geefprijs
Blok
- locatie
- kapot
Platform
- locatie- hoogte- breedte
Dak
- locatie- breedte- hoogte- schuinheid
Vloer
- locatie- aantal gaten
Hamer
- locatie- snelheid- richting
- kill
Mushroom
- locatie- richting
- opeten
Hamerman
- locatie- hoogte
- lopen- springen- hamergooien- kill
Yoshi
- locatie- kleur- berijder
- Berijden- Steektonguit- Eetop- raakkwijt
Toad
- locatie- Kleur- status
- springen- yoshipakken- Sterven- Stootblok- pakmunt
Luigi
- locatie- status
- springen- yoshipakken- Sterven- Stootblok- pakmunt
Mario
- locatie- status
- springen- yoshipakken- Sterven- Stootblok- pakmunt
HandigerKan beter
![Page 9: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/9.jpg)
Overerving
• Een kind:– Heeft een lengte, gewicht, haarkleur,
voorkeursspeelgoed– Kan lopen, praten, zitten, spelen, schoolgaan
• Een volwassene:– Heeft een lengte, gewicht, haarkleur, baan– Kan lopen, praten, zitten, stemmen, autorijden
Kind
- haarkleur- Lengte- gewicht- lievelingsspeelgoed
- lopen- praten- zitten- spelen- schoolgaan
Volwassene
- haarkleur- Lengte- gewicht- baan
- lopen- praten- zitten- stemmen- autorijden
Wat valt op (kan handiger)?
![Page 10: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/10.jpg)
Overerving UML syntax
Kind- lievelingsspeelgoed
- schoolgaan- spelen
Volwassene- baan
- stemmen- autorijden
Mens
- haarkleur- lengte- gewicht
- lopen- praten- zitten
• Een mens is óf een kind óf een volwassene
• Een kind is een specifiek soort mens
• Een volwassene is een specifiek soort mens
SuperKlasse ofparent class
Subklasse ofChild class
![Page 11: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/11.jpg)
Overerving theorie
• Overerving: ook wel Generalisatie• Een subklasse heeft alle attributen van zichzelf
en zijn superklasse(n)– Kunnen ook meer zijn (grandfather class)
• Een subklasse heeft alle methoden van zichzelf en zijn superklasse(n)
• Naar ‘beneden’: specificering• Naar ‘boven’: veralgemening
![Page 12: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/12.jpg)
Case 1: MarioSpelelement
Bewegend
Zelfbewegend
VijandSpeler
Mensen Toads
Yoshi
Hamer
Hamerman
Actief
Munt
Platform
Mushroom
Dit is niet af!• Waar moeten de
methoden?• Waar moeten de
attributen?• Er ontbreken klassen• Zie oefenopgave
![Page 13: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/13.jpg)
Klassendiagram: procedure
• Lees de tekst• Zelfstandige Naamwoorden:– Klasse– Attribuut– Niet modelleren
• Werkwoorden– Methoden– Iets anders– Niet modelleren
![Page 14: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/14.jpg)
Case 2: Studeren
Van nieuwe studenten dienen de volgende gegevens ingevoerd te worden: naam, studentcode, geboortedatum en SLB’er.(bij inschrijven krijgt iedere student een docent als SLB’er toegewezen). Studenten hebben een cijferlijst en studeren en maken tentamens.Na iedere periode moeten de cijfers voor de blokken en de toetsdatum ingevoerd worden. Het systeem rekent het gemiddelde van de behaalde cijfers uit.Docenten hebben een naam, geboortedatum en vestiging. Ze berekenen cijfers en beoordelen studenten
![Page 15: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/15.jpg)
Case 2: Studeren
Van nieuwe studenten dienen de volgende gegevens ingevoerd te worden: naam, studentcode, geboortedatum en SLB’er.(bij inschrijven krijgt iedere student een docent als SLB’er toegewezen). Studenten hebben een cijferlijst en studeren en maken tentamens.Na iedere periode moeten de cijfers voor de blokken en de toetsdatum ingevoerd worden. Het systeem rekent het gemiddelde van de behaalde cijfers uit.Docenten hebben een naam, geboortedatum en vestiging. Ze berekenen cijfers en beoordelen studenten
![Page 16: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/16.jpg)
Case 2: StuderenZNW:• studenten• gegevens• Naam• geboortedatum• SLB’er• docent• periode• cijfer• blok• toetsdatum• systeem• Gemiddelde• Vestiging
WW:• Invoeren• Inschrijven• Toewijzen• Tentamen maken• Studeren• Hebben• Uitrekenen• Cijfers berekenen• Studenten beoordelen
Watis
wat?
![Page 17: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/17.jpg)
• Student– naam– Geboortedatum– Studentcode– Slb’er– cijferlijst– Inschrijven– Tentamen maken– studeren
• Docent– SLB-studenten– Naam– Geboortedatum– Vestiging– Student beoordelen– Cijfers berekenen
• Resultaat– Cijfer– Toetsdatum– Blok
Case 2: Studeren
![Page 18: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/18.jpg)
Case 2: StuderenPersoon
- naam- geboortedatum
Student
- code- SLB’er- cijferlijst
- Inschrijven- Studeren- Tentamen maken
Docent
- Vestiging- SLB studenten
- Cijfers berekenen- Studenten
beoordelen
Resultaat
- Blok- Toetsdatum- cijfer
![Page 19: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/19.jpg)
Case 1: Mario
Interactie??
![Page 20: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/20.jpg)
Klassendiagram als systeemmodel
• Vorige keer:Een Klassendiagram beschrijft de interactie tussen objecten.
• Hoe leggen we die interactie vast?
![Page 21: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/21.jpg)
Case 1: Mario
Welke objecten interacteren?
![Page 22: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/22.jpg)
Case 1: Mario
• Mysterieblok bevat Mushroom• Speler berijdt Yoshi (parent class!)• Hamerman gooit Hamer• Hamer ‘doodt’ Speler• Speler pakt munt• Etc.
• Hoe modelleren we dat?
![Page 23: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/23.jpg)
Associatie UML syntax
• Als 2 objecten kennis van elkaar hebben ( = met elkaar interacteren) dan hebben ze een associatie.
• Associaties met een superklasse gelden (natuurlijk) ook voor de subklasse.
• Notatie is een lijn.
Speler Yoshi
HamerHamerman
![Page 24: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/24.jpg)
Associatie UML syntax
• Een associatie heeft altijd een beschrijving– Dat is een ‘naam’ met leesrichting (midden) óf– Een rolverdeling aan beide kanten
HamerHamermangooit
Hamer Hamermangooit
HamerSpelerslachtoffer
wapen Yoshi
Speler
berijdt
![Page 25: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/25.jpg)
Case 1: Mario
Kan Mario meerdere Yoshi’s berijden?
Kan een mysterieblok meerdere mushrooms bevatten?Kan een hamerman meerdere hamers gooien?
![Page 26: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/26.jpg)
Multipliciteit UML syntax
• Multipliciteit geeft de hoeveelheden bij een associatie aan:– 1 precies 1– 99 precies 99– 5..55 een waarde tussen de 5 en de 55– * meerdere (=potentieel oneindig veel, kan ook 0)– 4..* 4 of meer
• De multipliciteit geef je aan beide kanten aan
![Page 27: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/27.jpg)
Multipliciteit UML syntax
HamerHamermangooit
Yoshi
Speler
berijdt
*1
• Een Hamerman gooit 0 of meer Hamers• Een hamer wordt gegooid door 1 Hamerman
0..1
0..1
• Een Speler berijdt 0 of 1 Yoshi• Een Yoshi wordt bereden door 0 of 1 speler
![Page 28: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/28.jpg)
Klassendiagram: procedure
• Zelfstandige Naamwoorden:– Klasse– Attribuut– Niet modelleren
• Werkwoorden– Methoden– Iets anders– Niet modelleren
Associatie !
![Page 29: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/29.jpg)
Case 2: Studeren
Van nieuwe studenten dienen de volgende gegevens ingevoerd te worden: naam, studentcode, geboortedatum en SLB’er.(bij inschrijven krijgt iedere student een docent als SLB’er toegewezen). Studenten hebben een cijferlijst en studeren en maken tentamens.Na iedere periode moeten de cijfers voor de blokken en de toetsdatum ingevoerd worden. Het systeem rekent het gemiddelde van de behaalde cijfers uit.Docenten hebben een naam, geboortedatum en vestiging. Ze berekenen cijfers en beoordelen studenten
![Page 30: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/30.jpg)
Case 2: StuderenZNW:• studenten• gegevens• Naam• geboortedatum• SLB’er• docent• periode• cijfer• blok• toetsdatum• systeem• Gemiddelde• Vestiging
WW:• Invoeren• Inschrijven• Toewijzen• Tentamen maken• Studeren• Hebben• Uitrekenen• Cijfers berekenen• Studenten beoordelen
![Page 31: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/31.jpg)
• Student– naam– Geboortedatum– Studentcode– Slb’er– cijferlijst– Inschrijven– Tentamen maken– studeren
• Docent– SLB-studenten– Naam– Geboortedatum– Vestiging– Student beoordelen– Cijfers berekenen
• Resultaat– Cijfer– Toetsdatum– Blok
Case 2: Studeren
![Page 32: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/32.jpg)
Case 2: StuderenPersoon
- naam- geboortedatum
Student
- Code- cijferlijst
- Inschrijven- Studeren- Tentamen maken
Docent
- Vestiging
- Cijfers berekenen- Studenten
beoordelen
Resultaat
- Blok- Toetsdatum- cijfer
Bepaalt
beoordeelt
Behaalt
Eerstejaars
SLB’er
*
* 1
1..*
1
*
*1
![Page 33: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/33.jpg)
Associaties: afspraken
• Associaties kunnen ook ‘naar zichzelf’. Dat heet een unaire associatie.– Een student heeft 2 of meer vrienden– Een docent is baas van meerdere andere docenten
• Iedere klasse heeft minstens 1 associatie• Als een klasse verwijst naar een object van
een klasse die ook in je diagram staat, is dat nooit een attribuut, maar altijd een associatie
1
*
Is baas van
Docent
- Vestiging- SLB studenten
- Cijfers berekenen- Studenten
beoordelen
Docent
- Vestiging- SLB studenten
- Cijfers berekenen- Studenten
beoordelenXStudent
- code- SLB’er- cijferlijst
- Inschrijven- Studeren- Tentamen maken
2..*
2..*
is vriend van
![Page 34: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/34.jpg)
Case 3: Kebab
DönerKings is een grote keten kebab-bakkers. Ieder filiaal heeft minimaal 2 werknemers met een bepaald salaris en een naam. Ze worden ingehuurd om te bakken, verkopen en broodjes te vullen. Sommige werknemers geven leiding aan 2 andere werknemers. Je kan verschillende bazen hebben. Filialen verkopen broodjes en Turkse pizza’s; van beide weten we de kostprijs. Van broodjes weten we de inhoud (Kip of Kalf) en van pizza’s de doorsnede. Beide kunnen ze bakken. Soms breiden filialen uit. Ze nemen dan meer werknemers in dienst. Broodjes en pizza’s bevatten altijd 3 ingrediënten. Van ingrediënten weten we de houdbaarheidsdatum. Soms verrotten ze. Oh ja! Filialen hebben een adres en eigenaar. Dat is 1 van de medewerkers.
![Page 35: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/35.jpg)
Case 3: Kebab
DönerKings is een grote keten kebab-bakkers. Ieder filiaal heeft minimaal 2 werknemers met een bepaald salaris en een naam. Ze worden ingehuurd om te bakken, verkopen en broodjes te vullen. Sommige werknemers geven leiding aan 2 andere werknemers. Je kan verschillende bazen hebben. Filialen verkopen broodjes en Turkse pizza’s; van beide weten we de kostprijs. Van broodjes weten we de inhoud (Kip of Kalf) en van pizza’s de doorsnede. Beide kunnen bakken. Soms breiden filialen uit. Ze nemen dan meer werknemers in dienst. Broodjes en pizza’s bevatten altijd 3 ingrediënten. Van ingrediënten weten we de houdbaarheidsdatum. Soms verrotten ze. Oh ja! Filialen hebben een adres en eigenaar. Dat is 1 van de medewerkers.
![Page 36: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/36.jpg)
Case 3: Kebab• DönerKings• Keten• Kebab-bakkers• Filiaal• Werknemers• Salaris• Naam• Broodjes• Bazen• Turkse Pizza’s• Kostprijs• Inhoud• Kip• Kalf• Pizza’s• Doorsnede• Beide• Ingrediënten• Houdbaarheidsdatum• Adres• Eigenaar
Eerst synoniemen identificeren en overbodige woorden eruit
![Page 37: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/37.jpg)
Case 3: Kebab• DönerKings• Keten• Kebab-bakkers = filialen• Werknemers• Salaris• Naam• Broodjes• Bazen• Turkse Pizza’s = pizza’s• Kostprijs• Inhoud• Kip• Kalf• Doorsnede• Beide• Ingrediënten• Houdbaarheidsdatum• Adres• Eigenaar
KlantnaamUitleg klantsynoniem
Onderdeel van werkwoordsynoniem
Mogelijke optie voor attribuutMogelijke optie voor attribuut
Taalconstructie (wel hint!)
Nu enkelvoud en ordenen…
![Page 38: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/38.jpg)
Case 3: Kebab• Filiaal
– Adres– Eigenaar
• Werknemer– Salaris– Naam– Ondergeschikten
• Product– Kostprijs
• Broodje– Inhoud
• Turkse Pizza– Doorsnede
• Ingrediënt– Houdbaarheidsdatum
Superklasse!
Verwijst naar klasse in diagram (Associatie)
![Page 39: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/39.jpg)
Case 3: Kebab• Filiaal
– Adres• Werknemers
– Salaris– Naam
• Product– Kostprijs
• Broodje– Inhoud
• Turkse Pizza– Doorsnede
• Ingrediënt– Houdbaarheidsdatum
• Heeft werknemers = inhuren• Bakken• Verkopen• Broodjes vullen• Geven leiding = bazen hebben• Verkopen• Weten• Bakken• Uitbreiden• In dienst nemen• Hebben• Verrotten• Bevatten
Verschillend?
![Page 40: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/40.jpg)
Case 3: Kebab• Filiaal
– Adres– Uitbreiden– In dienst nemen
• Werknemers– Salaris– Naam– Bakken– Verkopen– Broodjes vullen
• Product– Kostprijs– Bakken
• Broodje– Inhoud
• Turkse Pizza– Doorsnede
• Ingrediënt– Houdbaarheidsdatum– Verrotten
• Associaties:– Werknemer filiaal
• Inhuren• Eigenaar
– Werknemer werknemer• Leiding geven
– Filiaal Product• Verkopen
– Product Ingrediënt• bevatten
![Page 41: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/41.jpg)
Product- Kostprijs
- Bakken
Turkse Pizza- Doorsnede
Broodje- Inhoud
Case 3: KebabWerknemer
- Naam- Salaris
- Bakken- Verkopen- Broodjes Vullen
Filiaal
- Adres
- Uitbreiden- In dienst nemen
Ingrediënt- Houdb. datum
- Verrotten
verkoopt
eigenaar
Bevat
huurt in
*
2..*
*
1..*
1
*
* 3
eigendom
2
1
Twijfel…
Let op!!!(ook *?)
Let op!!!Dit is fout
Baas van
![Page 42: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/42.jpg)
In beperking schuilt de meester…
• Een Hamerman gooit meerdere Hamers• Een hamer wordt gegooid door 1 Hamerman• Maar…
– Is het voor een Hamer interessant wie hem heeft gegooid?– Is het voor een Hamerman interessant welke hamers hij
gooit?
HamerHamermangooit1 *
![Page 43: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/43.jpg)
Navigabiliteit: UML syntax
• Een associatie heeft een richting. Dat noemen we de navigabiliteit.– Welke klasse ‘heeft kennis van’ de andere klasse bij een
associatie.• Als je kennis van een klasse hebt kun je daarvan methoden
‘aanroepen’ (= gebruiken).
– Dit is iets anders dan de leesrichting– Tekenen door middel van pijlen en kruisen
HamerHamermangooit1 *
De Hamerman heeft Kennis van de HamerDe Hamer heeft geen kennis van de Hamerman
![Page 44: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/44.jpg)
Navigabiliteit: UML syntax
• Er zijn meerdere navigabiliteitsopties– Bi-directioneel– Uni-directioneel– Undefined
• Maar die mag eigenlijk niet
• Regels– Minstens 1 kant navigeerbaar
(anders geen associatie)– Zo min mogelijk navigeerbaar
• Zie Workshop 4
A
A
BA
A B
B
B
Bi-directioneel
Uni-directioneelene kant
Uni-directioneelandere kant
Links ‘Undefined’
![Page 45: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/45.jpg)
Case 1: Mario
• Geef de navigabiliteit:
MysterieblokMushroomZit in
Yoshi
Speler
berijdt
0..1 1
0..1
0..1
MysterieblokMushroomZit in
Yoshi
Speler
berijdt
0..1 1
0..1
0..1
![Page 46: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/46.jpg)
Navigabiliteit unaire associatie
• Wat is de navigabiliteit van ‘is vriend van’– Je bent altijd vriend van elkaar• Dus bi-directioneel?
Student
- code- SLB’er- cijferlijst
- Inschrijven- Studeren- Tentamen maken
2..*
2..*
is vriend van
• Antwoord: NEE, Unidirectioneel• Anders ‘2x opslaan’• ‘Ik heb jou als vriend’• ‘Ik ben van jou een vriend’
• Regel: Bij gelijkwaardige unaire associatie (vrienden, buren, broer-zus, etc) altijd uni-directioneel
X
![Page 47: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/47.jpg)
Navigabiliteit unaire associatie
• Wat is de navigabiliteit van ‘is baas van’– Ongelijkwaardige relatie• Dus uni-directioneel?
Medewerker
- Naam- Salaris- Geboortedatum
- Werken- Luieren- Zeiken
0..1
*
Is baas van
• Antwoord: NEE, het kan beide• Als je weet wie je baas is en je baas weet dat jij
zijn ondergeschikte bent: bi-directioneel• Als 1 van beide dat niet weet dan uni-directioneel• Regel: bij ongelijkwaardige associatie: beide kan
![Page 48: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/48.jpg)
NeusGezicht
Compositie
Afhankelijkheids-associaties
• Soms is een klasse afhankelijk van een andere klasse.– Meestal is dat een deel-geheel relatie.– De navigabiliteit is vrijwel altijd van ‘geheel’ naar
‘deel’• Het ‘deel’ wordt geheel gestuurd door het ‘geheel’
– Er zijn 2 varianten:
RandapparatuurComputer
Aggregaat
![Page 49: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/49.jpg)
Aggregaat
• Het geheel (het aggregaat) ‘bestuurt’ het deel• Regels:– Het aggregaat kan soms bestaan zonder zijn delen,
soms niet• Het aggregaat is altijd ‘incompleet’ als een deel mist
– De delen kunnen horen bij meerdere aggregaten– De delen kunnen bestaan zonder aggregaat
RandapparatuurComputer * 0..3
RandapparatuurComputer RandapparatuurComputer * 0..3
Kassa 0..1 *
Geen naam!!
![Page 50: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/50.jpg)
Compositie
• Het geheel (de compositie) ‘bezit’ het deel.• Regels:
– Een compositie kan soms bestaan zonder zijn delen, soms niet• Een compositie is altijd ‘incompleet’ als een deel mist
– Een deel kan niet bestaan zonder de compositie– Een deel hoort maar bij 1 compositie– Een deel wordt gemaakt en verwijderd door zijn compositie– Als de compositie verdwijnt moeten ook alle delen verdwijnen
of over ‘gegeven worden’ aan andere compositie
NeusGezicht1 1
Altijd 1 !!
NeusGezicht NeusGezicht Vliegtuig1 1 1 1X
![Page 51: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/51.jpg)
Case 4: De bank
Een bank heeft een naam en een beurswaarde. Een bank bestaat uit klanten en filialen, van klanten weten we een naam en adres, van filialen een locatie en omzet. Een filiaal bestaat uit medewerkers met een naam en salaris.
![Page 52: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/52.jpg)
Case 4: De bank
Een bank heeft een naam en een beurswaarde. Een bank bestaat uit klanten en filialen, van klanten weten we een naam en adres, van filialen een locatie en omzet. Een filiaal bestaat uit medewerkers met een naam en salaris.
![Page 53: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/53.jpg)
Case 4: De bank
• Bank– Naam– Beurswaarde
• Filiaal– Locatie– Omzet
• Persoon– Naam
• Klant– Adres
• Medewerker– salaris
• Aggregaten– Bank bestaat uit
klanten– Filiaal bestaat uit
medewerkers• Composities– Bank bestaat uit
Filialen• Associaties
![Page 54: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/54.jpg)
Case 4: De bankBank
- Naam- Beurswaarde
**
Filiaal
- Locatie- Omzet
Persoon
- Naam
Medewerker
- Salaris
Klant
- Adres
*1
*
1
![Page 55: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/55.jpg)
Case 5: Beestenboel
Alle dieren kunnen bewegen en ademen. Dieren zijn ofwel katachtigen ofwel reptielen. Alle amfibieën hebben een aantal schubben, leggen eieren, alle katachtigen hebben een aantal kinderen en geven melk. Reptielen zijn ofwel een slang, ofwel een hagedis, ofwel een dinosaurus. De familie katachtigen bestaat uit tijgers en huiskatten.
![Page 56: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/56.jpg)
Case 5: Beestenboel
Huiskat Tijger Slang Hagedis
Katachtige
- Aantal Kinderen
- Melk geven
Reptiel
- Aantal Schubben
- Eieren Leggen
Dier
- Ademen- Bewegen
Dinosaurus
![Page 57: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/57.jpg)
Case 5: Beestenboel
Katachtige
?
![Page 58: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/58.jpg)
Abstracte Klasse: UML Syntax
• Sommigen klassen zijn niet bedoeld om een object van te maken– Het is slechts aan handig instrument om
gemeenschappelijkheid te modelleren• Dit heet een abstracte klasse– In UML: klasse naam cursief– Van een abstracte klasse mag je geen
object maken
Katachtige
- Aantal Kinderen
- Melk geven
![Page 59: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/59.jpg)
Case 5: Beestenboel (uitbreiding)
Verschillende dieren bewegen totaal verschillend. Reptielen bewegen in principe ‘laag bij de gronds’, behalve slangen, die kruipen. Katachtigen bewegen ‘erg lichtvoetig’
![Page 60: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/60.jpg)
Uitwerking methodes
• We zagen al in Case 3 (Kebab) dat er in een tekst soms mogelijke waarden van een attribuut gegeven worden (inhoud is kip of kalf).
• Soms heb je dit ook met methoden. De bijbehorende uitleg geeft aan in welke (sub- of super)klasse een bepaalde methode thuishoort– In superklasse: overerving– In superklasse: abstracte methode– Evengoed ook in kindklasse: polymorphisme
![Page 61: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/61.jpg)
Abstracte Methode: UML Syntax
• “Verschillende dieren bewegen totaal verschillend”– De superklasse ‘Dier’ heeft geen idee hoe de
invulling van de methode eruit ziet• Immers, alle subklasses hebben een totaal
verschillende implementatie.
– Wel weten we dat iedere subklasse kan bewegen• Dit heet een Abstracte Methode.
– Iedere subklasse moet deze methode verplicht hebben• Of weer abstract doorgeven naar lagere subklassen
– Kan alleen in abstracte klasse!– UML: methodenaam cursief
Dier
- Ademen- Bewegen
Beide Abstract!!
![Page 62: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/62.jpg)
Polymorphisme
• “Reptielen bewegen in principe ‘laag bij de gronds’, behalve slangen, die kruipen”
• Als het merendeel van de subklassen eenzelfde implementatie van een methode heeft, plaats je die in de superklasse– De afwijkende subklassen overschrijven die
methode dan met een eigen variant.– Dit heet polymorphisme– UML: gewoon de methode in de subklasse nog
eens opnemen
![Page 63: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/63.jpg)
Polymorphisme
Slang
- bewegen
Hagedis
Reptiel
- Aantal Schubben
- Eieren Leggen- Bewegen
Dinosaurus
Polymorphisme!!
Standaard Methode
Detail-afwijking
![Page 64: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/64.jpg)
Case 5: Beestenboel
Huiskat Tijger Slang
- Bewegen
Hagedis
Katachtige
- Aantal Kinderen
- Melk geven- Bewegen
Reptiel
- Aantal Schubben
- Eieren Leggen- Bewegen
Dier
- Ademen- Bewegen
Dinosaurus
![Page 65: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/65.jpg)
Herhaling
• Associaties hebben een richting: de navigabiliteit– Dat kan uni- of bi-directioneel– Let hiermee op bij unaire associaties
• Er bestaan afhankelijkheidsrelaties– Aggregaat: Deel / geheel, waarbij het deel los kan bestaan– Compositie: Deel / geheel, waarbij het deel NIET los kan
bestaan• Van een abstracte klasse kan geen object gemaakt worden• Een abstracte methode moet door alle subklassen worden
geïmplementeerd• Als een subklasse een standaard methode van een
superklasse overschrijft heet dat polymorphisme
![Page 66: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/66.jpg)
Types: UML syntax
• In de meeste programmeertalen hebben attributen, parameters (variabelen), en methoden een bepaald type.– Deze leg je bij het ontwerp vaak al vast…– … en zie je dus al in het klassendiagram– De syntax is (methode / variabele)naam : type
Katachtige
- aantalKids : int
- geefMelk (minuten: int) : int- bewegen (afstand : double)
Geen void!!
![Page 67: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/67.jpg)
Encapsulatie
• Als klassen met elkaar een associatie hebben kunnen ze elkaars attributen aanpassen en elkaars methoden gebruiken.
• Het proces van toegang reguleren heet encapsulatie
Mario
- levens : int
- spring()- gaDood()- pakItem(deze: Item)
Spel
- Score : int
- nieuwPunt(punt: int)
1 1
Is deelnemer bij
Mag Mario deze aanpassen?
Mag Spel deze methode gebruiken??
Mag Spel deze aanpassen??
![Page 68: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/68.jpg)
Encapsulatie: UML syntax
• Een attribuut of methode is public:– Het element kan door elke geassocieerde klasse aangeroepen
of aangepast worden– Syntax ‘+’
• Een attribuut of methode is private:– Het element kan alleen door methoden van de eigen klasse
aangeroepen of aangepast worden– Syntax ‘-’
• Regel: zoveel mogelijk private (zie straks)– In ieder geval alle attributen
• Een klasse zonder ‘public’s’ is onnuttig.
![Page 69: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/69.jpg)
Encapsulatie: UML syntax
Mario
- levens : int
- spring()+ gaDood()- pakItem(deze: Item)
Spel
- score : int
+ nieuwPunt(punt: int)
1 1
Is deelnemer bij
![Page 70: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/70.jpg)
Kwaliteit van ontwerp
• Een systeemontwerp– Is onderdeel van een ontwikkelingscyclus (WS 1)– Dient als input bij het maken van ‘code’
• Het is belangrijk dat al bij het ontwerp kwalitatief goede keuzes worden gemaakt.
Ontwerp
![Page 71: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/71.jpg)
Kwaliteitsdoelen
• Software wordt niet 1 keer geschreven en daarna nooit meer veranderd (zoals een boek)
• Software wordt uitgebreid, aangepast, geupdate, onderhouden, gecorrigeerd, geport.
• Dit wordt gedaan door verschillende mensen gedaan op verschillende momenten– Vaak veel mensen– Vaak over een lange tijd
• Dit gegeven moet worden ondersteund.
![Page 72: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/72.jpg)
Kwaliteitsdoelen
• Begrijpelijkheid (understandability):– Iedere vakman moet binnen afzienbare
tijd begrijpen hoe het systeem in elkaar zit
• Uitbreidbaarheid (Expandability):– Het systeem moet makkelijk voorzien
kunnen worden van nieuwe functionaliteit
• Aanpasbaarheid (adaptability):– Het systeem moet makkelijk aangepast
kunnen worden aan veranderde omstandigheden
BegrijpelijkheidUitbreidbaarheidAanpasbaarheid
Doelen
![Page 73: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/73.jpg)
Kwaliteitscriteria
• Een Klasse verricht alle taken die de naam doet vermoeden– Naamgeving is dus belangrijk!
• Dit heet compleetheid (Completeness).– Doel: hoog
BegrijpelijkheidUitbreidbaarheidAanpasbaarheid
Doelen
Compleetheid Criteria
Bankrekening
- tegoed : double
+ opnemen() : double
Bankrekening
- tegoed : double
+ opnemen() : double+ storten(bedrag : double)
![Page 74: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/74.jpg)
Kwaliteitscriteria
• Een klasse verricht alleen de taken die de naam doet vermoeden.– Naamgeving is dus belangrijk
• Dit heet uitsluitendheid (sufficiency)– Doel hoog
BegrijpelijkheidUitbreidbaarheidAanpasbaarheid
Doelen
CompleetheidUitsluitendheid
Criteria
Bankrekening
- tegoed : double
+ opnemen() : double+ storten(bedrag : double)
CreditCard
+ check() : double
- credit : double
Verzekering- bedrag : double
+ check() : double
Bankrekening
- tegoed : double- VerzekeringsBedrag: double- credit : double
+ opnemen() : double+ storten(bedrag : double)+ checkVerzekering() : double+ checkCreditCard() : double
![Page 75: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/75.jpg)
Kwaliteitscriteria
• Een klasse biedt slechts een enkele manier om iets te doen
• Dit heet primitiefheid (primitiveness).– Doel: hoog
BegrijpelijkheidUitbreidbaarheidAanpasbaarheid
Doelen
CompleetheidUitsluitendheid
Primitiefheid
Criteria
Bankrekening
- tegoed : double
+ opnemen() : double+ storten(bedrag : double)+ stortGrootBedrag(bedrag : double)+ meerStortingen(bedragen : double[])
Bankrekening
- tegoed : double
+ opnemen() : double+ storten(bedrag : double)
X
![Page 76: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/76.jpg)
Kwaliteitscriteria
• Een Klasse modelleert slechts 1 logische taak en alle methoden ondersteunen dat doel.– Zo’n klasse is makkelijk te
begrijpen en hergebruiken• Dit heet cohesie (cohesion)– Doel: hoog
• Ook bij methoden kan je spreken van cohesie
BegrijpelijkheidUitbreidbaarheidAanpasbaarheid
Doelen
CompleetheidUitsluitendheid
PrimitiefheidCohesie
Criteria
![Page 77: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/77.jpg)
Kwaliteitscriteria
• Ultiem voorbeeld van lage cohesie:– Een klasse regelt feitelijk alles,
alle andere klassen hebben weinig verantwoordelijkheid
– ‘god-class’
BegrijpelijkheidUitbreidbaarheidAanpasbaarheid
Doelen
CompleetheidUitsluitendheid
PrimitiefheidCohesie
Criteria
Spel
- score : int- status : GameState
+ nieuwPunt(punt: int)+ pauze()+ hervat()+ stopVijanden()+ startVijanden()+ beweegMario()+ checkMarioLevend()+ maakYoshiWild()+ vulMysterieBlokken()+ spuugUitMushroom()
• Indicatie van lage cohesie:– Grote classes– Het diagram is een ‘ster’– Veel public methoden
• Er moet toch gecommuniceerd worden…
– Acties en namen van andere klassen in methode-namen
![Page 78: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/78.jpg)
Kwaliteitscriteria
• Een klasse heeft zo weinig mogelijk ‘kennis’ nodig van andere klassen– Dit is gebruik van methoden
• Als klassen veel van elkaar weten (en dus gebruiken) moeten bij aanpassing van 1 klasse veel andere ook worden aangepast.
• Dit heet koppeling (coupling)– Doel laag
BegrijpelijkheidUitbreidbaarheidAanpasbaarheid
Doelen
CompleetheidUitsluitendheid
PrimitiefheidCohesie
Koppeling
Criteria
![Page 79: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/79.jpg)
Kwaliteitscriteria
• Indicaties van koppeling:– Veel associaties
• Kennelijk gebruiken de klassen elkaar
– Veel bi-directionele associaties• Kennelijk gebruiken deze klassen elkaar
– Methoden als:get<AndereKlasse>()• Kennelijk geeft deze klasse kennis van een
klasse door naar een andere klasse
– Veel public’s• Kennelijk worden veel methoden door
andere klassen gebruikt.
BegrijpelijkheidUitbreidbaarheidAanpasbaarheid
Doelen
CompleetheidUitsluitendheid
PrimitiefheidCohesie
Koppeling
Criteria
![Page 80: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/80.jpg)
Kwaliteitscriteria
• Bij een eenvoudig systeem zijn de kwaliteitscriteria relatief makkelijk te behalen.
• Bij complexere systemen wordt dit lastiger– Bij een grafische interface:
• Hier gebeurt input (knoppen)• Hier gebeurt output (bv. PopUp)• Bi-directionele koppeling naar andere klassen ligt
op de loer
– Bij een spel:• Een spel kan pauzeren• Een spel moet resultaten verwerken (gewonnen /
verloren)• ‘God-class’ lig op de loer (=lage cohesie)
BegrijpelijkheidUitbreidbaarheidAanpasbaarheid
Doelen
CompleetheidUitsluitendheid
PrimitiefheidCohesie
Koppeling
Criteria
![Page 81: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/81.jpg)
Kwaliteitsmethodiek
• Aan de criteria kan je het beste voldoen door je steeds af te vragen:– Heb ik de verantwoordelijkheden goed
verdeeld?– Is dit inderdaad de
verantwoordelijkheid van deze klasse?• Dit heet Responsibility Driven Design
(RDD).• Belangrijk voorbeeld van RDD:– Attributen worden uitsluitend door
eigen klasse aangepast (dus private)
BegrijpelijkheidUitbreidbaarheidAanpasbaarheid
Doelen
CompleetheidUitsluitendheid
PrimitiefheidCohesie
Koppeling
Criteria
RDD
Methodiek
![Page 82: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/82.jpg)
Dependencies
• Soms is een klasse op een of andere manier afhankelijk van een andere klasse,
• Maar is er geen sprake van een associatie– De ene klasse ‘slaat een connectie op’ naar een
andere klasse om hiervan gebruik te maken• Er is dan sprake van een ‘afhankelijkheid’
ofwel dependency• Dependencies zijn een lichtere vorm van
koppeling dan associatie
![Page 83: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/83.jpg)
Dependencies: Voorbeelden
De ene klasse is een nieuwere vorm van de andere
De ene klasse ‘maakt’ (new) de andere klasse, maar houdt
niet bij welke hij gemaakt heeft en gebruikt deze klassen
later ook niet meer
De ene klasse gebruikt de andere klasse als parameter,
maar houdt dit niet bij.
![Page 84: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/84.jpg)
Dependency: UML Syntax
• Een dependency wordt weergegeven door een gestippelde pijl
• Als er geen tekst bij de pijl staat wordt aangenomen dat het << use >> is
• Een dependency is in de vorm van een stereotype: een standaard soort dependency– Syntax << naam >>
<< parameter >>
![Page 85: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/85.jpg)
Dependencies: stereotypes
• Er zijn drie soorten stereotypes– Usage: de ene klasse gebruikt de andere klasse• Komt meeste voor
– Abstractie: de ene klasse heeft te maken met een andere klasse
– Permissie: de ene ‘eenheid’ staat gebruik toe aan een andere ‘eenheid’• Tussen packages, namespaces, etc.• Hier niet besproken
![Page 86: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/86.jpg)
Dependencies: usage stereotypes
• << use >>: de ene gebruikt de andere op niet nader gespecificeerde wijze– Liever niet, tenzij lokale variabele
• << parameter >>: de ene klasse heeft de andere als parameter in een methode
• <<instantiate >> of << create >>: de ene klasse maakt een object van de andere
![Page 87: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/87.jpg)
Dependencies: abstractie stereotypes
• << trace >>: beide klassen representeren hetzelfde concept, maar zitten in een verschillend model / verschillende fase
• << substitute >>: de ene klasse kan run-time de andere vervangen– Gebruiken als gewerkt wordt in talen zonder overerving
• << refine >>: de ene klasse is een verfijndere versie van een andere die soms wel, soms niet van toepassing is– Bijvoorbeeld verschillende klassen voor verschillende
optimalisaties
![Page 88: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/88.jpg)
Eigenschappen van multipliciteit
• Soms wil je aan een *-multipliciteit een eigenschap toekennen– De lijst moet gesorteerd zijn– Elk element mag maar 1 keer voorkomen
• Zo’n eigenschap geef je aan dmv { eigenschap}– Ordered / unordered sortering– unique / nonunique uniciteit
![Page 89: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/89.jpg)
Abstractie
• Soms wil je– Een simpele interface bieden naar andere
‘componenten’• Met minder methoden• Dit is goed voor de begrijpbaarheid
– Niet weten welke klasse een taak voor je daadwerkelijk gaat uitvoeren
• Oplossing: abstracte klasse
![Page 90: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/90.jpg)
Abstractie
• Maar! Soms wil je– Verbieden dat de andere ‘componenten’ alle
functionaliteit kunnen gebruiken– Geen standaard implementatie
• En…– Soms is er geen natuurlijke ‘overerving’
• Oplossing: interface
![Page 91: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/91.jpg)
Interface: UML Syntax• Een interface is een set aan methoden die
geïmplementeerd worden door andere klassen– Deze klassen kunnen sub-klassen zijn van een
andere klasse– Een interface heeft geen implementatie van
methoden– Een interface heeft geen attributen– Van een interface kunnen geen objecten
worden aangemaakt.– Een implementerende klasse moet alle
interface methoden implementeren• Een interface biedt functionaliteit aan
andere klassen door (nog niet bekende) klassen die hem implementeren
<< interface >>KoffieHaler
+ koffieHalen()
Student
- Code- cijferlijst
- koffieHalen()- Studeren- Tentamen maken
Directeur
+ leidingGeven()
gebruikt
* 1
Stippellijn
interface
Directeur weet niet (en interesseert ook niet) wie er koffie
haalt, ALS het maar gebeurt.De interface garandeert dit. Run-time kan in dit geval student de
klus uitvoeren
Student implementeert de verplichte methode
![Page 92: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/92.jpg)
Voorbeeld toepassing interface
Gebruikers van de database kunnen zich beperken tot deze interface. De interne werking hoeven ze niet te weten en
mogen ze ook niet gebruiken
![Page 93: Ontwerpen Klassendiagrammen. Case 1: Mario Wat zijn de objecten?](https://reader037.vdocuments.mx/reader037/viewer/2022102805/5551a0ee4979591f3c8b7ea6/html5/thumbnails/93.jpg)
Voorbeeld toepassing interfaceeigen events (observer)
Een Facebook account genereert verschillende
‘gebeurtenissen’ (events). Verschillende klassen kunnen zich aanmelden om hierop te
reageren.
Klassen kunnen zichzelf aanmelden of verwijderen als
‘luisteraar’
Bij elke gebeurtenis roept het account notify aan.
Hierin wordt van elke luisteraar (in listeners) de methode
faceBookEvent aangeroepen. Deze bestaat, want al deze klassen implementeren de interface
Dit zijn de verschillende events
Het interesseert Account niet OF, HOEVEEL & WELKE Klassen
luisteren naar events. Hiervoor is een interface erg geschikt. Later
kunnen nu nog onbekende klassen ook luisteraar worden als ze de methode maar implementeren
NB: in het echt bestaat dit systeem natuurlijk niet. Al deze
dingen draaien dan op een verschillend apparaat. Het gaat
om het idee