Spesifikasjon av Lag emne



Like dokumenter
Ansvarsdrevet OO: CRC og UML Sekvensdiagrammer

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

NB! Endring i undervisningsplanen

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

Beskjed fra Skagestein

o UML klassediagrammer

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

Use Case-modellering. INF1050: Gjennomgang, uke 04

UKE 11 UML modellering og use case. Gruppetime INF1055

INF1000 Metoder. Marit Nybakken 16. februar 2004

INF1000: Forelesning 7

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

UML 1. Use case drevet analyse og design Kirsten Ribu

Fra krav til objekter. INF1050: Gjennomgang, uke 05

Produktrapport Gruppe 9

Use case drevet design med UML

INF1000: Forelesning 7. Konstruktører Static

GJENNOMGANG UKESOPPGAVER 6 MER OM OBJEKTORIENTERING OG UML

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

Mer$om$objektorientering$og$UML

UML-Unified Modeling Language

UNIVERSITETET I OSLO

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

INF 1050 BRUK AV MODELLERINGSVERKTØYET RATIONAL ROSE

Objektorientering og UML. INF1050: Gjennomgang, uke 06

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

Utvikling fra skallet og inn

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

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

UNIVERSITETET I OSLO

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

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

UNIVERSITETET I OSLO

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

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

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

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

UNIVERSITETET I OSLO

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

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

OPPGAVE 5b og 8b Java Kode

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

Hensikten med denne delen av kurset. Objektets egenskaper. Objektorientering hva er det? Best practises ved programvareutvikling. Kravspesifikasjonen

GJENNOMGANG UKESOPPGAVER 7 REPETISJON

Forside. Eksamen i IN1030 for Våren Ingen hjelpemidler tillatt.

Mer om objektorientering og UML

OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK

HØGSKOLEN I SØR-TRØNDELAG

UNIVERSITETET I OSLO

INF1000: Forelesning 6. Klasser og objekter del 1

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

UNIVERSITETET I OSLO

Dagens forelesning. Java 13. Rollefordeling (variant 1) Rollefordeling (variant 2) Design av større programmer : fordeling av roller.

UNIVERSITETET I OSLO

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

Løsningsforslag til Case. (Analysen)

Løse reelle problemer

Klasser, objekter, pekere og UML. INF gruppe 13

INF 5120 Modellering med objekter

Løsningsforslag til eksamen i INF1000 våren 2006

Enkle generiske klasser i Java

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

Kravspesifikasjon med UML use case modellering. Erik Arisholm

Obligatorisk oppgave 5: Modellering av krav

UNIVERSITETET I OSLO

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

Generelt om oblig 3. Oppgaveteksten kort sammendrag. Deloppgaver/menyvalg 15/03/2010. INF1000 Forelesning 9

