Avancerade objektmodeller innehåller en del nyanser som ett
ovant öga kan missa. Ett enkelt exempel (på gränsen till avancerat) är
”graderingen” av koppling mellan två klasser (association, aggregat, composition).
Är man inte mycket för att åskådliggöra men desto mer för affärsregler och
referensinteritetsregler, så skulle association plus olika regler kunna räcka
för alla tre graderna. Vad är det då för regler UML visualiserar med
graderingen?
Anta att du gjort modelleringsseminarier på tre olika
avdelningar hos en kund som sysslar med tåg. På alla tre gick det snabbt att enas
om att deras tåg har vagnar, men du vet av erfarenhet att tågdjävulen sitter i
detaljerna (det gick ju bra med Stockholm-Riksgränsen t/r på 1 biljett medan Stockholm-Uppsala
t/r med SL-tåg behövdes 4 biljetter per pers, osv...)
Därför ritar du ett tåg som aggregat (”har”, ”består av”,
mittersta bilden) av vagnar, till at börja med. När du kommer till punkten
Kluriga Frågor får du lite olika svar på olika avdelningar...
På den ena visar sig aggregatet stämma ganska bra:
livscyklerna (hos Tåg resp Vagn) överlappar under en lång tid, fast reglerna
verkar tänjbara, det är inte helt säkert om en vagn kan t ex. kopplas loss
under en kortare tid (och inte tillhöra något tåg just då). För
analytikerrollen betyder aggregat (mittersta
bilden) ”består av” utan särskilt tydliga regler. För utvecklaren ger den en
vink att en referens (Tåg – Vagn) kan passa bättre (än en nästlad klass i
Tågklassen).
På den andra, som sysslar med höghastighetståg, visar sig däremot
composition stämma bättre: deras nya säkerhetspolicy att anskaffning/avyttring
och översyn/reparation alltid gäller hela tågsätt får livscyklerna (Tåg resp
Vagn) att överlappa på livstid. Reglerna är tydliga, det är säkert att när t ex
ett Tåg tas bort i systemet så medför det att dess vagnar tas bort samtidigt. En
vagn måste alltid tillhöra något tåg. För analytikerrollen betyder composition (högra bilden) aggregat
plus strikta regler. För utvecklaren ger den en vink att en nästlad klass
(inuti Tåg-klassen) passar. För DBA-rollen betyder den en striktare
referensintegritetsregel (on Delete Cascade).
På den tredje, som sysslar med godsvagnsreskontra, passar association:
deras vagnar far kors och tvärs genom Europa, kopplas om mellan tåg på vägen,
ibland står de på något stickspår i Sydosteuropa i veckor (dvs tillhör inget
tåg alls under tiden) osv. Livscyklerna (Tåg resp Vagn) överlappar inte alls,
reglerna (eller snarare praxis) är tydliga, när Tåg tas bort i systemet så
medför det att dess vagnar finns kvar (och behöver inte tillhöra något tåg).
För analytikerrollen betyder association (vänstra bilden) en ganska lös
koppling utan tydlig hierarki. För utvecklaren ger den en vink att referens
fungerar (inte nästlad klass) och att tomma referenser förekommer. För
DBA-rollen betyder den oftast referensintegritetsregeln ”on Delete Set Null”.
Ytterligare nyansexempel (Generalisering) kommer under
senvåren.
konsult, Kiseldalen.com
UML 2 Professional, OCUP Advanced Level
(certifikatnivå 3 av 3)
Huvudförfattare
UMLXtra Light: How to Specify Your SW Requirements
Milan samarbetar med Informator sedan våren 1996 inom
modellering, UML, krav, analys och design. Håller f.n. kurser i Arkitektur,
i modellering (T2715,
T2716),
och i februari 2013 höll han också Informators fullsatta Frukostseminarium om användningsfall.
Skicka en kommentar
Trevligt att du vill dela med dig av dina åsikter! Tänk på att hålla på "Netiketten" och använda vårdat språk.