Systemutvikling med UML - Institutt for teknisk kybernetikk - NTNU

Systemutvikling med UML - Institutt for teknisk kybernetikk - NTNU Systemutvikling med UML - Institutt for teknisk kybernetikk - NTNU

09.03.2014 Views

Systemutvikling med UML Øyvind Stavdahl Institutt for teknisk kybernetikk, NTNU Oktober 2004

<strong>Systemutvikling</strong> <strong>med</strong> <strong>UML</strong><br />

Øyvind Stavdahl<br />

<strong>Institutt</strong> <strong>for</strong> <strong>teknisk</strong> <strong>kybernetikk</strong>, <strong>NTNU</strong><br />

Oktober 2004


Denne kursbolken er basert på<br />

Martin Fowler, <strong>UML</strong> Distilled, Third Edition<br />

Addison-Wesley, 2004. ISBN 0-321-19368-7<br />

Stoffet er primært hentet fra<br />

kapittel 1-4 og 9-12


To ord om terminologi<br />

Norske ord og begreper bør brukes der de<br />

kan brukes<br />

• <strong>UML</strong> er et engelsk-basert<br />

modelleringsspråk.<br />

• Norske ord brukes her sporadisk når det<br />

er åpenbart hvilket <strong>UML</strong>-begrep vi snakker<br />

om


Innhold<br />

1. Intro til <strong>UML</strong><br />

SA/SD vs. <strong>UML</strong><br />

2. Funksjonskrav:<br />

Use case-diagram<br />

Sekvensdiagram<br />

3. ”In<strong>for</strong>masjons-rommet”:<br />

Klassediagram<br />

4. ”Tilstandsrommet”:<br />

Tilstandsmaskin<br />

Aktivitetsdiagram<br />

5. ”Funksjonsrommet”:<br />

Kommunikasjonsdiagram<br />

Andre <strong>UML</strong>-diagrammer<br />

6. Et lite eksempel<br />

Oppsummering


<strong>UML</strong>:<br />

Unified Modeling Language<br />

• Standardisert grafisk modelleringsspråk<br />

– Primært <strong>for</strong> programvaretunge systemer<br />

• Mange uavhengige og overlappende språk<br />

eksisterte<br />

• <strong>UML</strong> er en sammenstilling og <strong>for</strong>malisering av<br />

noen av disse


<strong>UML</strong> omfatter:<br />

1. En meta-modell<br />

– Rigorøs definisjon av <strong>UML</strong>begreper<br />

– Viktig ved bruk av <strong>UML</strong> som<br />

programeringspråk<br />

2. Grafisk notasjon <strong>for</strong> 13 ulike<br />

diagramtyper<br />

• Activity<br />

• Class<br />

• Communication<br />

• Component<br />

• Composite structure<br />

• Deployment<br />

• Interaction overview<br />

• Object<br />

• Package<br />

• Sequence<br />

• State machine<br />

• Timing<br />

• Use Case


”<strong>UML</strong> is Not Enough!”<br />

• <strong>UML</strong> - flere diagramer enn de fleste<br />

trenger<br />

• <strong>UML</strong> standardisert, systemer <strong>for</strong>skjellige<br />

– <strong>UML</strong> passer ikke alltid like godt<br />

• Bruk bare det du har nytte av!<br />

• Bryt reglene når det er nyttig!


Tre måter å bruke <strong>UML</strong> på<br />

1. <strong>UML</strong> som skisse<br />

2. <strong>UML</strong> som blåkopi<br />

3. <strong>UML</strong> som programmeringsspråk


1. <strong>UML</strong> som skisse<br />

Nøkkel: Selektivitet<br />

• Bare modellere det du trenger akkurat nå<br />

• Rask konkretisering av ideer<br />

• Sammenlikning av alternativer<br />

• Kommunikasjon<br />

– Kunder<br />

– Medarbeidere


2. <strong>UML</strong> som blåkopi<br />