INF Modellering med objekter (Oblig 2) **TimeregistreringSystem** (Designet av Alen Cemer

Eksamen INF1050: Gjennomgang, uke 15

Sensur-veiledning INF1000 h 2013 (fasit) am - 6. des. 2013

INF1010 våren januar. Objektorientering i Java

IN2001: Kravhåndtering, modellering, design

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

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

INF1000 Prøveeksamen Oppgave 7 og 9

TOD063 Datastrukturer og algoritmer

Meeting Reservation System

Oblig 4Hybelhus litt mer tips enn i oppgaven

Løsningsforslag ukeoppg. 9: okt (INF Høst 2011)

Introduksjon til objektorientert programmering

INF106 Objektorientert programmering

Use case modellen. Use case modellering i analysefasen. Hva er en Aktør? Hva er et Use case?

Transkript:

Dagens forelesning o Kort repetisjon av kravspesifikasjon med UML Fra krav til objekter Hva skal systemet gjøre? UML: Bruksmønstermodeller (Use Cases) o Objektdesign Ansvarsdrevet OO: CRC og UML Sekvensdiagrammer Hvordan skal systemet fungere? Tre typer objekter CRC: Hvordan finne gode objekter? UML: Sekvensdiagrammer INF1050--1 INF1050--2 registrering bruksmønstermodell Spesifikasjon av Lag emne Meld på kurs Meld av kurs Betal semesteravgift Lag Lag Registrer eksamensresultat Skiller mellom "" (f.eks. Inf1050) og "" i emnet (Inf1050 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 administrator Navn: Lag emne Aktør: administrator Hovedflyt: 1. administrator velger emnekode 2. Systemet t finner emnet 3. administratoren oppdaterer beskrivelsen av emnet (her kan det være mange underpunkter og variasjoner, for eksempel registrering av hvilke andre emner som forutsettes) 4. Systemet t registrerer den nye informasjonen Alternativ flyt, steg 2: koden eksisterer ikke: A.1.1. Systemet spør om nytt emne skal opprettes og oppretter i så fall nytt emne med gitt emnekode (dvs, Nytt emne er en variasjon over Lag emne ) Relatert informasjon: Pga behov for historikk og avhengighet til kurs kan man ikke slette emner, men det bør være mulig å definere at et nytt emne erstatter et gammelt emne under punkt 3. INF1050--3 INF1050--4

Tekstlig spesifikasjon av Meld på kurs Navn: Meld på kurs Aktør: Prebetingelse: har betalt semesteravgift Postbetingelse: kurset eller er satt på venteliste Hovedflyt: 1. 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 1: t finnes ikke: A.1.1 Bruksmønsteret avsluttes Alternativ flyt, steg 2: t forutsetter andre emner: A.2.1 Systemet sjekker at studenten har bestått kurs for emner som forutsettes Alternativ flyt, steg A.2.1: en har bestått kurs for emner som forutsettes: A.2.1.1.1 Bruksmønsteret fortsetter fra steg 3 Alternativ flyt, steg A.2.1: en har ikke bestått kurs for emner som forutsettes: A.2.1.2.1 Bruksmønsteret avsluttes Alternativ flyt, steg 3: Det holdes ikke kurs i emnet dette semesteret: A31B A.3.1 Bruksmønsteret tavsluttes Alternativ flyt, steg 4: et er fullt: A.4.1 Systemet spør om studenten ønsker å bli satt på venteliste Alternativ flyt, steg A.4.1: en ønsker å bli satt på venteliste: A.4.1.1.1 Systemet setter studenten på venteliste. A.4.2 Bruksmønsteret avsluttes INF1050--5 INF1050--6 Metode for ansvarsdrevet OO Inf1050 metoden (Iterativ): Analyse av krav (1) 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: Hva er et objekt Et objekt er en representasjon av en virkelig ting. Et objekt har en entydig identitet, en indre tilstand, og evnen til å reagere på meldinger utenfra. Et objekt har altså liv. I modeller e er alt mulig - også å bevisstgjøre e i utgangspunktet døde ting som innsjøer, veier, kommuner, firmaer, lån... (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å INF1050--7 INF1050--8

Det bevisste lån Utfordringen i å lage OO-modeller Et låneobjekt kan f.eks. o kjenne til sin egen saldo, rentefot, forfallsdatoer osv. o forrente seg selv o purre på avdrag o akseptere innbetalinger lån Hei, du har glemt å betale avdraget! Gitt et sett bruksmønstre: Hvordan finne de riktige objektene og fordele ansvar mellom dem slik at bruksmønstrene blir realisert! INF1050--9 INF1050--10 Hvordan finne objekter? Tre typer objekter Forretningsobjekter ( entity objects ) Ta først utgangspunkt i språket til domenet (problemområdet): Kontrollobjekter ( control objects ) o F.eks. produkt, ingrediens, kunde, student, konto, innskudd, reservasjon o Finn begreper i bruksmønsterspesifikasjonene! Lag CRC-kort for objektene du tror du trenger Lag sekvensdiagrammer for bruksmønstrene objekter ( boundary objects ) Litt forenklet kan man si at denne tredelingen skiller mellom 1) objekter som skal lagres i en database, 2) objekter som koordinerer handlingene i et bruksmønster og 3) objekter som kommuniserer med aktørene. INF1050--11 INF1050--12

