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

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

o UML klassediagrammer

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

Fra krav til objekter. INF1050: Gjennomgang, uke 05

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

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

Use Case-modellering. INF1050: Gjennomgang, uke 04

Utvikling fra skallet og inn

UML-Unified Modeling Language

INF 1050 BRUK AV MODELLERINGSVERKTØYET RATIONAL ROSE

UKE 11 UML modellering og use case. Gruppetime INF1055

INF1000: Forelesning 7

INF1010 UML. Marit Nybakken 26. januar 2004

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

Kravspesifikasjon med UML use case modellering. Erik Arisholm

Use case drevet design med UML

Objektorientering og UML. INF1050: Gjennomgang, uke 06

Eksamen INF1050: Gjennomgang, uke 15

Objektorientert design av kode. Refaktorering.

UNIVERSITETET I OSLO

INF1000: Forelesning 7. Konstruktører Static

UML 1. Use case drevet analyse og design Kirsten Ribu

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

GJENNOMGANG UKESOPPGAVER 7 REPETISJON

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

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

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

Mer om objektorientering og UML

UNIVERSITETET I OSLO

OPPGAVE 5b og 8b Java Kode

Mer$om$objektorientering$og$UML

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

UNIVERSITETET I OSLO

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

Gjennomgang av eksamen H99

IN2001: Kravhåndtering, modellering, design

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

Mer om objektorientering og UML

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

Kravspesifikasjon med. Erik Arisholm

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

1 Introduksjon til designmodellen - del B 2

(MVC - Model, View, Control)

UNIVERSITETET I OSLO

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

Læringsmål for forelesningen

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

Prosjektgruppen: Gjermund Gartmann Tommy Jansson Margrethe Store. Prosjektledelse: Margrethe Store Kvalitetssikring: Tommy Jansson

Universitetet i Oslo Institutt for informatikk. Eskild Busch. UML hefte

INF1050 Systemutvikling

Enkle generiske klasser i Java

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

UNIVERSITETET I OSLO

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

Oppgave 1: Multiple choice (20 %)

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Fra krav til modellering av objekter

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

Objektorientert design av kode. Refaktorering.

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

Object interaction. Innhold. Abstraksjon Grunnleggende programmering i Java Monica Strand 3. september 2007.

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

Universitetet i Bergen Det matematisk-naturvitenskapelige fakultet Institutt for informatikk

Introduksjon til objektorientert programmering

INF Seminaroppgaver til uke 3

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

Transkript:

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 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 (6) Lag klassediagram som tilsvarer sekvensdiagrammene (7) Lag til slutt klassediagram på systemnivå INF050-klasser- INF050-klasser-2 Delegering av ansvar i en trelagsarkitektur Hovedflyt for Meld på kurs Forretningsobjekter ( entity objects ) Kontrollobjekter ( control objects ) objekter ( boundary objects ) ok:=meldpaa(studentid, emnekode, semester) <<create>> meldpaa: MeldPaa ok:=meldpaa(studentid, emnekode, semester) Objektet som returneres av finn Objektet som returneres av ::finn Objektet som returneres av finn Hvor mye ansvar bør kontrollobjektene ha, og i hvilken grad bør vi bevisstgjøre forretningsobjektene våre?? 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 =finn(studentid) =finn(emnekode) forutsetter:=forutsetterr() =finn(semester) erledigplass:=ledigplass() paameldingok:=meldpaa(studenten) ermeldtpaa(kurset) INF050-klasser-3 INF050-klasser-4