Nøkkel: Kompletthet<br />

• Forward engineering:<br />

– Alle detaljer som programmereren trenger å<br />

vite<br />

• Backwards engineering:<br />

– Komplett grafisk ”innholds<strong>for</strong>tegnelse” <strong>for</strong><br />

systemet<br />

– Typisk automatisert prosess!


3. <strong>UML</strong> som programmeringsspråk<br />

Nøkkel: Modellen er systemet!<br />

• Systemmodellen utgjør kildekoden<br />

Ut<strong>for</strong>dringer:<br />

• Modellen må inneholder ALT<br />

• Lavnivå-algoritmer ofte modellert i tekstbaserte<br />

prog.-språk<br />

• Flere måter å modellere oppførsel på i <strong>UML</strong><br />

– Hvilke(n) skal brukes til programmering?


Denne kursbolken:<br />

Primært ”<strong>UML</strong> som skisse”<br />

• Myk start <strong>for</strong> nye <strong>UML</strong>-brukere<br />

• Bare de ”viktigste” diagrammene


Innhold<br />

1. Intro til <strong>UML</strong><br />

SA/SD vs. <strong>UML</strong><br />

2. Funksjonskrav:<br />

Use case-diagram<br />

Sekvensdiagram<br />

3. ”In<strong>for</strong>masjons-rommet”:<br />

Klassediagram<br />

4. ”Tilstandsrommet”:<br />

Tilstandsmaskin<br />

Aktivitetsdiagram<br />

5. ”Funksjonsrommet”:<br />

Kommunikasjonsdiagram<br />

Andre <strong>UML</strong>-diagrammer<br />

6. Et lite eksempel<br />

Oppsummering


Sammenliking av SA/SD og <strong>UML</strong><br />

• Utviklingsprosess uanvhengig av verktøy<br />

• Sammenlikner verktøyene i lys av et typisk<br />

prosess-rammeverk:<br />

– Analyse (spec., oppførselsmodell)<br />

– Konstruksjon (”byggebeskrivelse”)<br />

– Implementasjon (programmering)<br />

– Dokumentasjon (<strong>for</strong> systemvedlikehold)


Egenskapsrommet<br />

Én - av uendelig mange - måter å dekomponere<br />

systemets egenskaper på<br />

Funksjonsrommet<br />

(hva systemet skal gjøre)<br />

In<strong>for</strong>masjonsrommet<br />

(hva systemet må huske)<br />

Tilstandsrommet<br />

(hvordan systemet skal<br />

reagere)


Analyse: Omgivelser,<br />

overordnet funksjon (1/2)<br />

SA/SD:<br />

Kontekstdiagram<br />

<strong>UML</strong>:<br />

Use case-diagram<br />

tastatur<br />

kortautomat<br />

Bensinstyring<br />

Bensinkunde<br />

Fyll bensin<br />

pistolbryter<br />

display


Analyse: Omgivelser,<br />

overordnet funksjon (2/2)<br />

SA/SD:<br />

Hendelsesliste<br />

<strong>UML</strong>:<br />

Sekvensdiagram<br />

Kunde<br />

Kortautomat<br />

Bensinpistol


Analyse/konstruksjon (1/3):<br />

In<strong>for</strong>masjonsrommet<br />

SA/SD:<br />

Logisk datamodell<br />

<strong>UML</strong>:<br />

Klassediagram<br />

farge<br />

Bil<br />

eies av<br />

regNr<br />

Bil<br />

farge: String<br />

regNr: String<br />

eier<br />

Person<br />

Person


Analyse/konstruksjon (2/3):<br />

Tilstandsrommet<br />

SA/SD:<br />

Tilstandstransisjonsdiagram<br />

<strong>UML</strong>:<br />

Tilstandsmaskin<br />

(aktivitetsd, interaksjonsd.)<br />

S1<br />

S1<br />

Hendelse 2<br />

•Aksjon 2a<br />

