2007-05-22

UML Distilled: A Brief Guide to the Standard Object Modeling Language

Under hösten hade vi en föreläsningsserie om projekt- och systemutvecklingsmodeller på Avega. Under en av föreläsningarna fick alla deltagare göra ett test som visade sig ge svar på vilka inlärningsmetoder man var mest mottaglig för: visuella, hörsel, läsa/skriva eller "göra/prova på". Jag kommer inte ihåg exakt vilka värden jag hade, men jag hade i alla fall en tydlig preferens för läsa/skriva samtidigt som jag var minst mottaglig för visuella metoder som grafer och diagram. Kanske är det en förklaring till varför jag länge hade svårt att se nyttan med UML, Unified Modeling Language.

UML föddes 1997 genom ett enande (därav "unified") av de många objektorienterade grafiska modelleringsspråk som var populära under 80- och 90-talen. Grady Booch, Ivar Jacobson och Jim Rumbaugh brukar nämnas som UMLs skapare, men mycket av det faktiska arbetet har skett i kommittéer där långt fler givit viktiga bidrag. Mycket förenklat uttryckt är UML en familj grafiska notationer, uppbyggd av en enda meta-modell, som hjälper oss beskriva och designa mjukvarusystem, särskilt system som byggs med en objektorienterad ansats.

I den sista bisatsen ligger kanske en viktigare förklaring till min tidigare avoga inställning till UML: när jag inledde min karriär som Microsoft-, VB- och webbutvecklare var det inte precis i en objketorienterad metod jag fostrades. I takt med att jag rört mig från VB/ASP till C#/.NET, från webbutveckling till allt mer domänlogikutveckling och från konstruktion till allt mer design och arkitektur har ett objektorienterat angreppssätt blivit allt mer intressant, för att inte säga nödvändigt. Och då har också intresset för UML ökat.

För att fräscha upp mina UML-kunskaper, inte minst inom andra områden än klassdiagram, läste jag för en tid sedan Martin Fowlers "UML Distilled: A Brief Guide to the Standard Object Modeling Language, 3rd edition" (det är från denna bok den tidigare korta definitionen och historiken är hämtad). Fowlers bok är en kort (ca 150 sidor) och kärnfull genomgång av UML, inklusive en kort historik, ett avsnitt om utvecklingsprocesser och ett appendix om skillnader mellan olika UML-versioner.

Fowler identifierar tre olika sätt att använda UML: skiss ("sketch"), ritning ("blueprint") och programmeringsspråk ("programming language"). UML som skiss handlar om att kommunicera olika aspekter av ett system eller olika designidéer utvecklare emellan. Detta användningssätt är informellt, man tummar ofta på en del UML-regler och kompletterar med egna notationer.

UML som ritning bygger på idén om en designer som skapar en detaljerad design av systemet som sedan kodas av programmerare utan nämnvärd tankemöda. Sådan UML måste vara betydligt mer heltäckande och exakt än skissvarianten, kräver mer avancerade verktyg och kombineras ofta med någons sorts forward och/eller reverse engineering, d.v.s. verktyg som bygger kod av UML och vice versa.

UML som programmeringsspråk tar ritningen ett steg längre: all programmering sker via UML-diagram som kompileras av sofistikerade verktyg till körbar kod. UML-diagrammen blir källkoden. Här ställs naturligtvis höga krav på exakt följande av strikta UML-regler.

UML Distilled fokuseras framför allt på UML som skiss; det är Fowlers åsikt (liksom min egen) att ritningsvarianten är svår att utföra väl och att det inte är ett särskilt effektivt arbetssätt. Även om designer och kodare kan vara samma person känns det inte som ett särskilt agilt sätt att arbeta. UML som programmeringsspråk är en trevlig idé, men knappast något som kommer att få stort genomslag. Dessutom är det inte säkert att grafiska sätt är bättre än textuella för alla programmeringsuppgifter, menar Fowler.

Boken tar upp alla tretton officiella diagram i UML 2 (den senaste versionen), men tyngdpunkten ligger på klass- och sekvensdiagram som upptar nästan lika många sidor (ca 50) som de andra diagramtyperna tillsammans (ca 60). Det är dessa diagram som används mest i objektorienterad design och som man oftast stöter på i böcker, artiklar och dokumentation. Eller för att använda Fowlers ord, som också är ett bra exempel på hans stil:

"If someone were to come up to you in a dark alley and say, 'Psst, wanna see a UML diagram?' that diagram would probably be a class diagram."

Fowler beskriver inte bara notationen på ett förtjänstfullt sätt utan sätter in diagrammen i de sammanhang och på de sätt de ofta används i designarbete. Och han gör det så väl att många menar att UML Distilled också är en bra introduktion till objektorienterad metod. De formella notationerna kompletteras med Fowlers kunskap om informell praxis, både sådan som levt kvar från de gamla modeller som tillhörde "förlorarna" vid föreningen till UML och sådan som växt fram snabbare än kommittéerna hunnit med och därför antingen anses bättre än, eller ännu inte har någon motsvarighet i, UML-specifikationen. Han är inte heller rädd för att lyfta fram onödiga eller krångliga konstruktioner i UML eller påpeka hur oanvändbara vissa delar är:

"Aggregation is strictly meaningless; as a result, I recommend that you ignore it in your own diagrams."

UML Distilled är en bra och underhållande introduktion till såväl UML som objektorienterad metod. Den är kort och lätt att ta till sig. Om man huvudsakligen tänkt använda UML som skiss på det sätt Fowler beskriver är det här troligtvis den enda UML-bok man behöver. Om man har särskilda behov av fördjupning i andra diagram än klass- och skevensdiagram eller om man är intresserad av UML som ritning eller som programmeringspråk tjänar denna bok ändå som en bra utgångspunkt vare sig du är en nybörjare eller om du är en van UML-användare som behöver en repetition.

0 kommentar(er):