INF1010 UML Marit Nybakken marnybak@ifi.uio.no 26. januar 2004 Liten tolkning av UML-kapittelet i læreboka. 1 UML-diagrammer Det finnes mange forskjellige typer UML-diagrammer for å dokumentere og planlegge programmer og datasystemer. I dette kurset bruker vi to, klassediagrammer og objektdiagrammer. I boka kan det se ut som om det er fjorten forskjellige diagrammer å velge mellom, men det er faktisk bare to. Det ser ut som om det er flere fordi det gis ulike nivåer av informasjon i diagrammene. Noen ganger ønsker man å vise alle metoder og variable en klasse inneholder, andre ganger er det bare navnet på klassen og forholdet mellom den og andre klasser som er viktig. Klassediagrammer Uten variable og metoder Ønsker vi kun å vise hvilke klasser som er med og hvilke forhold det er mellom dem (en bananfarm har mange banantrær, et banantre har mange bananer), 1
Figur 1: Klassediagram, kun relasjoner kan vi bruke et enkelt klassediagram som viser relasjoner, som i figur 1. Her tegner vi en boks for hver klasse med navnet på klassen inni. For hvert par av klasser der vi har et en-til-en, en-til-mange eller mange-til-mange-forhold tegner vi en linje mellom boksene og angir forholdene. Disse kan angis slik: 1 : en * : mange (kan også være 0) 1..* : mange (minst 1) 3..* : mange (minst 3) 1,2,3 : 1, 2 eller 3 Med variable og metoder Ønsker vi å dokumentere nærmere innholdet i de forskjellige klassene, kan vi også ta med variable og metoder, slik som i figur 2. Vi kan fremdeles angi relasjonene mellom klassene. Slik tegner man inn variable og metoder i klassediagrammene: Variable Bare klasse- og objektvariable skal tegnes inn. Klassevariable (statiske variable) skal ha strek under seg. For hver variabel sier vi 2
Figur 2: Klassediagram, full pakke om variabelen er public (+), private (-) eller protected (#). navnet til variabelen hvilken type variabelen er antall verdier variabelen referer til. For arrayer og hashmaps blir dette flere. For vanlige variable blir det bare 1, og da kan man droppe å si noe om det hvis man vil. [+ - #] variabelnavn[antall] : type Eksempler: - navn[1] : String - ID[1] : String - kurs [1..*] : Kurs Har klassen en array eller HashMap med Kurs-objekter, forteller vi altså ikke dette, vi angir bare at variabelen kurs peker på en mengde av Kurs-objekter ved å la antall være 1..*. Vi tegner altså aldri inn HashMaps og arrayer i klassediagrammer. 3
Figur 3: Objektdiagram, kun relasjoner Metoder Vi tar som oftest bare med de metodene som er public. Her må vi også ta med navn, og vi kan si hva slags returverdi metoden har. Parametre angis ikke. [+ - #] metodenavn() : returverdi Eksempler + meldpåkurs() : void + lunsjtid() : boolean + taenturpåpuben() : void Objektdiagrammer Et objektdiagram er et snapshot av programmets tilstand en eller annen gang under kjøring når vi har laget alle objektene. Objektdiagrammer skiller seg fra klassediagrammer ved at vi ikke tar med metodene 4
ikke tar med klasser det ikke lages objekt av tegner inn eventuelle arrayer og HashMaps setter kolon foran og strek under klassenavnet kan gi eksempler på hva variablene kan inneholde Å tegne inn arrayer og HashMaps er så vidt jeg vet ikke ekte UML, men det brukes i dette kurset. Uten variable Vi kan lage objektdiagrammer der kun objektene, pekerne og eventuelle arrayer og hashmaps er med, men der vi sløyfer variablene. Da viser vi hvordan objektene er knyttet til hverandre under kjøring (hvem peker på hvem og med hvilke pekere). Se figur 3. Har vi flere objekter av samme klasse, kan vi tegne et multiobjekt. Det gjøres ved å tegne ett objekt bak det andre objektet, som for Student og Lunsjobjektene. Med variable Vi kan ta med variable i objektdiagrammer også. Da forteller vi ikke hvilken type og modifikator de har, men vi kan gi eksempler på hva de kan inneholde. Se figur 4. variabelnavn = en mulig verdi antstudenter = 34 sangtittel = Jeg gikk en tur på stien pi = 3 5
Figur 4: Objektdiagram, full pakke 6