•Aksjon 2b<br />

Hendelse<br />

•Aksjon 1a<br />

•Aksjon 1b<br />

Hendelse 2/Aksjon<br />

2a, Aksjon 2b<br />

Hendelse/ Aksjon 1,<br />

Aksjon 1b<br />

S2<br />

S2


Analyse/konstruksjon (3/3):<br />

Funksjonsrommet<br />

SA/SD:<br />

Dataflytdiagram<br />

<strong>UML</strong>:<br />

Kommunikasjonsdiagram<br />

Pros1<br />

Data1<br />

Data2<br />

Pros2<br />

2: data2<br />

Obj1<br />

Obj2<br />

1: Data1


Modellering av<br />

funksjonelle systemkrav<br />

...eller: hvordan finne ut hva kunden<br />

egentlig bestiller, hvordan hun tenker<br />

og hvordan hun ønsker å bruke<br />

systemet.


Innhold<br />

1. Intro til <strong>UML</strong><br />

SA/SD vs. <strong>UML</strong><br />

2. Funksjonskrav:<br />

Use case-diagram<br />

Sekvensdiagram<br />

3. ”In<strong>for</strong>masjons-rommet”:<br />

Klassediagram<br />

4. ”Tilstandsrommet”:<br />

Tilstandsmaskin<br />

Aktivitetsdiagram<br />

5. ”Funksjonsrommet”:<br />

Kommunikasjonsdiagram<br />

Andre <strong>UML</strong>-diagrammer<br />

6. Et lite eksempel<br />

Oppsummering


Use case-diagrammet<br />

Actor Association Use case<br />

Fyll bensin<br />

Bensinkunde


Use case = bruksmodus<br />

• Systemet tilbyr et antall funksjoner som er<br />

aktuelle <strong>for</strong> ulike <strong>for</strong>mål, til ulike tider og<br />

<strong>for</strong> ulike aktører<br />

•Hvert use case er én slik ”bruksmodus”<br />

Summen av alle use cases<br />

=<br />

hele systemets funksjonalitet


Eksempel:<br />

veggmontert elektrisk bryter<br />

Systemets grense<br />

Lysbruker<br />

Betjen<br />

<br />

Montér<br />

Montør


Actors<br />

En Actor representerer en rolle, ikke en<br />

entitet (person, system, fysisk enhet)<br />

• Samme entitet kan utgjøre flere Actors<br />

• Flere entiteter kan utgjøre samme Actor<br />

Alle slags entiteter kan være Actors<br />

•Personer<br />

• Systemer eller enheter


Use case-relevant in<strong>for</strong>masjon<br />

(1/2)<br />

Pre-conditions:<br />

Vilkår som må være tilfredsstilt <strong>for</strong> at use<br />

case’t kan starte<br />

Trigger:<br />

Hendelsen som starter use case’t


Use case-relevant in<strong>for</strong>masjon<br />

(2/2)<br />

Guarrantee:<br />

Det systemet vil garantere er oppfylt ved<br />

avslutningen av use case’t<br />

• Success guarrantee:<br />

Det som garantert er oppfylt etter et vellykket<br />

scenario<br />

• Minimal guarrantee:<br />

Det som er oppfylt etter et hvilket som helst<br />

scenario.


Tekstlig use case-beskrivelse.<br />

Eksempel: Montering av bryter<br />

Montér<br />

Pre-condition: Sikringen er tatt ut.<br />

Trigger: Kunde bestiller<br />

montering av bryter<br />

Suksess-scenario:<br />

1. Montør åpner bryterdekselet<br />

2. Montør fester bryteren til<br />

veggen<br />

3. Montør fester ledningene<br />

4. Montør lukker bryterdekselet<br />

5. Montør setter i sikringen<br />

6. Montør betjener bryteren og<br />

konstaterer at den virker<br />

Utvidelse:<br />

6a: Bryteren virker ikke<br />

.1: Montør fjerner sikringen<br />

