Nyanser i UML: Multipel generalisering

om att se skogen för bara träna.

Mitt blogginlägg den 26 maj handlade om varianter av generalisering i gränslandet mot avancerad modellering, främst då multipelt arv (jfr kurs T2715). Multipel generalisering (kurs T2716) nämnde jag kort, men höll mig ändå konsekvent till multipelt arv i mina exempel.

Multipel generalisering (flera ”generalization sets” dvs arvsträd som ärver samma basklass, så att träden delar samma rot) är på sätt och vis spegelvänt till multipelt arv (där ju samma subklass ärvde från flera superklasser).

Multipel generalisering löser ett problem för analytikern men smyger in ett annat för designern (på de flesta plattformarna). Anta att en analysmodell (version 0.9) av en flygplansflotta ser ut såhär:


Bild 1: Generalisering med ett varningstecken.

Ett första varningstecken är att klasser upprepar sig mellan grenarna i arvsträdet. Låt oss ta med två troliga kravändringar: nytt framdrivningssätt, plus ny tillverkare:


Bild 2: ”Plus” blev ”gånger”, och trädet närmar sig kombinatorisk explosion.

Om vi bortser från det enkla fallet där man har tur så att endast attributvärdena skiljer mellan de olika flygplansvarianterna (då blir de objekt av samma klass Flygplan, och vi slipper problemet ) så har vi, alternativt får i nya versioner, även operationer som skiljer dem åt, exempelvis fungerar reversera_jetstrålen inte på propeller, osv. Egentligen är trädet flera träd som man ”råkat” tvinga ihop. Lösningen för analytikern, och i undantagsfall designern, är uppdelning på flera träd med var sitt klassificeringskriterium. Dvs multipel generalisering:


Bild 3: Upprepningarna är borta, i stället delar två träd på samma basklass (rot).

Uppdelningen minimerar risken för kombinatoriskt kaos i samband med kravändringar, så analytikern, arkitekten, och de kravansvariga kan pusta ut. Men knappast designern... Vilken klass skall Boeing 767 (en jet) med nationalitetsbeteckningen SE-ABC nu bli objekt av, egentligen? Under mina årtionden som IT-konsult har det hänt i något enstaka fall att en udda/avancerad plattform verkligen klarat detta. Ett enkelt och generellt råd blir därför föga oväntat designmönster.

Vilket/vilka mönster (inklusive en ledtråd) klarnar i en kort övning på kursen Avancerad objektmodellering med UML som går den 11-13 mars (T2716). 



konsult, Kiseldalen.com
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 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.