o UML klassediagrammer

Like dokumenter
Metode for ansvarsdrevet OO med UML. Dagens forelesning. Hovedflyt for Meld på kurs. Delegering av ansvar i en trelagsarkitektur

Metode for ansvarsdrevet OO med UML. Dagens forelesning. Hovedflyt for Meld på kurs. Delegering g av ansvar i en trelagsarkitektur

Dagens forelesning. o Litt mer om design med UML sekvensdiagrammer. Sentralisert og delegert kontrollstil

UML klassediagrammer

Metode for ansvarsdrevet OO. Dagens forelesning. Delegering av ansvar i en trelagsarkitektur

Metode for ansvarsdrevet OO. Dagens forelesning. Delegering av ansvar i en trelagsarkitektur

Dagens forelesning. o Litt mer om design med UML sekvensdiagrammer. Sentralisert og delegert kontrollstil

Metode for ansvarsdrevet OO. Dagens forelesning. Delegering av ansvar i en trelagsarkitektur

Beskjed fra Skagestein

NB! Endring i undervisningsplanen

Spesifikasjon av Lag emne. Kursregistrering bruksmønstermodell. Dagens forelesning. Fra krav til objekter

Spesifikasjon av Lag emne. Kursregistrering g bruksmønstermodell. Dagens forelesning. Fra krav til objekter

Spesifikasjon av Lag emne. Kursregistrering bruksmønstermodell (ny versjon) Dagens forelesning. Fra krav til objektdesign

Fra krav til objektdesign

Ansvarsdrevet OO: CRC og UML Sekvensdiagrammer

Spesifikasjon av Lag emne

Kursregistrering bruksmønstermodell

Erfaringer fra våren Oppsummering: Hvordan utvikles et informasjonssystem? Noen eksamenstips, og litt teknikk Hvordan er eksamensoppgaven?

Erfaringer fra v2010 Oppsummering: Hvordan utvikles et informasjonssystem? Noen eksamenstips, og litt teknikk Hvordan er eksamensoppgaven?

OO Design, del 2. Oversikt over forelesningene. Metode for ansvarsdrevet OO Hva er et objekt. Uke 12: Fra sekvensdiagram til klasser

Oversikt over forelesningene. Fra analyse til objektdesign. Utfordringen i å lage OO-modeller. Metode for ansvarsdrevet OO. Uke 12: Ansvarsdrevet OO:

Kravspesifikasjon. Kravspesifikasjon. Mal for kravspesifikasjon. Hvordan finne fram til kravene? Hva skal systemet gjøre? Hvem og hva påvirker krav?

Kravspesifikasjon. Erik Arisholm. Simula Research Laboratory. Institutt for Informatikk. INF1050-krav-1

Kravspesifikasjon. Dagens forelesning. Mal for kravspesifikasjon. Hvordan finne fram til kravene? Kravspesifikasjon og objektorientert analyse

Persistens. Erik Arisholm. Institutt for informatikk Erik Arisholm INF1050-persistens-1

Fra krav til objekter. INF1050: Gjennomgang, uke 05

UML- Use case drevet analyse og design. Domenemodeller Sekvensdiagrammer Use case realisering med GRASP patterns Klassediagram - designmodeller

UML-Unified Modeling Language. Prosess-oversikt. Use case realisering

UML-Unified Modeling Language

Utvikling fra skallet og inn

Use Case-modellering. INF1050: Gjennomgang, uke 04

INF 1050 BRUK AV MODELLERINGSVERKTØYET RATIONAL ROSE

Objektorientert design av kode. Refaktorering.

Kravspesifikasjon med UML use case modellering. Erik Arisholm

INF1010 UML. Marit Nybakken 26. januar 2004

INF1000: Forelesning 7

UKE 13 Mer UML modellering. Gruppetime INF1055 Julie Hagen Nilsen & Maria Stolinski

Eksamen INF1050: Gjennomgang, uke 15

Objektorientering og UML. INF1050: Gjennomgang, uke 06

UKE 11 UML modellering og use case. Gruppetime INF1055

Use case drevet design med UML

UNIVERSITETET I OSLO

INF1000: Forelesning 7. Konstruktører Static