... (kopler fra bryteren...)<br />

.n: Montør setter i sikringen<br />

Suksessgaranti:<br />

Bryteren montert og operativ.<br />

Minimal garanti:<br />

Alle strømførende ledninger<br />

isolert eller frakoplet,<br />

sikringen satt i.


Hvordan ikke bruke<br />

use case-diagrammet<br />

• Ikke bruk masse tid på å lage et<br />

”avansert” diagram!<br />

• Ikke prøv å synliggjøre alle spesialtilfeller<br />

• Ikke bruk ”avansert notasjon”<br />

KISS: Keep It Simple and Stupid!<br />

- Alt annet er bortkastet tid!


Hvordan bruke<br />

use case-diagrammet<br />

Betrakt diagrammet som en oversiktlig<br />

”innholds<strong>for</strong>tegnelse” <strong>for</strong> systemets<br />

funksjonalitet<br />

• Detaljene beskrives <strong>med</strong> tekst eller andre<br />

typer diagrammer<br />

• Dette er den verdifulle in<strong>for</strong>masjonen!


Innhold<br />

1. Intro til <strong>UML</strong><br />

SA/SD vs. <strong>UML</strong><br />

2. Funksjonskrav:<br />

Use case-diagram<br />

Sekvensdiagram<br />

3. ”In<strong>for</strong>masjons-rommet”:<br />

Klassediagram<br />

4. ”Tilstandsrommet”:<br />

Tilstandsmaskin<br />

Aktivitetsdiagram<br />

5. ”Funksjonsrommet”:<br />

Kommunikasjonsdiagram<br />

Andre <strong>UML</strong>-diagrammer<br />

6. Et lite eksempel<br />

Oppsummering


Sekvensdiagrammet


Hva sekvensdiagrammet<br />

viser<br />

• Hvordan en gruppe objekter samarbeider<br />

<strong>for</strong> å realisere en oppførsel<br />

• Deltakerne i et scenario (sub-sett av et<br />

use case)<br />

• Sekvensen og naturen i<br />

meldingsutvekslingen mellom deltakerne<br />

• Deltakernes livsløp


Notasjonen er nesten<br />

selv<strong>for</strong>klarende…


Synkrone vs. asynkrone meldinger<br />

Synkron:<br />

Senderen må vente til<br />

meldingen er ”utført”<br />

(typisk: metodekall)<br />

Gammel<br />

notasjon<br />

Sender<br />

Ny<br />

notasjon<br />

Sender<br />

Mottaker<br />

Mottaker<br />

Asynkron:<br />

Senderen <strong>for</strong>tsetter<br />

så snart meldingen er<br />

sendt<br />

(typisk: meldingskø)


Hva sekvensdiagrammet<br />

ikke viser<br />

…iallfall ikke så veldig godt:<br />

• Løkker (loops, ”while…”)<br />

• Alternativer (conditionals; ”if…”, ”switch...”)<br />

…og alt annet som ikke går i ren sekvens.


Loops and Conditionals


Hvordan (ikke) bruke<br />

sekvensdiagrammet<br />

Illustrere scenarier<br />

• Ikke komplette/komplekse algoritmer<br />

• Ikke <strong>for</strong> presis oppførselsemodellering<br />

Unntak finnes<br />

• Sekvensielle algoritmer<br />

• Bilateral kommunikasjon (protokoller)


Fra funksjonelle krav til<br />

detaljert oppførsel<br />

...eller: fra eksternt til internt<br />

perspektiv.


Funksjonrommets<br />

”ortogonale dimensjoner”<br />

Funksjonsrommet<br />

(hva systemet skal gjøre)<br />

In<strong>for</strong>masjonsrommet<br />

(hva systemet må huske)<br />

Tilstandsrommet<br />

(hvordan systemet skal<br />

reagere)


Innhold<br />

1. Intro til <strong>UML</strong><br />

SA/SD vs. <strong>UML</strong><br />

