OBT_Hoofdstuk_3_(2013)_Snoeck

advertisement
Ontwikkeling van bedrijfstoepassingen
Hoofdstuk 3: Static Business Modelling
3.1 WAT IS MODELLEREN
Er zijn twee perspectieven op software
- Engineering perspectief: software is an artefact that will
- design
- build
- test (inspectie en validatie)
- deploy
- Wiskundigperspectief: software is een wiskundige abstractie
--> een theorie die men kan analyseren op consistentie en men kan nauwkeuriger kan maken
naar een meer gespecialiseerde theorie
3.2 ENGINEERING PERSPECTIEF
Software is hier een ARTEFACT
Analyst: zoek welk probleem met moet oplossen via software
--> hij interviewt de sleutelgebruikers en/of opdrachtgever
Het interview bestaat uit verschillende “cases”
Men gaat het probleem aanreiken via een use case
--> Waarvoor wenst u het systeem te gebruiken?
Use cases: exemplarisch karakter waarvoor men het systeem wil gebruiken (voorbeelden geven)
! Dit is niet hetzelfde als een prototypisch karakter (dit is echt de functie omschrijven)
Een goed systeem gaat alle exemplarische use cases ondersteunen
Voorbeeld: 1 + 1 , 2 + 2, 5 + 5, ...
Software is hier een ARTEFACT that will DESIGN
Men ontwerpt een oplossing door het maken v/e schets
--> plan van hoe men een oplossing kan bouwen
Model: plan v/h te ontwerpen systeem
Men kan geen oplossing zoeken zonder:
- de noden v/d gebruiker goed te kennen
- het op te lossen probleem goed te analyseren
Het model moet bij voorkeur:
- het probleemdomein beschrijven
- een blauwdruk zijn v/d oplossing zelf
Bij het opstellen v/h model moet men zich het perspectief kunnen aannemen v/d:
- Opdrachtgever
- Gebruiker
! Niet standpunt v/d bouwer innemen (aannemer), wel v/d architect v/d bouwheer
1
Jeroen De Koninck – HIRB – 2012-2013
Lastenboek: perspectief v/d opdrachtgever
--> beschrijft alle vereisten die de opdrachtgever heeft ten aanzien v/h te bouwen systeem
Er zijn twee grote categorieën van vereisten:
- functionele vereisten: beschrijft wat het systeem moet kunnen doen vanuit het perspectief
v/d opdrachtgever (Voorbeelden: zaken registreren, opvragen, ...)
- Niet-functionele vereisten: beschrijf hoe men de zaken moet realiseren
Voorbeelden: kwaliteit, performantie, technologie, responstijden, standaarden, ...
CIO: Chief Information Officer
! Kwaliteit v/h lastenboek is een primaire risicofactor voor projecten
--> heeft grote impact op de business
Probleemdomein:
- draagt bij tot de kwaliteit v/h lastenboek en is een risicoverlagende factor v/d projecten
- draagt bij tot het goed begrijpen v/h domein en geeft een beeld v/d verbeteringen
Universe of discource omschrijf het model v/h probleemdomein om een prototypische manier
--> geeft abstracte omschrijving die geldig is voor concrete feiten in het domein
Er zijn twee niveaus van denken:
- Level 1: model niveau
- Level 0: voorbeeld niveau
Voorbeeld:
Level 1
Level 0
Model niveau
* Persoon
* Product
* Opleidingsonderdeel
Voorbeeld niveau * Jan, Tom, Tim, Jos
* Dell Latitude D800, Dell XPS 1330, Peugeot 807
* OBT, Inleiding tot Economisch Recht
Modelleren is abstraheren: men gaat van level 0 naar level 1
Inspecteren is van level 1 naar level 0 gaan
3.2.1 Wiskundig perspectief
Software is a mathematical ABSTRACTION
Op level 0 vinden we de elementen v/d verzameling
Op level 1 vinden we de definitie v/d verzameling
Level 1
Level 0
2
Model niveau
* PERSOON = {p | p is een persoon}
* PRODUCT = {p | p is een product}
* OPLEIDINGSONDERDEEL = {o |o is een opleidingsonderdeel)
Voorbeeld niveau * PERSOON = {Jan, Tom, Tim, Jos}
* PRODUCT = {Dell Latitude D800, Dell XPS 1330, Peugeot 807}
* OPLEIDINGSOND. = {OBT, Inleiding tot Economisch Recht}
Jeroen De Koninck – HIRB – 2012-2013
Modelleren bevat bijgevolg volgende taken:
- Verzamelingen definiëren
- Eigenschappen v/d elementen beschrijven
- Verbanden leggen tussen verzamelingen en hun elementen definiëren
- ...
Software is a mathematical ABSTRACTION, a theory which ca, be ANALYZED FOR CONSISTENCY
Model moeten we ook kunnen valideren:
- Kunnen we het model instantiëren: (EXTERNE VALIDATIE)
--> de verzameling voorzien van elementen en na gaan of de gedefinieerde verbanden en die
we kunnen afleiden overeenkomen met de werkelijkheid
--> overgang van level 1 naar level 0
- Redeneren op het model: (INTERNE VALIDATIE)
--> toepassen van axioma’s en stellingen die we kennen uit de verzamelingenleer en algebra
--> analyse of het model consistent is
3.2.2 Modelleringstaal
Model neerschrijven kan via bepaalde taal
Lastenboek kan men neerschrijven via
- Natuurlijke taal (Nederlands, Engels)
- Specifieke taal (symbolen gebonden aan concepten)
Men gaat dus zaken omschrijven (natuurlijke taal) en schetsen (specifieke taal)
UML: de industriestandaard voor de schetsen (Unified Modeling Language)
--> veel technieken elk beschrijving v/e apart aspect v/h systeem
! Doel: neerschijven v/e oplossing (beschrijven)
MAAR: men kan UML ook aanwenden voor het beschrijven v/h probleemdomein
--> men zal minder technische details voorzien naar de opdrachtgever, dan naar de eigenlijke bouwer
We gebruiken een subset van UML
--> We beperken ons tot de technieken als communicatie met de eindgebruiker
(Deze cursus: geen technische implementatiedetails communiceren)
UML kan men vertalen naar Algebra
Het wiskundig perspectief helpt ons om:
- betekenis v/e UML-schema te definiëren
- abstract denken te stimuleren
- instrument ter validatie van modellen
3
Jeroen De Koninck – HIRB – 2012-2013
3.2.2.1 Terminologie
Modelleringstaal: geheel van technieken bedoeld voor het neerschrijven van specificaties (vb UML)
Modelleringstechniek: samenhangend geheel van symbolen en regels
--> laten toe bepaald aspect v/d software te modelleren
- UML Class Diagramming
- ER Modellering
- Data Flow Diagramming
- Use Case Diagramming
- BPMN: Business Process Modelling Notation
Diagram(ma), schema of model: model/tekening opstellen volgens bepaalde techniek
- UML Class Diagramming voor verkoopsysteem
- ER Modellering voor ISP-systeem
- BPMN schema voor afhandeling bouwaanvraag
3.3 KLASSEN OF OBJECTTYPES
Wiskundige weergave:
- Verzameling: ovaal
- Elementen: punten
ZIE VOORBEELD PAGINA 10
UML heef eigen symboliek voor elk concept in een model
--> Verzamelingen (klasse): rechthoekige vorm met naam v/d verzameling
--> Elementen (objecten): via een objectdiagram
! Een verzameling wordt dus een klasse in UML
! Een element wordt dus een object in UML
We beschrijven de objecten aan de hand v/e aantal eigenschappen
--> Statische eigenschappen: eigenschappen die elk object altijd bezit (waarde kan variëren)
Men noemt dit attributen
--> Men schrijft deze onder de klassenaam in de rechthoek v/d klasse
Voorbeeld:
Een product heeft een: - nummer
- naam
- omschrijving
- hoeveelheid
Elk object krijgt een waarde voor elk attribuut
! Kan variabel zijn doorheen de tijd
4
Jeroen De Koninck – HIRB – 2012-2013
Voorbeeld: een product met volgende waarden:
- Nummer: 123456
- Naam: MilkyWay
- Omschrijving: Snoepreep
- Hoeveelheid in voorraad: 45
Uiteraard kunnen de variabelen veranderen, voornamelijk in dit geval de voorraad
Men gaat dit gieten als:
PRODUCT
Nummer
Naam
Omschrijving
Voorraad
PRODUCT
123456
MilkyWay
Snoepreep
45
Invullen:
3.4 ASSOCIATIES: VERBANDEN TUSSEN KLASSEN
3.4.1 Algemeen principe
Sommige objecten uit een klasse hebben verbanden met andere objecten uit andere klassen
Deze verbanden kan men wiskundig definiëren als afbeeldingen tussen verzamelingen
- Afbeelding f van A naar B: functie die element uit A afbeeldt op element van B
--> A is hierbij het domein en B is het beeld
Element uit A = x-waarde
Element uit B = y-waarde
Domein: alle x-waarden
Beeld: alle y-waarden
f: A -> B : a -> f(a)
met a element van A en f(a) deelverzameling van B
“De afbeelding v/e een element (a) van A wordt gezocht in B en noemt zal f(a) zijn”
Verbanden gaan in beide richtingen
- door: GIFT -> PERSOON: g -> door(g)
“een gift g uit klasse GIFT werd gedaan door een persoon uit klasse PERSOON door(g)”
- voor: GIFT -> PROJECT: g -> voor(g)
“een gift g uit klasse GIFT werd gedaan voor een project uit klasse PROJECT voor(g)”
Verbanden kunnen nu ook omgekeerd lopen:
- door-1 (gaf): PERSOON -> GIFT: p -> door-1(p)
“een persoon p uit klasse PERSOON gaf een gift uit klasse GIFT door-1(p)”
- voor-1 (kreeg): PROJECT -> GIFT: p -> voor-1(p)
“en project p uit klasse PROJECT kreeg een gift uit klasse GIFT voor-1(p)
Associatie: verband tussen 2 of meerdere klassen in UML
--> weergegeven door een lijn tussen de twee klassen (naam v/h verband naast de lijn schrijven)
5
Jeroen De Koninck – HIRB – 2012-2013
! Een verband die in twee richtingen werk, krijgen beide een naam
--> dit noemt men de rol v/d associatie
ZIE VOORBEELD PAGINA 14 BOVENAAN
3.4.2 Verplicht of Optioneel karakter van een verband
f : A -> B is verplicht als elk element van A verplicht een beeld heeft in B
In formulevorm: f: A -> B is verplicht ⇔ ∀ a ∈ A: f(a) ≠ ∅
f : A -> B is optioneel als niet elk element van A verplicht een beeld heeft in B
Je moet kijken naar de cardinaliteit van situaties
! Het karakter (verplicht of optioneel) wordt bepaald als de toestand op elk ogenblik in de tijd
--> voor het modellering v/h karakter door de tijd heen, gebruikt men temporele kwantoren
Zo is er de kwantor ooit: (optioneel)
Voorbeeld: elk persoon zal ooit een gift doen
Bij een klassieke niet-temporele interpretatie zou het verband “gaf” willen zeggen dat er een tijdstip t
is waarop een persoon geen gift doet
Bij de temporele interpretatie zegt men dat iemand ooit een gift zal doen
--> De kwantor ooit zegt zo:
voor elk persoon p moet er ooit een tijdstip t zijn waarop geldt dat gaf(p) ≠ ∅
Zo is er de kwantor altijd: (verplicht)
--> een verband is verplicht wanneer altijd geldt dat elk element wordt afgebaald op een niet-lege
verzameling in de beeldverzameling
Dit noemt men permanente interpretatie
UML gebruikt geen temporele kwantoren
--> men gaat er vanuit dat gemodelleerde eigenschappen ALTIJD geldig zijn (op elke t)
! UML kan geen ooit-kwantoren noteren
3.4.3 Cardinaliteit v/e verband
Cardinaliteit v/e verband f
--> geeft het maximum aantal elementen weer waarop een element uit het domein wordt afgebeeld
door f (dus het maximaal aantal beelden)
Een verband f : A -> B heeft een cardinaliteit van maximum 1 indien elke a ∈ A op maximum 1 b ∈ B
wordt afgebeeld (voor elke a uit A is er dus maximum 1 b uit B)
Symbolen: f: A -> B heeft een cardinaliteit van maximum 1 ⇔ ∀ a ∈ A: |f(a)| ≤ 1
Een verband f : A -> B heeft een cardinaliteit van many indien voor elke a ∈ A op meerdere
elementen uit B wordt afgebeeld (voor elke a uit A bestaan er dus meerdere b’s uit B)
Symbolen: f: A -> B heeft een cardinaliteit van many ⇔ ∀ a ∈ A: |f(a)| ∈ ā„•
6
Jeroen De Koninck – HIRB – 2012-2013
3.4.4 Optionaliteit en cardinaliteit in UML
Bij UML schrijft men de cardinaliteit en het karakter v/e associatie als een interval
! Dit interval staat aan de BEELDVERZAMELING ZIJDE
f: A -> B
f is optioneel
f is optioneel
f is verplicht of |f(a)| > 0
f is verplicht of |f(a)| > 0
cardinaliteit
f heeft cardinaliteit 1 of |f(a)| ≤ 1
f heeft cardinaliteit many
f heeft cardinaliteit 1 of |f(a)| ≤ 1
f heeft cardinaliteit many
Schrijf langs f, aan kant van b
[0..1]
[0..*] of gewoon *
[1..1] of [1] of 1
[1..*]
3.4.4.1 Terminologie
Cardinaliteit is vaak ook de verzamelnaam voor optionaliteit en cardinaliteit
Voorbeeld:
Departement kan mogelijk werknemers hebben en het kunnen er mogelijks meerdere zijn
-> de cardinaliteit is [0..*]
De rol is namelijk optioneel en de cardinaliteit is many
Iedere werknemers hoort exact tot 1 departement en dit voor alle werknemers
-> de cardinaliteit is [1..1]
De rol is namelijk verplicht en de cardinaliteit is 1
Men schrijft dis als:
WERKNEMER [0..*]
WERKT IN ->
[1] DEPARTEMENT
<- HEEFT
De waarden die kunnen gelden voor het departement staan bij de werknemer
De waarden die kunnen gelden voor de werknemer staan bij het departement
3.4.5 Navigeren over meerdere associaties
Als het beeld v/h ene verband, het domein vormt v/h andere verband
--> combinatie v/d verbanden
Voorbeeld:
f: A -> B en g: B -> C
Het beeld van f is het domein van g
Hierdoor kunnen we dit schrijven als:
g ā—‹ f: A -> C: a -> g(f(a))
We gaan dus de y-waarde van f invoegen als de x-waarde bij g
Notatie: g(f(a)) = (gā—‹f)(a)
We kunnen het karakter en cardinaliteit v/h samengesteld verband afleiden uit
--> de eigenschappen van deelverbanden
7
Jeroen De Koninck – HIRB – 2012-2013
UML zal samengestelde verbanden nooit opnemen in conceptuele modellen
--> deze verbanden zijn namelijk volledig redundant
Enkel in een implementatiemodel kan men dit eventueel doen
3.5 SPECIALE VORMEN VAN ASSOCIATIES
Men kan verbanden tussen verzamelingen modelleren als:
--> een afbeelding v/e verzameling naar een andere
Maar men kan een relatie ook zien als:
--> een productverzameling van twee (of meerdere) andere verzamelingen
Relatie R tussen klasse A en klasse B wordt zo:
R⊆AxB
De overeenkomstige afbeelding is dan:
r: A -> B: a -> f(a) waarbij b ∈ f(a) ⇔ (a,b) ∈ R
Het beeld b moet dus element zijn van de verzameling beelden
Zowel het object uit domein (a) als het object uit het beeld (b) moeten tot de relatie behoren
r is verplicht ⇔ a ∈ A: ∃ b ∈ B: (a,b) ∈ R
r is verplicht als en slechts als a een element is van A
En voor a bestaat er een beeld (b) uit B zodat (a,b) elementen zijn van de verzameling
r heeft cardinaliteit maximaal 1 ⇔ |{b ∈ B| (a,b) ∈ R}| ≤ 1
r heeft cardinaliteit maximaal 1 als en als als de absolute waarde van het beeld b uit B een relatie
(a,b) uit R heeft waarvan de maximale waarde kleiner of gelijk is aan 1
Er mag dus slechts één b zijn waarvoor (a,b) uit R één of geen relatie vormt
Door het product maken we ook duidelijk dat elk product van twee klassen slechts één paar
elementen heeft dat 1 keer voorkomt in de relatie
Elk element (a,b) in een productverzameling A x B is uniek geïndentificieerd d.m.v. a en b
! Men mag wel twee verbanden (met ≠ namen) leggen tussen twee dezelfde klassen A en B
3.5.1 N-aire associaties
Door het definiëren van v/e verband als productverzameling kan men
--> gemakkelijk verbanden definiëren waar meer dan twee verzamelingen aan deelnemen
8
Jeroen De Koninck – HIRB – 2012-2013
Stel we hebben volgende informatie:
LEVERT
LEVERANCIER
PRODUCT
Janssens
Tegels
Janssens
Bakstenen
Peeters
Beton
Maes
Beton
Maes
Dakpannen
Peeters
Dakpannen
LEVERT AAN
LEVERANCIER
PROJECT
Janssens
P1
Janssens
P2
Peeters
P2
Maes
P2
Maes
P3
GEBRUIKT VOOR
PROJECT
PRODUCT
P1
Tegels
P1
Bakstenen
P2
Tegels
P2
Bakstenen
P2
Beton
P3
Dakpannen
P2
Dakpannen
We willen weten:
Wie leverde beton voor project 2
Voor welk project waren de dakpannen van Maes
Deze verbanden laten deze analyse niet toe
--> er is een gebrek aan informatie
- PROJECT-LEVERANCIER geeft te weinig informatie: er zijn meerdere producten per combi
- PROJECT-PRODUCT geeft te weinig informatie: er zijn meerdere leveranciers per combi
- LEVERANCIER-PRODUCT geeft te weinig informatie: er zijn meerdere projecten per combi
Zo kan je geen antwoord geven op wie leverde beton voor project 2
Maes leverde namelijk Beton en Dakpannen en levert aan project 2 en 3
Peeters leverde beton en dakpannen en levert aan project 2
Zo kan de beton van project 2 afkomstig zijn van Peeters en Maes of van Peeters alleen, want het kan
ook zijn dat Maes enkel dakpannen leverde aan project 2 en beton aan project 3
Hetzelfde probleem kennen we bij de vraag voor welk project waren de bakpannen van Maes
Maes levert beton en dakpannen die terecht komen bij project 2 en/of project 3
Het kan zijn dat de dakpannen terecht komen bij project 2 of bij project 2 of bij project 2 en 3
! Binaire verbanden laten geen correcte waargave v/h probleemdomein weer
Er is ook een probleem van consistentie: het zou idealiter zijn wanneer de leveranciers v/e project
overeenkomen met de leveranciers van de producten die gebruikt worden in het project
Daarom is het beter in dit geval te werken met een drie-wegs-verband tussen PROJECT,
LEVERANCIER en PRODUCT
We gebruiken een UML-model:
PROJECT
gebruikt -> [0..*]
[0...*] <- gebruikt door
PRODUCT
levert aan -> [0..*]
LEVERANCIER
9
Jeroen De Koninck – HIRB – 2012-2013
Via UML zijn er meer dan twee association ends voor 1 associatie mogelijk
Any association may be drawn as a diamond (larget than a terminator on a line) with a solid line for
earch association memberEND connecting the diamond to the Classifier that is the end’s type. An
association with more than two ends can only be drawn this way
Via dezelfde terminologie kan men cardinaliteiten als volgt interpreteren:
For an association with N memberEnd, choose any N-1 ends and associate specific instances with
those ends. Then the collection of links of the association that refer to these specific instance will
identify a collection of instances at the other end. The multiplicity of the other end constraint the size
of this collection. IF the other end is marked as isOrdered, this collecition will be ordered. If the other
end is marked is marked as isUnique, this collection is a set, otherwise, it allows duplicate elements
Men kan dit gaan vertalen naar de wiskunde:
Gegeven een verband R ⊆ (A1 x A2 x ... An)
Voor elke Ai definiëren we een verband ri als volgt:
ri: A1 x ... x Ai-1 x Ai+1 x ... x An -> Ai : (a1, ..., ai-1, ai+1, ... an) -> ai
Een verband ri wordt gevormd door de klasse af te beelden op een andere klasse
--> men gaat het object van de klasse afbeelden op een object v/d andere klasse
ri verplicht ⇔ ∀ (a1, ..., ai-1, ai+1, ... an) ∈ (A1 x ... x Ai-1 x Ai+1 x ... x An) ∃ ai ∈ Ai: (a1, ..., ai-1, ai+1, ... an) ∈ R
Het verband is verplicht als er voor elk object uit een klasse een element bestaat ui een andere klasse
zodat dit object uit de andere klasse behoort tot de relatie
ri cardinaliteit max. 1 ⇔ |{(a1, ..., ai-1, ai+1, ... an) ∈ (A1 x ... x Ai-1 x Ai+1 x ... x An) | (a1, ..., ai-1, ai+1, ... an)
∈R≤1
Er is ook een andere benadering mogelijk
--> men gaat vertrekking van een object uit een klasse
Er men ziet hoeveel tupels (eindige sequentie objecten) er met dat ene object overeen komen
Men kan dit gaan vertalen naar de wiskunde:
Gegeven een verband R ⊆ (A1 x A2 x ... An)
Voor elke Ai definiëren we een verband ri als volgt:
ri: A1 x ... x Ai-1 x Ai+1 x ... x An : ai -> (a1, ..., ai-1, ai+1, ... an)
ri verplicht ⇔ ∀ ai ∈ Ai : ∃ (a1, ..., ai-1, ai+1, ... an) ∈ (A1 x ... x Ai-1 x Ai+1 x ... x An):(a1, ..., ai-1, ai+1, ... an) ∈ R
ri cardinaliteit max. 1 ⇔ |{(a1, ..., ai-1, ai+1, ... an) ∈ (A1 x ... x Ai-1 x Ai+1 x ... x An) | (a1, ..., ai-1, ai+1, ... an)
∈R≤1
! We gebruiken voor concepten steeds de UML-interpretatie
--> vertrekken vanuit alle behalve 1 klasse en kijken hoeveel objecten we vinden
10
Jeroen De Koninck – HIRB – 2012-2013
Zo krijgen we voor het voorbeeld:
gebruikt: PROJECT x LEVERANCIER -> PRODUCT
Dit voorbeeld modelleert:
--> hoeveel producten er met een bepaald (project, leverancier) combinatie overeenkomen
Het verband is verplicht indien er voor elk (project, leverancier) combinatie er minstens één product
gebruikt is
Het verband heeft een cardinaliteit many indien er in een (project, leverancier) combinatie mogelijks
meerdere producten producten die voor die combinatie gebruikt zijn
3.5.2 Associatie van een klasse
Soms gaat men het verband tussen twee klassen modelleren als een klasse
We nemen een voorbeeld van hotelreservaties:
Het is een many-to-many verband tussen een kamer en een persoon
We hebben een verband in twee richtingen: reserveren en gereserveerd door
- Een persoon kan nul, één of meerdere kamers reserveren
- Een kamer kan gereserveerd zijn door nul, één of meerdere personen
KAMER
PERSOON
<- Reserveert
[0...*]
Gereserveerd door
[0..*]
In de kamer reserveert ⊆ PERSOON x KAMER komt elke combinatie (p, k) met p ∈ person en k ∈
kamer, slechts 1 maal voor
Is bovenstaande stelling: elke reservatie wordt uniek geïdentificeerd door de persoon en de kamer
--> is dit correct?
Neen, in sommige gevallen geeft de identiteit v/d deelnemende objecten geen unieke identificatie
v/d relatie. Zo kan dezelfde persoon dezelfde kamer op meerdere tijdstippen boeken
De reservatie wordt dan niet uniek geïdentificieerd door de persoon en de kamer
--> wel door een bijkomend element zoals de startdatum en de einddatum v/d reservatie
Men noemt dit een associatie en gaat deze zelf modelleren als een klasse aan het verband
Soms kan men wel uniek identificeren, maar zijn associaties toch handig als bijkomende informatie
--> deze geeft men ook weer in een klasse
KAMER
PERSOON
RESERVATIE
datum_van
datum_tot
Klassen moeten steeds een betekenisvolle naam krijgen
11
Jeroen De Koninck – HIRB – 2012-2013
Sommige associaties gaat men quasi als standaard modelleren in de vorm van een klasse:
- Many-to-many verbanden: men gaat bij deze relationele database het mode normaliseren
--> Many-To-Many verbanden gaat men bijgevolg omzetten naar een klasse
! Voor oorspronkelijk deelnemende klasse geldt als unieke identificatie v/h element in de
associateklasse
! Steeds nagaan of men bijkomende attributen moet opnemen
(kunnen noodzakelijk zijn voor de identificatie v/d elementen in de associatieklasse
Voorbeeld: de reservatieklasse
- N-aire verbanden (met N > 2), dit is ook standaard door de praktijk van databaseontwerp
--> relationeel model heeft enkel binaire verbanden
(men zet daarom n-aire verbanden om naar een klasse)
Voorbeeld: een gebruikt product behoort tot een project, een product en komt v/e leverancier [1]
ZIE SCHETST PAGINA 24 BOVENAAN
Men introduceert een vorm van complexiteit
Wanneer we een associatie opnemen als een klasse, zal en deze opnemen als volwaardige klasse
KAMER
[1]
[1]
[0..*]
RESERVATIE
PERSOON
[0..*]
3.5.3 Aggregatie en compositie
Aggregatie en compositie zijn soorten associaties
Men heeft verschillende soorten aggregaties:
- GEEN: er zijn geen betekenisvolle aggregaties
- GEDEELD: er zijn gedeelde betekenisvolle aggregaties
- COMPOSITIE: er zijn betekenisvolle aggregaties met een verantwoordelijke functie voor het
bestaan en de opslag van in verband gelegde objecten
Wanneer de compositie wordt verwijderd, zullen alle samengestelde objecten verdwijnen
Een samengesteld object verwijderen resulteert niet in een verwijderde compositie
! De interpretatie kan van gebruiker tot gebruik verschillen
! Een model met aggregatie heeft geen eenduidige betekenis
--> daarom wordt dit ook afgeraden
Ook een compositie is niet aangeraden
Men kan deze enkel gebruiken bij goede afspraken over:
- de betekenis aan de gedragszijde
- de implicaties aan de gedragszijde
Zo moet men afspreken wat er gebeurd met de onderdelen indien men het geheel verwijderd
12
Jeroen De Koninck – HIRB – 2012-2013
3.6 HERGEBRUIK EN OVEREVERING
3.6.1 Definitie
Men kan specificaties hergebruiken
--> de manier hiervoor komt uit de manier waarop men code herbruikt bijobjectgerichte
programmeertalen
! Soms zijn er een aantal klassen met sterke gelijkenissen
Deze gelijkenissen kunnen we capteren via een overkoepelende algemene klasse te definiëren
--> deze omschrijft de gemeenschappelijke eigenschappen
De oorspronkelijke (meer gespecialiseerde) klassen erven de eigenschappen v/d algemene klassen
--> ze verfijnen de definitie v/d algemene klasse door bijkomende eigenschappen te definiëren
We gebruiken deze manier van werken o.a. bij programmeren
--> hiermee vermijden we het herschrijven van dezelfde code
De algemene klasse bevat de gemeenschappelijke code
De gespecialiseerde klasse voegt aan deze geërfde code de nodige eigen code toe
Deze notie van generalisatie-specialisatie is nauw verwant met het concept van taxonomie
Taxonomie: wordt ondermeer gebruikt om dieren te categoriseren
Voorbeeld:
Op het hoogste niveau onderscheidt men gewervelde en ongewervelde dieren
Een niveau lager deelt men in categorieën (zoogdieren, vogels, vissen, ...)
Deze categorieën verfijnt men tot erg nauwkeurige subcategorieën
Wiskundig: men heeft een verzameling die men steeds meer opdeelt in deelverzamelingen
Men gebruikt deze strategie ook bij software ontwikkeling:
ZIE SCHETS PAGINA 27
Bij software is niet elke klasse zomaar een subklasse
--> men probeert nl. het probleemdomein weer te geven en het het oplossingsdomein te laten
beschrijven
Het model moet men kunnen omzetten naar code
Hierdoor moet het model de principes van overerving op het niveau v/d code respecteren
Bij de definiëring v/e variabele bij programmeer-code
--> de variabele dient als placeholder voor elementen v/d verzameling
(dit voor elementen die overeenkomen met het type v/d variabele)
Voorbeeld in de declaratie:
d: DIER (eiffel)
DIER d (java)
DIER verwijst naar de klasse (verzameling dieren)
d kan gelijk welk element van de klasse bijhouden
! Een variabele kan vaak niet zomaar twee types tegelijk bezitten (er zijn dan twee variabelen)
13
Jeroen De Koninck – HIRB – 2012-2013
Vaak kan het ook niet zomaar dat een variabele van type kan veranderen
Voorbeeld:
We hebben een verzameling dieren met deelverzamelingen ZOOGDIER, VOGEL en VIS
Volgens deze structuur kan een dier nooit tegelijk ZOOGDIER en VIS zijn
Volgens deze structuur kan een dier nooit van deelverzameling veranderen
Een vogel wordt geen vis na verloop van tijd
Bij klassendiagramma’s gebruiken we generalisatie-specialisatie dus best als:
- We geen overlappende subklassen hebben
- Elementen voor de duur van hun leven tot dezelfde subklasse behoren
! Bij overlappende subklassen, moet men de opdeling herbekijken
! Elementen die van klasse veranderen, kan men beter modelleren volgens rollen
Zo kan men gedragsaspecten beter modelleren a.d.v.:
- operaties
- toestanden
- toestandsovergangen
Volgende redenen zijn geen goede redenen om subklassen te definiëren:
- Deelnemen aan een verband met een andere klasse
Voorbeeld: personen indelen volgens hun al dan niet bezit v/e wagens
- Opdelen v/e klasse in functie v/d waarde v/e bepaald attribuut
Voorbeeld: dure auto’s versus goedkope auto’s
- Opdelen v/e klasse in functie v/d toestand v/h object
Voorbeeld: betrouwbare en onbetrouwbare betalers
De reden is dat deze elementen van subklasse zullen veranderen
Principe van inheritance (overerving) wordt afgeraden
3.6.2 Overerving van verbanden
Generalisatie-specialisatieverband tussen twee klassen: de gespecialiseerde klasse erg alle
eigenschappen v/d generalisatie-klasse
Men erft dus v/d generalisaties alle:
- attributen
- associaties
3.7 OCL CONSTRAINTS
3.7.1 Algemeen concept
In UML gebruiken we verschillende technieken voor het specificeren v/e probleemdomein
In de cursus specificeren we het probleemdomein via:
- Klassendiagamma
- FSM’s
- Object Event Tabel
--> samen vormen ze de (volledige) specificatie v/h probleemdomein
14
Jeroen De Koninck – HIRB – 2012-2013
Alle schema’s leggen een aantal beperkingen rond de geldigheid v/d informatie op
Voorbeeld:
Indien we in een klassediagramma een verband verplicht maken (bijvoorbeeld elke gift is door een
persoon), dan kan het informatiesysteem geen informatie registreren als men niet voldoet aan deze
voorwaarde wordt voldaan
(zo kan men de gift niet registreren zonder de persoon die hem deed te registreren)
Via constaints of beperkingen kan men de correctheid v/d geregistreerde informatie bewaken
Elk UML-schema laat enkele constraints toe om te registreren
Voorbeeld:
- In een klassendiagramma bepalen we de verbanden v/d klassen
--> we kunnen beperkingen opleggen a.d.v. cardinaliteit
- In FSMs kunnen we beperkingen opleggen aan de volgorde waarin events en de bijhorende
actie mogen optreden
3.7.2 Tips bij het formuleren van constaints
Via OCL bouw je booleaanse uitdrukkingen, ze kunnen dus een TRUE/FALSE waarde aannemen
Men verwijst naar klassen en attributen (eventueel ook operaties) uit een klassenschema
Men kan het tijdstip bepalend waarop je een booleaanse uitdrukking wil evalueren
--> hier wordt bepaalt of het over een preconditie of een invariantie gaat
Invariantie: is gekoppeld aan een klasse en moet op elk ogenblik waar zijn
--> controle bij manipulatie aan de klasse
Preconditie: is gekoppeld aan een operatie en wordt gecontroleerd voor het uitvoeren v/d operatie
--> is het resultaat TRUE: de operatie wordt uitgevoerd
--> is het resultaat FALSE: de operatie wordt geweigerd
ZIE VOORBEELD PAGINA 31
Voorbeeld invariantie: een maximum aantal deelnemers
--> Hiervoor moet men bijvoorbeeld 5 tot 30 deelnemers hebben
Dit moet altijd waar zijn, de context is dus:
Context Stadsspel
self.maxAantalPersonen >= 5 and sel.maxAantalPersonen <=30
Stel dat er een optie uitschrijven is, zodat spelers zich kunnen uitschrijven voor de uiterste datum
Een preconditie zorgt ervoor dat men zich niet meer kan uitschrijven na datum
De controle gebeurt nl. op het moment v/d uitschrijving
De context is een klasse en een operatie
Men gaat deze klasse en operatie neerschrijven als:
Context Deelname
uitschrijven requires
today <= self.stadspel.uitersteDatumUitschrijving
15
Jeroen De Koninck – HIRB – 2012-2013
Voor het zelf schrijven van OCL constraints zijn er enkele tips:
- Men moet steeds een context geven (zonder context heeft self geen betekenis)
- De context moet een klassenaam zijn die in het klasseschema voorkomt
- Bij een preconditie moet men de naam v/d operatie opgeven waarop deze van toepassing
is
- De uitdrukking moet een booleeanse waarde geven als resultaat
- Men moet rekening houden met de cardinaliteiten waarlangs men navigeert
--> cardinaliteit many geeft een verzameling terug
--> cardinaliteit van 1 geeft een singleton
! Men moet letten op de bewerkingen die men toepast: niet elke bewerking kan men
uitvoeren (zo kan een vergelijking enkel op een singleton)
(hoeveelheid spelleiders v/e deelnemer)
- De OCL-expressie “uitdr1 includes uitdr2” vraagt dat uitdr1 een verzameling teruggeeft en
uitdr2 een element of een verzameling, in beide gevallen van hetzelfde type als de
verzameling gegeven door uitdr1
- Zoek naar een goed startpunt voor de navigatie (zie voorbeeld pagina 32)
- Lees goed de opgave “er moet een spelleider” is niet hetzelfde als “alle spelleiders moeten”
16
Jeroen De Koninck – HIRB – 2012-2013
Download