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

Like dokumenter
Spesifikasjon av Lag emne. Kursregistrering 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

Spesifikasjon av Lag emne

Ansvarsdrevet OO: CRC og UML Sekvensdiagrammer

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

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

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

o UML klassediagrammer

UML klassediagrammer

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

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

NB! Endring i undervisningsplanen

Beskjed fra Skagestein

Kursregistrering bruksmønstermodell

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

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

UKE 11 UML modellering og use case. Gruppetime INF1055

Utvikling fra skallet og inn

Use Case-modellering. INF1050: Gjennomgang, uke 04

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

Fra krav til objekter. INF1050: Gjennomgang, uke 05

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

UML-Unified Modeling Language

INF1000: Forelesning 7

Kravspesifikasjon. Erik Arisholm. Simula Research Laboratory. Institutt for Informatikk. INF1050-krav-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

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

Use case drevet design med UML

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

Mer$om$objektorientering$og$UML

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

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

INF1000: Forelesning 7. Konstruktører Static

Eksamen INF1050: Gjennomgang, uke 15

GJENNOMGANG UKESOPPGAVER 7 REPETISJON

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

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

GJENNOMGANG UKESOPPGAVER 6 MER OM OBJEKTORIENTERING OG UML

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

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

UNIVERSITETET I OSLO

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

Objektorientering og UML. INF1050: Gjennomgang, uke 06

Eksamen 2013 Løsningsforslag

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

UNIVERSITETET I OSLO

UML 1. Use case drevet analyse og design Kirsten Ribu

INF 1050 BRUK AV MODELLERINGSVERKTØYET RATIONAL ROSE

Produktrapport Gruppe 9

UNIVERSITETET I OSLO

OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK

Mer om objektorientering og UML

INF1000: Forelesning 6. Klasser og objekter del 1

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

INF 5120 Modellering med objekter

INF2120 V2005. Gruppe 2 christrc ieronnin kjetimk noushinm sjuros. Trafikanten+ Innlevering

INF1000: noen avsluttende ord

OPPGAVE 5b og 8b Java Kode

Obligatorisk oppgave 5: Modellering av krav

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

Løsningsforslag til eksamen i INF1000 våren 2006

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

Introduksjon til objektorientert programmering

UNIVERSITETET I OSLO

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

Gjennomgang av eksamen H99

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

IN2001: Kravhåndtering, modellering, design

UNIVERSITETET I OSLO

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

INF1000 Metoder. Marit Nybakken 16. februar 2004

IN& &april&2019. Modellering*av*krav. Yngve&Lindsjørn. IN1030&'>Systemutvikling'>&Modellering&av&krav 1

INF1010 UML. Marit Nybakken 26. januar 2004

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

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Innholdsfortegnelse INNHOLDSFORTEGNELSE... 2 REVISJONSOVERSIKT...4 INTRODUKSJON MED FORUTSETNINGER... 5

Planlegging og dokumentasjon

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

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

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

HØGSKOLEN I SØR-TRØNDELAG

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

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

1. Hvilke type krav angår sikkerhet og pålitelighet?

Objektorientert design av kode. Refaktorering.

(MVC - Model, View, Control)

INF1010 våren januar. Objektorientering i Java

UNIVERSITETET I OSLO

Mer om objektorientering og UML

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

Eksamen INF

Del - leveranse Del 2. Inf 2120 fredag Gruppe 1 Knut Johannes Dahle

UNIVERSITETET I OSLO

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-ansvar-1 INF1050-ansvar-2 registrering g 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 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 administrator Navn: Lag emne Aktør: administrator Hovedflyt: 1. administrator velger emnekode 2. Systemet 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 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-ansvar-3 INF1050-ansvar-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 t 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 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 ti flyt, steg 3: Det holdes ikke kurs i emnet dette semesteret: t A.3.1 Bruksmønsteret avsluttes 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-ansvar-5 INF1050-ansvar-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)S Spesifiser hvert tbruksmønster tekstlig tli 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 er alt mulig - også å bevisstgjøre 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-ansvar-7 INF1050-ansvar-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-ansvar-9 INF1050-ansvar-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-ansvar-11 INF1050-ansvar-12