2. Funksjonskrav:<br />

Use case-diagram<br />

Sekvensdiagram<br />

3. ”In<strong>for</strong>masjons-rommet”:<br />

Klassediagram<br />

4. ”Tilstandsrommet”:<br />

Tilstandsmaskin<br />

Aktivitetsdiagram<br />

5. ”Funksjonsrommet”:<br />

Kommunikasjonsdiagram<br />

Andre <strong>UML</strong>-diagrammer<br />

6. Et lite eksempel<br />

Oppsummering


”In<strong>for</strong>masjonsrommet”: Klassediagram


Klasse<br />

Navn<br />

Attributter<br />

Operasjoner<br />

BankKunde<br />

- navn: String<br />

- konto: KontoNummer<br />

- pinKode: Kryptert<br />

+ hentNavn(): String<br />

+ hentKontoNr(): KontoNummer<br />

+ sjekkPinKode(pin: PinKode): Boolean


Klassers egenskaper (Properties)<br />

- to varianter:<br />

Attributter<br />

• ”Member-variable”<br />

Assosiasjoner<br />

• ”Referanser” (i<br />

praksis pekere etc.) til<br />

andre klasser<br />

• Inneholder det direkte<br />

in<strong>for</strong>masjonsinnholdet<br />

i klassen<br />

• In<strong>for</strong>masjon relatert til<br />

klassen selv, men<br />

inneholdt i de<br />

assosierte klassene


Eksempel:<br />

attributt vs. assosiasjon<br />

Bil<br />

farge: String<br />

regNr: String<br />

*<br />

eier<br />

0..1<br />

Person<br />

navn: String<br />

personNr: Integer<br />

adresse: AdrType<br />

Attributt<br />

Assosiasjon<br />

Begge klassene utviser egenskaper som er<br />

relevante <strong>for</strong> Bil.


Hva er <strong>for</strong>skjellen...?<br />

farge<br />

regNr<br />

Bil<br />

eier<br />

0..1<br />

navn<br />

Person<br />

Bil<br />

farge<br />

regNr<br />

eierNavn<br />

”An attribute is the ghost of a class without attributes”


Forskjellen er...<br />

Attributter:<br />

”små” egenskaper (elementære datatyper)<br />

Assosiasjoner:<br />

mer signifikante ”ting” (egenskaper) som har<br />

sine egne attributter


Notasjon<br />

Tenk ”variabeldeklarasjon”.<br />

Generell notasjon:<br />

visbility name: type multiplicity = default {property-string}<br />

– Kun name er obligatorisk<br />

Noen raske eksempler:<br />

+ farge: String [1..*] = ”sjokkrosa”<br />

- pinKode: Digit [4]


Notasjon - Visibility<br />

+ Public, dvs synlig uten<strong>for</strong> klassen<br />

- Private, dvs. usynlig uten<strong>for</strong> klassen<br />

m.fl.<br />

Eksempel:<br />

- pinKode: Digit [4]


Notasjon - Type<br />

Igjen: tenk ”variabeldeklarasjon”.<br />

Type angir hva slags data som kan<br />

inneholdes i attributten<br />

(type er irrelevant <strong>for</strong> assosiasjoner)<br />

Eksempel:<br />

alder: Integer<br />

finished: Boolean


Notasjon - Multiplisitet<br />

1 Nøyaktig én<br />

0..2 0, 1 eller 2<br />

* 0 eller flere<br />

Ingen multiplisitet angitt => 1<br />

Eksempler:<br />

Person<br />

barn<br />

*<br />

hender: Hånd [0..2]<br />

hår: Hårstrå [*]<br />

ektefelle<br />

0..1


Angir tilleggsegenskaper:<br />

Notasjon –<br />

Property-string<br />

readOnly<br />

ordered<br />

osv.<br />

Kan ikke endres<br />

Ordnet mende (dvs.<br />

elementenes rekkefølge fast)<br />