GJENNOMGANG UKESOPPGAVER 7 REPETISJON

I dag UML. Domenemodell visualisering av konsepter. Eksempel. Hvordan finne domeneklasser?

Dagsorden. Hovedtemaene i INF102. Fra kjernen og ut. Produksjon av informasjonssystemer. Produksjon av informasjonssystemer

Innhold. INF1000 Høst Unified Modeling Language (UML) Unified Modeling Language (UML)

GJENNOMGANG UKESOPPGAVER 6 MER OM OBJEKTORIENTERING OG UML

Satsvise, interaktive, sanntids/innbakte systemer. Arne Maus, Ifi. Oppdeling av både program og data på flere maskiner

UNIVERSITETET I OSLO

UML 1. Use case drevet analyse og design Kirsten Ribu

Mer om objektorientering og UML

UNIVERSITETET I OSLO

OPPGAVE 5b og 8b Java Kode

Arne Maus, Ifi. delvis lån av gamle foiler

Modellering av krav. INF1050: Systemutvikling 11. februar Universitetslektor Yngve Lindsjørn

Mer$om$objektorientering$og$UML

Gjennomgang av eksamen H99

Modellering av krav. INF1050: Systemutvikling 07. februar Førstelektor Yngve Lindsjørn

INF1010, 15. januar time. Parametriserte klasser (generiske klasser) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

IN2001: Kravhåndtering, modellering, design

UNIVERSITETET I OSLO

Etter uke 9 skal du. Introduksjon til objektorientert programmering. Innhold. Klasser som abstraksjoner

UNIVERSITETET I OSLO

(MVC - Model, View, Control)

UNIVERSITETET I OSLO

Mer om objektorientering og UML

UNIVERSITETET I OSLO

Kravspesifikasjon med. UML diagrammer. systemutvikling. Dokumentasjon av systemets krav, arkitektur, design og implementasjon

Kravspesifikasjon med. Erik Arisholm

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF1010, 21. januar Klasser med parametre = Parametriserte klasser = Generiske klasser

Læringsmål for forelesningen

UNIVERSITETET I OSLO

EKSAMEN I FAG TDT4100 Objekt-orientert programmering. Fredag 3. juni 2005 KL

Unified Modeling Language (UML) Kravspesifikasjon med UML use case modellering. UML diagrammer. Notasjon som støtter opp under modellbasert

IN2000:&Kravhåndtering,&modellering,&design

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

GJENNOMGANG UKESOPPGAVER 4 USE CASE MODELLERING HELGA NYRUD & KRISTIN BRÆNDEN

INF1050 Systemutvikling

Uke 8 Eksamenseksempler + Ilan Villanger om studiestrategier. 11. okt Siri Moe Jensen Inst. for informatikk, UiO

Enkle generiske klasser i Java

UNIVERSITETET I OSLO

INF1010 våren 2008 Uke 4, 22. januar Arv og subklasser

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

INF1000: noen avsluttende ord

Oppgave 1: Multiple choice (20 %)

Løsningsforslag til eksamen i INF1000 våren 2006

UNIVERSITETET I OSLO

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

Objektorientert design av kode. Refaktorering.

INF Forelesning oppsummering forts. Et meget enkelt banksystem. Oppsummering om klasser, objekter, pekere og.

Universitetet i Bergen Det matematisk-naturvitenskapelige fakultet Institutt for informatikk

INF Seminaroppgaver til uke 3

Introduksjon til objektorientert programmering

Konstruktører. Bruk av konstruktører når vi opererer med "enkle" klasser er ganske ukomplisert. Når vi skriver. skjer følgende:

UNIVERSITETET I OSLO

1 Introduksjon til designmodellen - del B 2

Transkript:

UML klassediagrammer Erik Arisholm INF050-klasser- INF050-klasser-2 Dagens forelesning o Litt mer om design med UML sekvensdiagrammer Sentralisert og delegert kontrollstil Resultater fra et eksperiment o UML klassediagrammer Notasjon: UML klassediagram og objektdiagram Metode: Fra sekvensdiagram til klassediagram INF050-klasser-3 INF050-klasser-4