Forretningsobjekter ( entity objects ) Representerer de tingene virksomheten håndterer, som for eksempel vare, tilbud, ordre, kunde osv. En forekomst av et forretningsobjekt kan leve lenge - kanskje like lenge som virksomheten! I motsetning til kantobjekter og kontrollobjekter lagres forretningsobjektene i en database (de er persistente ) t ) Kontrollobjekter ( control objects ) Representerer noe som gjøres i virksomheten Et kontrollobjekt lever vanligvis ikke lenger enn det handlingsforløpet det inngår i. Inf1050: ett kontrollobjekt pr. bruksmønster. Inf1050: Navnet på kontrollobjektet = navnet på bruksmønsteret! INF1050--13 INF1050--14 objekter (boundary objects) objekter aktiveres av handlinger fra aktører via brukergrensesnittet o for eksempel når aktøren ønsker å starte et bruksmønster ved å trykke på Meld på kurs -knappenknappen i brukergrensesnittet. objektet oppretter deretter en forekomst av kontrollobjektet kt t som kontrollerer selve handlingsforløpet i bruksmønsteret CRC-kort (Class-Responsibility-Collaboration) Navn på objektet Liste over <<type objekt>> samarbeidende Ansvar: objekter Hva objektet må vite (objekter som jeg utveksler meldinger med) Hva objektet skal gjøre Vi kan godt tenke på kantobjekter som bindeleddet mellom et uspesifisert brukergrensesnitt og et kontrollobjekt. objekter kommuniserer kun med aktører (via brukergrensesnittet) og kontrollobjekter. INF1050--15 INF1050--16

Vet min studentid Eks: CRC-kort for Vet hvilke kurs jeg har bestått Vet hvilke kurs jeg er meldt opp til Vet hvilke kurs jeg står på venteliste på + andre ansvarsområder: Vil bli tydeligere etter hvert som man designer bruksmønstre ved hjelp av sekvensdiagrammer Eks: CRC-kort for Objektorienterte systemer inneholder ofte et slikt oppslagsobjekt Oppslagsobjekt som er tilgjengelig for alle andre objekter: Vet hvilke r og er som finnes på universitetet Har metode for å finne en gitt student Har metode for å finne et gitt emne INF1050--17 INF1050--18 <<boundary>> Kommuniserer med aktøren og kontrollobjektet MeldPaa <<control>> Kontrollerer hendelses- forløpet i bruksmønsteret Meld på kurs Eks: CRC-kort for bruksmønsteret Meld på kurs MeldPaa Oppslagsobjekt som vet hvilke emner og studenter som finnes i systemet t Vet min studentid Vet hvilke kurs jeg har bestått Vet hvilke kurs jeg er meldt opp til Vet hvilke kurs jeg står på venteliste på Vet min emnekode Vet hvilke emner som forutsettes Vet hvilke kurs som holdes i emnet 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 Objektdesign med UML sekvensdiagrammer Et UML sekvensdiagram viser en interaksjon mellom aktører og objekter i systemet for et bestemt bruksmønster o Fokuserer på hvordan objektene samarbeider for å løse en bestemt oppgave (bruksmønster) o Er ofte nyttig for å identifisere (og spesifisere bruken av) metodene til objektene i systemet INF1050--19 INF1050--20

