Nyanser i UML: roller för fler än programmerare

Min gästblogg den 7 mars handlade om tre grader av koppling mellan två klasser (på gränsen till avancerad UML), som i sin tur leder till koppling (länk) mellan objekt (pekare, referens, främmande nyckel, nästlat/dedicerat objekt, osv). Generalisering är en annan vanlig relation mellan klasser, men strukturerar enbart klassträdet – på objektnivå rör den sig inom ett och samma objekt (som instansieras från klassen och därmed klassens hela gren i klassträdet).
Till skillnad från de övriga tre relationerna medför alltså generalisering inte en länk mellan två objekt. I vanliga fall.
Mindre vanliga fall, i gränslandet mot avancerad modellering, särskilt multipelt arv (jfr. kurs T2715) resp multipel generalisering (T2716) är ofta praktiska att ersätta med association mellan klasser, vilket leder även till länk mellan olika objekt. Om vi tar multipelt arv som exempel, så ligger olika varianter av rollklasser nära till hands om man vill ersätta generaliseringarna med associationer. Hur ser skillnaden ut i UML?
Anta att en aktie i vårt system fungerar dels som ett värdepapper, dels som en röstsedel på bolagsstämman, och dels som säkerhet i kredithantering. Därmed kan Aktie ärva attribut och operationer från alla de tre övriga:
Bild 1:
Multipelt arv till Aktie.
Multipelt arv har både fördelar (främst för analytikern) och nackdelar (för arkitekten – plattformsberoende/portabilitetsproblem, och för designern – hantering av arvskonflikter mm). Rollklasser är ett smidigt alternativ (särskilt om det fanns även attribut i superklasserna, inte bara operationer). Klassen Aktie kopplas till de tre övriga – fast numera som rollklasser, inte längre superklasser (roller plockar dessutom ytterligare pluspoäng om objektlivscyklerna är viktiga – tillstånd och tillståndsövergångar hänger nämligen oftast ihop med roller). Märk väl att ingen av rollklasserna i diagrammet nedan (Bild 2) förblev abstrakt (ingen kursivering), dvs alla instansierar objekt: 

Bild 2:
Aktie med rollklasser ( «nyckelorden» och färgerna följer Peter Coad’s analysmönster DNC).
Rollklasser brukar påverka en vanlig arkitektur-tradeoff: de förbättrar portabilitet, modifierbarhet, återanvändbarhet, och ofta tillförlitlighet (4 små separata objekt i stället för 1 stort objekt av Aktieklassen), men, allt annat oförändrat, till priset av sämre prestanda under belastningstoppar (mätt i svarstider, antal transaktioner per sekund, och ”miss rate” dvs andel requests som inte fått plats i inkön). Inget jätteproblem på en bank som enkelt köper extrakapacitet löpande i molnet, men mer problematiskt för en rymd/flyg- eller fordonstillverkare där det är hård realtid som gäller samtidigt som minnes- och processorkapacitet ombord är begränsad. 
Ytterligare nyansexempel kommer i höst.

UML 2 Professional, OCUP Advanced Level (certifikatnivå 3 av 3)

Milan samarbetar med Informator sedan våren 1996 inom modellering, UML, arkitektur, 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.