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)
Huvudförfattare
UML
Xtra Light: How to Specify Your SW Requirements
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.