Syntaks for UML sekvensdiagram Meldingen sendes bare dersom betingelser er oppfylt Java: if (betingelser) { returverdi = objekt1.metode(parametere) objekt1:klasse1 objekt2:klasse2 Klassen til objektet må ha en metode som kan ta hånd om meldingen [betingelser] returverdi := metode (parametere) Meldingens aktive periode Sammenheng mellom bruksmønster og sekvensdiagram For hvert bruksmønster lager du (i de aller fleste tilfeller) et sekvensdiagram for hovedflyt For hver alternative flyt kan du velge å lage et nytt sekvensdiagram. o Det er viktig å lage sekvensdiagram for variasjoner som har stor innvirkning på designet Returmelding. Vises vanligvis i ikke i diagrammet Objektet fjernes det trengs ikke lenger Introduserer variasjonen nye objekter? Introduserer variasjonen nye metoder? INF1050--21 INF1050--22 Hovedflyt for Meld på kurs (iterasjon #1, uten forretningsobjektene) (infostoff) Eksempel i Java: metoden meldpaa til kantobjektet <<create>> meldpaa: MeldPaa Lager en instans av kontrollobjektet boolean meldpaa(string studentid, String emnekode, String semester) { MeldPaa meldpaa; boolean ok; Kontrollobjektet sørger for at studenten blir meldt på kurset // kantobjektet lager et nytt kontrollobjekt: meldpaa = new MeldPaa(this); Kontrollobjektet slettes // så overtar kontrollobjektet handlingsforløpet i bruksmønsteret: ok = meldpaa.meldpaa(studentid, emnekode, semester); return ok; INF1050--23 INF1050--24

Hovedflyt for Meld på kurs (infostoff - NB! Ikke komplett kode) Eksempel i Java: metoden meldpaa til kontrollobjektet Objektet som returneres av finn Objektet som returneres av ::finn Objektet som returneres av finn public class MeldPaa { <<create>> meldpaa: MeldPaa universitetet: emnet: kurset: studenten: public boolean meldpaa(string studentid, String emnekode, String semester) { // antar at objektet universitetet er globalt tilgjengelig: studenten = universitetet.finn(studentid); emnet = universitetet.finn(emnekode); Hovedflyt: 1. 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 forutsetteremner = emnet.forutsetterr(); kurset = emnet.finn(semester); t boolean erledigplass = kurset.ledigplass(); boolean paameldingok = kurset.meldpaa(studenten); studenten.ermeldtpaa(kurset); return paameldingok; INF1050--25 INF1050--26 Objektdiagram, før Per melder seg på Inf1050 og så registrerer Per seg på Inf1050 v08 UiO: har har ok:=meldpaa('12345', 'Inf1050', 'v08') UiO: Inf1050 : Inf1050v08: Per: navn = "Per" Per : studentid = "12345" Kari : navn = 'Kari' studentid = '44456' Inf1050 : emnekode = 'Inf1050' er undervisning i er undervisning ng i Inf1000 : emnekode = 'Inf1000' <<create>> meldpaa: MeldPaa ok:=meldpaa('12345', 'Inf1050', 'v08') studenten:=finn('12345') emnet:=finn('inf1050') forutsetter:=forutsetterr() Inf1050v08 : antallpaameldt = 299 semester = 'v08' Inf1050v07 : antallpaameldt = 278 semester = 'v07' kurset:=finn('v08') erledigplass:=ledigplass() paameldingok:=meldpaa(studenten) ermeldtpaa(kurset) 299 andre studenter: t t 278 studenter: INF1050--27 INF1050--28

Objektdiagram, etter at Per har meldt seg på Inf1050 v08 Alternativ flyt, steg 4 (kurset er fullt og studenten ønsker å sette seg på venteliste) UiO: universitetet: emnet: kurset: studenten: har har <<create>> meldpaa: MldP MeldPaa Per : Kari : navn = "Per" navn = 'Kari' studentid ="12345" studentid ='44456' Inf1050 : emnekode = 'Inf1050' Inf1000 : emnekode = 'Inf1000' studenten:=finn(studentid) er undervisning i er undervisnin ng i emnet:=finn(emnekode) forutsetter:=forutsetterr() kurset:=finn(semester) erledig:=ledigplass() Inf1050v08 : antallpaameldt = 300 semester = 'v08' Inf1050v07 : antallpaameldt = 278 semester = 'v07' [erledig==false] vilvente:=oenskerventeliste() [vilvente==true] okvent:=settventeliste(studenten) [okvent==true] erpaaventeliste(kurset) 299 andre studenter: 278 studenter: t t INF1050--29 INF1050--30 (infostoff - NB! Ikke komplett kode) Java tilsvarende steg 1-3 + alternativ flyt, y, steg 4 (kurset er fullt og studenten ønsker å sette seg på venteliste) Objektdiagram, etter at Kari ble satt på venteliste public class MeldPaa { private kantobjektet; public boolean meldpaa(string studentid, String emnekode, String semester) { studenten = universitetet.finn(studentid); emnet = universitetet.finn(emnekode); boolean forutsetteremner = emnet.forutsetterr(); kurset = emnet.finn(semester); boolean erledigplass = kurset.ledigplass(); if (erledigplass == false) { boolean vilvente = kantobjektet.oenskerventeliste(); if (vilvente == true) { boolean okvent= kurset.settventeliste(studenten); if (okvent == true) { studenten.erpaaventeliste(kurset); return true; INF1050--31 har har UiO: Per : Kari : Inf1050 : Inf1000 : navn = "Per" navn = 'Kari' emnekode = 'Inf1050' emnekode = 'Inf1000' studentid = "12345" studentid = '44456' er på ventelis iste er undervisning i er undervisning i Inf1050v08 : Inf1050v07 : antallpaameldt = 300 antallpaameldt = 278 semester = 'v08' semester = 'v07' 299 andre studenter: 278 studenter: INF1050--32