Forretningsobjekter ( entity objects ) Kontrollobjekter ( control 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 ) 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 kt t = navnet på bruksmønsteret! INF1050-ansvar-13 INF1050-ansvar-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 -knappen i brukergrensesnittet. objektet oppretter deretter en forekomst av kontrollobjektet som kontrollerer selve handlingsforløpet i bruksmønsteret CRC-kort (Class-Responsibility-Collaboration) Navn på objektet <<type objekt>> Ansvar: Hva objektet må vite Hva objektet skal gjøre Liste over samarbeidende objekter (objekter som jeg utveksler meldinger med) 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-ansvar-15 INF1050-ansvar-16

Eks: CRC-kort for 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å + 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 it t t Har metode for å finne en gitt student Har metode for å finne et gitt emne t INF1050-ansvar-17 INF1050-ansvar-18 Eks: CRC-kort for bruksmønsteret Meld på kurs MeldPaa <<boundary>> Kommuniserer med aktøren og kontrollobjektet MeldPaa <<control>> Kontrollerer hendelsesforløpet i bruksmønsteret Meld på kurs Oppslagsobjekt som vet hvilke emner og studenter som finnes i systemet 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-ansvar-19 INF1050-ansvar-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 ikke i diagrammet Objektet fjernes det trengs ikke lenger Introduserer variasjonen nye objekter? Introduserer variasjonen nye metoder? INF1050-ansvar-21 INF1050-ansvar-22 Hovedflyt for Meld på kurs (iterasjon #1, uten forretningsobjektene) (infostoff) Eksempel i Java: metoden meldpaa til kantobjektet ok:=meldpaa(studentid, emnekode, semester) <<create>> Lager en instans av meldpaa: kontrollobjektet MeldPaa ok:=meldpaa(studentid, emnekode, semester) ok:=meldpaa(studentid, emnekode, semester) 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-ansvar-23 INF1050-ansvar-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 { ok:=meldpaa(studentid, emnekode, semester) <<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); ok:=meldpaa(studentid, emnekode, semester) 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 studenten:=finn(studentid) t d t( t d tid) emnet:=finn(emnekode) forutsetter:=forutsetterr() 4. Systemet sjekker om det er ledig plass på kurset kurset:=finn(semester) 5. Systemet registrerer studenten på kurset erledigplass:=ledigplass() paameldingok:=meldpaa(studenten) CRC-kortene forteller deg hvilket objekt som skal motta en bestemt melding ermeldtpaa(kurset) boolean forutsetteremner tt = emnet.forutsetterr(); t tt kurset = emnet.finn(semester); boolean erledigplass = kurset.ledigplass(); boolean paameldingok = kurset.meldpaa(studenten); studenten.ermeldtpaa(kurset); return paameldingok; INF1050-ansvar-25 INF1050-ansvar-26 Objektdiagram, før Per melder seg på Inf1050 og så registrerer Per seg på Inf1050 v08 UiO: har har har har kt t UiO: Inf1050 : Inf1050v08: 08 Per: ok:=meldpaa('12345', 'Inf1050', 'v08') navn = "Per" Per : studentid = "12345" navn = 'Kari' Kari : studentid = '44456' Inf1050 : emnekode = 'Inf1050' er undervis isning i er unde ervisning 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: 278 studenter: INF1050-ansvar-27 INF1050-ansvar-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 har har ok:=meldpaa(studentid, emnekode, semester) <<create>> meldpaa: MeldPaa navn = "Per" Per : studentid = "12345" navn = 'Kari' Kari : studentid = '44456' Inf1050 : emnekode = 'Inf1050' Inf1000 : emnekode = 'Inf1000' ok:=meldpaa(studentid, emnekode, semester) studenten:=finn(studentid) er undervis isning i er unde dervisning 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: INF1050-ansvar-29 INF1050-ansvar-30 (infostoff - NB! Ikke komplett kode) Java tilsvarende steg 1-3 + alternativ flyt, steg 4 (kurset er fullt og studenten ønsker å sette seg på venteliste) public class MeldPaa { private kantobjektet; public boolean meldpaa(string studentid, tid 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-ansvar-31 Objektdiagram, etter at Kari ble satt på venteliste har Per : t Kari : t navn = "Per" studentid = "12345" navn = 'Kari' studentid = '44456' UiO: har t er på venteliste har Inf1050v08 : antallpaameldt ldt = 300 semester = 'v08' har Inf1050 : Inf1000 : emnekode = 'Inf1050' er underv visning i er under rvisning i Inf1050v07 : antallpaameldt ldt = 278 semester = 'v07' emnekode = 'Inf1000' 299 andre studenter: 278 studenter: INF1050-ansvar-32