Eksempel:<br />

navn: String = ”Nemo” {readOnly}


Bidireksjonelle assosiasjoner (1/2)<br />

Person<br />

eier<br />

0..1<br />

*<br />

Bil<br />

Merk to ”navigerbarhespiler”<br />

To egenskaper som er <strong>for</strong>bundet som<br />

”inverse”:<br />

• Person har egenskapen<br />

biler: Bil [*]<br />

• Bil har egenskapen<br />

eier: Person [0..1]


Bidireksjonelle assosiasjoner (2/2)<br />

Person<br />

eier<br />

0..1 *<br />

Bil<br />

Hvor<strong>for</strong>?<br />

Begge klasser avhenger av tjenester fra<br />

den andre<br />

Spesiell praktisk ut<strong>for</strong>dring:<br />

Synkronisering – begge ”referansene” må<br />

være gyldige til enhver tid


Operasjoner<br />

Tenk ”metodedeklarasjoner”.<br />

Generell notasjon:<br />

visbility name (parameter list): return-type {property-string}<br />

Eksempel:<br />

+ sjekkPinKode(pin: PinKode): Boolean {query}


Notasjon - Property-string<br />

Property-string angir tillegsegenskaper <strong>for</strong><br />

operasjonene:<br />

query<br />

modifier<br />

osv.<br />

Endrer ikke klassens tilstand<br />

Endrer klassens tilstand<br />

Eksempel:<br />

+ sjekkPinKode(pin: PinKode): Boolean {query}<br />

+ settPinKode(pin: PinKode): Boolean {modifier}


Til ettertanke<br />

• Omverdenen aksesserer ofte properties<br />

via aksessorer (query-operasjoner).<br />

• Den som kaller aksessoren kan ikke<br />

avgjøre om den mottar eksplisitt lagrede<br />

data eller beregnede data.<br />

• Det er mao. i utgangspunktet ingen direkte<br />

korrelasjon mellom <strong>UML</strong>-begrepene og<br />

programkoden.


Til etterlevelse<br />

...der<strong>for</strong> bør du (utviklingsteamet, bedriften)<br />

etablere en praksis som definere en slik<br />

korrespondanse.<br />

Dette kan bety at du bevisst gjør en<br />

begrenset tolkning av <strong>UML</strong>, og at du kun<br />

benytter et subsett av notasjonen.


Notasjon - Generalisering<br />

Arv i <strong>UML</strong><br />

Person<br />

Kvinne<br />

Mann<br />

Frimurer


Avhengighet (Dependency)<br />

Client Supplier<br />

Sirkeline<br />

<br />

Trigonometrix<br />

dependency<br />

Scenario: Sirkeline lager sirkler. Til dette trenger<br />

hun funksjonalitet som Trigonometrix tilbyr.<br />

• Hvis Trigonometrix <strong>for</strong>andrer oppførsel, kan<br />

dette få følger <strong>for</strong> Sirkeline slik at hun også må<br />

endre seg.<br />

• Trigonometrix er derimot helt uavhengig av<br />

Sirkeline.


Vær uAvhengig!<br />

<strong>UML</strong> 2.0 definerer 10 ulike Dependencies...<br />

• Fare: Overlessede diagrammer<br />

• Vis bare signifikante relasjoner<br />

• Evt. egne diagrammer <strong>med</strong> fokus på<br />

avhengigheter<br />

• Som skapt <strong>for</strong> automatisk reverse<br />

engineering!!!


Hva så <strong>med</strong> alt det andre...?<br />

Constraint Rules: I <strong>UML</strong> kan du skrive hva som<br />

helst i diagrammet, på et hvilket som helst språk,<br />

bare du setter det i krøllparentes:<br />

{korrekthetssjekk: alder>0 år}<br />

Dessuten har vi ”kommentarboksen”:<br />

Se opp <strong>for</strong><br />

runde <strong>for</strong>mer!<br />

Sirkeline

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!