Hovedflyt for Meld på kurs (Eksempel på Java kode for metoden meldpaa i en sentralisert 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 forutsetter = emnet.forutsetterr(); kurset = emnet.finn(semester); boolean erledigplass = kurset.ledigplass(); boolean paameldingok = kurset.meldpaa(studenten); studenten.ermeldtpaa(kurset); return paameldingok; Hovedflyt for Meld på kurs (delegert kontrollstil: og har overtatt mye av ansvaret fra kontrollobjektet) ok:=meldpaa(studentid, emnekode, semester) <<create>> meldpaa: MeldPaa ok:=meldpaa(studentid, emnekode, semester) =finn(studentid) =finn(emnekode) ok:=meldpaa(studenten, semester) forutsetter:=forutsetterr() =finn(semester) ok:=meldpaa(studenten) erledig:=ledigplass() ermeldtpaa(kurset) INF050-klasser-5 INF050-klasser-6 Hovedflyt for Meld på kurs (Eksempel på Java kode for metoden meldpaa i en delegert kontrollstil) Resultater fra et kontrollert eksperiment (*) 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; Mean Effort (minutes) 0 00 90 80 70 Undergraduate Graduate Junior Intermediate Senior Design DC CC 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 % Correct Solutions 00 50 0 Design DC CC * 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-7 INF050-klasser-8

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

Arv Attributter eller klasser? -navn +finnperson(fødselsnr): Person Person -navn - fødselsnr - ansattid - stillingskode -ansattid - stillingskode -studentid - ansattid Stilling - 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 INF050-klasser-3 INF050-klasser-4 Klassediagram vs objektdiagram - <andre attributter> + finn (semester): Inf000 : emnekode = 'Inf000' Inf050 : emnekode = 'Inf050' undervises i emnets + ledigplass(): boolean Multiplisitetene i klassediagrammet forteller oss at vi kan ha emner uten kurs, men ikke kurs uten emne 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' Infostoff: Eks. på realisering i Java - <andre attributter> + finn (semester): Inf050: emnets:hashmap 'v05' 'v06' 'v07' 'v08' undervises i emnets + ledigplass(): boolean Inf050v05: Inf050v06: Inf050v07: Inf050v08: INF050-klasser-5 INF050-klasser-6

Infostoff: Eks. på realisering i Java -emnekode: String - <andre attributter> + finn (semester): public class { private String emnekode; <andre attributter>; private HashMap emnets = new HashMap(); finn(string semester) { kurset; kurset = () emnets.get(semester); return kurset; <andre metoder> undervises i emnets + ledigplass(): boolean Sammenhengen mellom sekvensdiagram og klassediagram Start med sekvensdiagrammet for hovedflyt: 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 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. INF050-klasser-7 INF050-klasser-8 registrering bruksmønstermodell Meld på kurs Lag Tekstlig spesifikasjon av Meld på kurs Navn: Meld på kurs Aktør: Meld av kurs Lag administrator Prebetingelse: har betalt semesteravgift Betal semesteravgift Registrer eksamensresultat Postbetingelse: er meldt på kurset eller er satt på venteliste Hovedflyt: 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 andre emner: en 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. 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 registrerer studenten på kurset INF050-klasser-9 INF050-klasser-20

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: A.3. Bruksmønsteret avsluttes 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 <<boundary>> Kommuniserer med aktøren og kontrollobjektet MeldPaa <<control>> Kontrollerer hendelsesforløpet i bruksmønsteret Meld på kurs CRC-kort for bruksmønsteret Meld på kurs MeldPaa <<entity>> Oppslagsobjekt som vet hvilke emner og studenter som finnes i systemet <<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 min emnekode Vet hvilke emner som forutsettes Vet hvordan man finner kurs i emnet <<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 INF050-klasser-2 INF050-klasser-22 Normal hendelsesflyt for Meld på kurs Klasser involvert i hovedflyt ok:=meldpaa(studentid, emnekode, semester) <<create>> meldpaa: MeldPaa ok:=meldpaa(studentid, emnekode, semester) =finn(studentid) MeldPaa =finn(emnekode) forutsetter:=forutsetterr() =finn(semester) erledigplass:=ledigplass() paameldingok:=meldpaa(studenten) ermeldtpaa(kurset) ) Inkluder klassene du finner i sekvensdiagrammet INF050-klasser-23 INF050-klasser-24

Metoder og attributter for hovedflyt Komplett klassediagram for hovedflyt MeldPaa - antallrforutsettes; int +finn: + forutsetterr: boolean + finn: + finn: MeldPaa - antallrforutsettes; int + finn: + forutsetterr: boolean + finn: + finn: + meldpaa:boolean + meldpaa:boolean + meldpaa:boolean + meldpaa:boolean + meldpaa: boolean - studentid: String + meldpaa: boolean kursdeltaker - studentid: String 2) Inkluder metodene som ble brukt i sekvensdiagrammet 3) Inkluder attributter som metodene trenger INF050-klasser-25 4) Inkluder assosiasjoner som metodene trenger (bruker eller oppretter) 5) Inkluder avhengighetspiler mellom klassene som utveksler meldinger INF050-klasser-26 Alternativ flyt, steg 4 (kurset er fullt og studenten ønsker å sette seg på venteliste) Klassediagram for hovedflyt og alternativ flyt (steg 4) ok:=meldpaa(studentid, emnekode, semester) <<create>> [erledig==false] vilvente:=oenskerventeliste() meldpaa: MeldPaa ok:=meldpaa(studentid, emnekode, semester) =finn(studentid) =finn(emnekode) forutsetter:=forutsetterr() =finn(semester) erledig:=ledigplass() [vilvente==true] okvent:=settventeliste(studenten) [okvent==true] erpaaventeliste(kurset) + meldpaa:boolean + oenskerventeliste: boolean MeldPaa + meldpaa:boolean -emnekode: String - antallrforutsettes; int +finn: + forutsetterr: boolean + finn: +finn: kursdeltaker - studentid: String venteliste + erpaaventeliste: void + meldpaa: boolean + settventeliste:boolean Legger til nye metoder og assosiasjoner for alternativ flyt INF050-klasser-27 INF050-klasser-28

Alternativ flyt, steg 2 (t forutsetter andre emner som studenten har bestått) Klassediagram for normal hendelsesflyt + alternativ flyt steg 2 og 4 ok:=meldpaa(studentid, emnekode, semester) <<create>> meldpaa: MeldPaa ok:=meldpaa(studentid, emnekode, semester) =finn(studentid) =finn(emnekode) forutsetter:=forutsetterr() [forutsetter==true] emnene:=forutsettes() harbestaatt:=harbestaattefor(emnene) [harbestaatt==true] =finn(semester) erledigplass:=ledigplass() paameldingok:=meldpaa(studenten) ermeldtpaa(kurset) + meldpaa:boolean + oenskerventeliste: boolean emne som forutsettes - antallrforutsettes; int +finn: + finn: MeldPaa + forutsetterr: boolean +finn: + forutsettes: [] + meldpaa:boolean kursdeltaker - studentid: String venteliste + meldpaa: boolean + erpaaventeliste: void + settventeliste:boolean bestått kurs + harbeståttefor:boolean INF050-klasser-29 Legger til nye metoder og assosiasjoner for alternativ flyt steg 2 INF050-klasser-30 Klassediagram på systemnivå Lag emne som forutsettes Lag -emnekode: String - antallrforutsettes; int +finn: + finn: + forutsetterr: boolean +finn: MeldPaa + forutsettes: [] + meldpaa:boolean + meldpaa:boolean + oenskerventeliste: boolean MeldAv kursdeltaker - studentid: String BetalSemesteravgift venteliste + meldpaa: boolean + erpaaventeliste: void + settventeliste:boolean bestått kurs + harbeståttefor:boolean RegistrerEksamensResultat 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-3