Metode for ansvarsdrevet OO med UML Inf050 metoden (Iterativ): Analyse av krav () Identifiser aktører og deres mål (2) Lag et høynivå bruksmønsterdiagram (3) Spesifiser hvert bruksmønster tekstlig med hovedflyt og alternativ flyt Objektdesign For hvert bruksmønster: (4) Identifiser objekter og fordel ansvar mellom dem (CRC) (5) Lag sekvensdiagram for hovedflyt og viktige variasjoner Delegering av ansvar i en trelagsarkitektur Forretningsobjekter ( entity objects ) Kontrollobjekter ( control objects ) objekter ( boundary objects ) Hvor mye ansvar bør kontrollobjektene ha, og i hvilken grad bør vi bevisstgjøre forretningsobjektene våre?? (6) Lag klassediagram som tilsvarer sekvensdiagrammene (7) Lag til slutt klassediagram på systemnivå INF050-klasser-5 INF050-klasser-6 Hovedflyt for Meld på kurs Hovedflyt for Meld på kurs (Eksempel på Java kode for metoden meldpaa i en sentralisert kontrollstil) Objektet som returneres av finn Objektet som returneres av ::finn Objektet som returneres av finn public class MeldPaa { ok:=meldpaa(studentid, emnekode, semester) MeldPaa emnet: kurset: studenten: public boolean meldpaa(string studentid, String emnekode, String semester) { // antar at objektet universitetet er tilgjengelig: studenten = universitetet.finn(studentid); ok:=meldpaa(studentid, emnekode, semester) emnet = universitetet.finn(emnekode); Hovedflyt:. en velger emne 2. Systemet sjekker at studenten er kvalifisert til å ta emnet 3. Systemet finner kurset for emnet 4. Systemet sjekker om det er ledig plass på kurset 5. Systemet registrerer studenten på kurset CRC-kortene forteller deg hvilket objekt som skal motta en bestemt melding studenten:=finn(studentid) emnet:=finn(emnekode) forutsetter:=forutsetterr() kurset:=finn(semester) erledigplass:=ledigplass() paameldingok:=meldpaa(studenten) ermeldtpaa(kurset) boolean forutsetter = emnet.forutsetterr(); kurset = emnet.finn(semester); t boolean erledigplass = kurset.ledigplass(); boolean paameldingok = kurset.meldpaa(studenten); studenten.ermeldtpaa(kurset); return paameldingok; INF050-klasser-7 INF050-klasser-8

Hovedflyt for Meld på kurs (delegert kontrollstil: til og har overtatt tt mye av ansvaret fra kontrollobjektet) kt t) ok:=meldpaa(studentid, emnekode, semester) MeldPaa Ui itt ok:=meldpaa(studentid, emnekode, semester) studenten:=finn(studentid) emnet:=finn(emnekode) ok:=meldpaa(studenten, semester) emnet: kurset: studenten: t forutsetter:=forutsetterr() kurset:=finn(semester) ok:=meldpaa(studenten) erledig:=ledigplass() Hovedflyt for Meld på kurs (Eksempel på Java kode for metoden meldpaa i en delegert kontrollstil) public class MeldPaa { public boolean meldpaa(string studentid, String emnekode, String semester) { // antar at objektet universitetet er tilgjengelig: studenten = universitetet.finn(studentid); emnet = universitetet.finn(emnekode); boolean ok = emnet.meldpaa(studenten, semester); return ok; ermeldtpaa(kurset) INF050-klasser-9 INF050-klasser-0 (minutes) Mean Effort 0 00 90 80 70 Resultater fra et kontrollert eksperiment (*) Undergraduate Graduate Junior Intermediate Senior Design DC CC olutions % Correct S 00 50 0 Undergraduate Graduate Junior Intermediate Senior DC = Delegated Control Style CC = Centralized Control Style Totalt 58 Java-utviklere deltok, og skulle gjøre endringer på enten et DC eller et CC design alternativ for det samme systemet. Vi målte tid ( Mean Effort ) og kvalitet ( % correct solutions ) Kun seniorkonsulentene hadde klare fordeler av et delegert (DC) design Design DC CC Delegert vs sentralisert kontrollstil Sentralisert kontrollstil: o Lett å få oversikt over hva som skjer i et bruksmønster o Feilsituasjoner/variasjoner som krever tilbakemeldinger fra en aktør (via kantobjektene) kan enkelt håndteres av kontrollobjektet o Introduserer flere avhengigheter mellom kontrollobjekt og forretningsobjekter. Potensielt mindre gjenbrukbar/vedlikeholdbar kode Delegert kontrollstil: o Mer elegant objektorientert design, men: o Overdreven bruk av delegering gjør det vanskelig å få oversikt (spesielt dersom sekvensdiagrammer ikke er tilgjengelige!) o Litt mer komplisert å håndtere feilsituasjoner/variasjoner som krever tilbakemeldinger fra en aktør (siden all kommunikasjon med kantobjektene må gå via kontrollobjektene) * Erik Arisholm and Dag Sjøberg, Evaluating the Effect of a Delegated versus Centralized Control Style on the Maintainability of Object-Oriented Software, IEEE Transactions on Software Engineering, 2004 INF050-klasser- INF050-klasser-2

UML Klasser og objekter Assosiasjoner mellom to klasser Klasse -attributt -attributt2 +metode() #metode2( ) + betyr public - betyr private #b betyr protected t Objekt:Klasse -attributt aggregering = verdi -attributt2 = verdi sammensetning 0.. er tildelt 0.. undervises i Parkeringsplass (maks en til en) (en til mange, g, hvor emne vet om kurs) En klasse beskriver hva objektene vet (tilstand/attributter) og hvilke meldinger de forstår (metoder). 0* er meldt på 0* Indikator Antall forekomster (mange til mange, hvor kurs vet om sine studenter, student vet om sine kurs ) Objektene er forekomster av klassebeskrivelsen. 0.. Null eller nøyaktig n nøyaktig n 0 eller flere * 0 eller flere..* eller flere..n eller flere (<= n) INF050-klasser-3 INF050-klasser-4 Roller Arv -navn +finn (fødselsnr): Person +finn (fødselsnr): Person 0.. arbeidsgiver ansatt 0.. studieplass student Person -navn - fødselsnr -navn +finnperson(fødselsnr): Person Person - navn - fødselsnr En person kan ha rollen som ansatt på maks ett universitet it t En person kan ha rollen som student på maks ett universitet (men Per kan godt være student på UiO og ansatt ved NTNU) rapporterer til En ansatt rapporterer til maks en annen ansatt, som er sjef -ansattid - stillingskode -studentid 0.. sjef INF050-klasser-5 INF050-klasser-6

Attributter eller klasser? - ansattid - stillingskode Klassediagram vs objektdiagram - <andre attributter> + finn (semester): undervises i emnets + ledigplass(): boolean Multiplisitetene i klassediagrammet forteller oss at vi kan ha emner uten kurs, men ikke kurs uten emne Stilling - ansattid - stillingskode Ved å utvide stillingskode-attributtet til å bli en egen klasse (Stilling) kan man definere andre attributter og metoder som har spesielt med stillinger å gjøre Inf000 : emnekode = 'Inf000' Inf050 : emnekode = 'Inf050' Inf900 : emnekode = 'Inf900' undervises i undervises i undervises i Inf000h07 : antallpaameldt = 3 antallplasser = 400 semester = 'v07' Inf050v07 : antallpaameldt = 278 antallplasser = 300 semester = 'v07' Inf050v08 : antallpaameldt = 299 antallplasser = 300 semester = 'v08' INF050-klasser-7 INF050-klasser-8 Infostoff: Eks. på realisering i Java - <andre attributter> + finn (semester): undervises i emnets + ledigplass(): boolean Infostoff: Eks. på realisering i Java - <andre attributter> + finn (semester): undervises i emnets tk + ledigplass(): boolean public class { emnets:hashmap Inf050v05: private String emnekode; <andre attributter>; Inf050: 'v05' 'v06' 'v07' 'v08' Inf050v06: Inf050v07: private HashMap emnets = new HashMap(); finn(string semester) { kurset; kurset = () emnets.get(semester); return kurset; Inf050v08: <andre metoder> INF050-klasser-9 INF050-klasser-20

Sammenhengen mellom sekvensdiagram og klassediagram Start med sekvensdiagrammet for hovedflyt: registrering bruksmønstermodell Meld på kurs Lag o Lag klasser for alle objektene i sekvensdiagrammet. o For hver melding til et bestemt objekt i sekvensdiagrammet: Legg til en tilsvarende metode for klassen til dette objektet. o Legg til de attributtene som hver av disse metodene trenger Meld av kurs Betal semesteravgift Lag Registrer eksamensresultat administrator o Lag nødvendige assosiasjoner for at klassene skal kunne utføre sine metoder (f.eks. sende meldinger til andre objekter) For hvert sekvensdiagram for en variasjon: o Utvid klassediagrammet med nye klasser, metoder, attributter og assosiasjoner i klassediagrammet basert på meldingene i sekvensdiagrammet for variasjonen. Skiller mellom "" (f.eks. Inf050) og "" i emnet (Inf050 v08) Variasjon for "Lag ": Opprett nytt emne Variasjon for "Lag ": Opprett nytt kurs Variasjoner for "Meld på kurs": et forutsetter tt andre emner: en t må ha bestått kurs for emnene Dersom et kurs er fullt: en kan bli satt på venteliste Variasjon for "Meld av kurs": Dersom kurset var fullt: Første student på venteliste blir meldt på kurset INF050-klasser-2 INF050-klasser-22 Tekstlig spesifikasjon av Meld på kurs Navn: Meld på kurs Aktør: Prebetingelse: har betalt semesteravgift Postbetingelse: er meldt på kurset eller er satt på venteliste Hovedflyt:. en velger emne 2. Systemet sjekker at studenten er kvalifisert til å ta emnet 3. Systemet finner kurs for emnet 4. Systemet sjekker om det er ledig plass på kurset 5. Systemet t registrerer studenten t på kurset Meld på kurs (forts.) Alternativ flyt, steg : t finnes ikke: A.. Bruksmønsteret avsluttes Alternativ flyt, steg 2: t forutsetter andre emner: A.2. Systemet sjekker at studenten har bestått kurs for emner som forutsettes Alternativ flyt, steg A.2.: en har bestått kurs for emner som forutsettes: A.2... Bruksmønsteret fortsetter fra steg 3 Alternativ flyt, steg A.2.: en har ikke bestått kurs for emner som forutsettes: A.2..2. Bruksmønsteret avsluttes Alternativ flyt, steg 3: Det holdes ikke kurs i emnet dette semesteret: A3B A.3. Bruksmønsteret tavsluttes Alternativ flyt, steg 4: et er fullt: A.4. Systemet spør om studenten ønsker å bli satt på venteliste Alternativ flyt, steg A.4.: en ønsker å bli satt på venteliste: A.4... Systemet setter studenten på venteliste. A.4.2 Bruksmønsteret avsluttes INF050-klasser-23 INF050-klasser-24

CRC-kort for bruksmønsteret Meld på kurs Normal hendelsesflyt for Meld på kurs <<boundary>> Kommuniserer med aktøren og kontrollobjektet MeldPaa <<entity>> Oppslagsobjekt som vet hvilke emner og studenter som finnes i systemet t <<entity>> Vet min emnekode Vet hvilke emner som forutsettes Vet hvordan man finner kurs i emnet ok:=meldpaa(studentid, emnekode, semester) MeldPaa emnet: kurset: studenten: MeldPaa <<control>> Kontrollerer hendelses- forløpet i bruksmønsteret Meld på kurs <<entity>> Vet min studentid Vet hvilke kurs jeg har tatt Vet hvilke kurs jeg er meldt opp til Vet hvilke kurs jeg står på venteliste på <<entity>> Vet semesteret som (et kurs i) et bestemt emne holdes Vet antall plasser Vet hvilke studenter som er påmeldt Vet hvilke studenter som står på venteliste ok:=meldpaa(studentid, d tid emnekode, semester) studenten:=finn(studentid) emnet:=finn(emnekode) e e(e e forutsetter:=forutsetterr() kurset:=finn(semester) erledigplass:=ledigplass() paameldingok:=meldpaa(studenten) ermeldtpaa(kurset) INF050-klasser-25 INF050-klasser-26 Klasser involvert i hovedflyt Metoder og attributter for hovedflyt MeldPaa MeldPaa + boolean + boolean -emnekode: String - antallrforutsettes; int +finn: + forutsetterr: boolean + finn: t t + finn: t - studentid: String + ledigplass: boolean + boolean ) Inkluder klassene du finner i sekvensdiagrammet 2) Inkluder metodene som ble brukt i sekvensdiagrammet 3) Inkluder attributter som metodene trenger INF050-klasser-27 INF050-klasser-28

Komplett klassediagram for hovedflyt Alternativ flyt, steg 4 (kurset er fullt og studenten ønsker å sette seg på venteliste) emnet: kurset: studenten: MeldPaa + boolean + boolean -emnekode: String - antallrforutsettes; int + finn: + forutsetterr: boolean +ledigplass: boolean + boolean + finn: + finn: 0.. * kursdeltaker - studentid: String ok:=meldpaa(studentid, emnekode, semester) [erledig==false] vilvente:=oenskerventeliste() MldP MeldPaa ok:=meldpaa(studentid, emnekode, semester) studenten:=finn(studentid) emnet:=finn(emnekode) forutsetter:=forutsetterr() kurset:=finn(semester) erledig:=ledigplass() [vilvente==true] okvent:=settventeliste(studenten) [okvent==true] erpaaventeliste(kurset) 4) Inkluder assosiasjoner som metodene trenger (bruker eller oppretter) 5) Inkluder avhengighetspiler mellom klassene som utveksler meldinger INF050-klasser-29 INF050-klasser-30 Klassediagram for hovedflyt og alternativ flyt (steg 4) Alternativ flyt, steg 2 (t forutsetter andre emner som studenten har bestått) emnet: kurset: studenten: ok:=meldpaa(studentid, emnekode, semester) + boolean + oenskerventeliste: boolean MeldPaa + boolean -emnekode: Kd String - antallrforutsettes; int +finn: + forutsetterr: boolean + finn: + finn: kursdeltaker - studentid: String venteliste + ledigplass: boolean + erpaaventeliste: void + boolean + settventeliste:boolean MeldPaa ok:=meldpaa(studentid, emnekode, semester) studenten:=finn(studentid) emnet:=finn(emnekode) forutsetter:=forutsetterr() [forutsetter==true] emnene:=forutsettes() harbestaatt:=harbestaattefor(emnene) [harbestaatt==true] kurset:=finn(semester) erledigplass:=ledigplass() paameldingok:=meldpaa(studenten) ermeldtpaa(kurset) Legger til nye metoder og assosiasjoner for alternativ flyt INF050-klasser-3 INF050-klasser-32

Klassediagram for normal hendelsesflyt + alternativ flyt steg 2 og 4 Klassediagram på systemnivå Lag + boolean + oenskerventeliste: boolean emne som forutsettes - antallrforutsettes; int +finn: + finn: MeldPaa + forutsetterr: boolean +finn: + forutsettes: [] + boolean kursdeltaker - studentid: String venteliste + ldipl ledigplass: boolean + boolean + erpaaventeliste: void + settventeliste:boolean bestått kurs + harbeståttefor:boolean emne som forutsettes tt Lag - antallrforutsettes; int +finn: + finn: + forutsetterr: boolean + finn: MeldPaa + forutsettes: [] + boolean + boolean +oenskerventeliste: boolean MeldAv kursdeltaker - studentid: String BetalSemesteravgift venteliste + ledigplass: boolean + boolean + erpaaventeliste: void + settventeliste:boolean t t l bestått kurs + harbeståttefor:boolean RegistrerEksamensResultat Legger til nye metoder og assosiasjoner for alternativ flyt steg 2 INF050-klasser-33 De andre bruksmønstrene vil introdusere nye kontrollobjekter og evt. nye forretningsobjekter, samt nye assosiasjoner, metoder og attributter på eksisterende forretningsobjekter. objektet vil få flere metoder (antar ett kantobjekt i systemet) INF050-klasser-34