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

Like dokumenter
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

Spesifikasjon av Lag emne

Ansvarsdrevet OO: CRC og UML Sekvensdiagrammer

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

o 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

UML klassediagrammer

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?

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

Mer$om$objektorientering$og$UML

Eksamen INF1050: Gjennomgang, uke 15

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

GJENNOMGANG UKESOPPGAVER 7 REPETISJON

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

UNIVERSITETET I OSLO

UML 1. Use case drevet analyse og design Kirsten Ribu

INF 1050 BRUK AV MODELLERINGSVERKTØYET RATIONAL ROSE

Eksamen 2013 Løsningsforslag

Produktrapport Gruppe 9

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

UNIVERSITETET I OSLO

INF 5120 Modellering med objekter

Mer om objektorientering og UML

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

OPPGAVE 5b og 8b Java Kode

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

Obligatorisk oppgave 5: Modellering av krav

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

INF1000: noen avsluttende ord

OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK

Introduksjon til objektorientert programmering

INF1000: Forelesning 6. Klasser og objekter del 1

UNIVERSITETET I OSLO

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

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

Løsningsforslag til eksamen i INF1000 våren 2006

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

Gjennomgang av eksamen H99

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

IN2001: Kravhåndtering, modellering, design

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

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

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?

INF1010 våren januar. Objektorientering i Java

UNIVERSITETET I OSLO

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

Eksamen INF

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

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Meeting Reservation System

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

Planlegging og dokumentasjon

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 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 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 flyt, steg 3: Det holdes ikke kurs i emnet dette semesteret: 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 Hva er et objekt 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: 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 ) 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 ) 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-ansvar-13 INF1050-ansvar-14 objekter aktiveres av handlinger fra aktører via brukergrensesnittet o objekter (boundary objects) 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 Har metode for å finne en gitt student Har metode for å finne et gitt emne INF1050-ansvar-17 INF1050-ansvar-18 <<boundary>> Kommuniserer med aktøren og kontrollobjektet MeldPaa <<control>> Kontrollerer hendelsesforlø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 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>> meldpaa: MeldPaa ok:=meldpaa(studentid, emnekode, semester) Lager en instans av kontrollobjektet 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 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); 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 ok:=meldpaa('12345', 'Inf1050', 'v08') UiO: Inf1050 : Inf1050v08: Per: Per : navn = "Per" studentid = "12345" Kari : navn = 'Kari' studentid = '44456' Inf1050 : emnekode = 'Inf1050' 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 Per : navn = "Per" studentid = "12345" Kari : navn = 'Kari' studentid = '44456' Inf1050 : emnekode = 'Inf1050' Inf1000 : emnekode = 'Inf1000' ok:=meldpaa(studentid, emnekode, semester) studenten:=finn(studentid) 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) Objektdiagram, etter at Kari ble satt på venteliste public class MeldPaa { private kantobjektet; UiO: public boolean meldpaa(string studentid, String emnekode, String semester) { studenten = universitetet.finn(studentid); emnet = universitetet.finn(emnekode); har har har har boolean forutsetteremner = emnet.forutsetterr(); kurset = emnet.finn(semester); boolean erledigplass = kurset.ledigplass(); if (erledigplass == false) { boolean vilvente = kantobjektet.oenskerventeliste(); if (vilvente == true) { Per : navn = "Per" studentid = "12345" Kari : navn = 'Kari' studentid = '44456' er på venteliste Inf1050 : emnekode = 'Inf1050' Inf1000 : emnekode = 'Inf1000' boolean okvent= kurset.settventeliste(studenten); if (okvent == true) { studenten.erpaaventeliste(kurset); return true; INF1050-ansvar-31 299 andre studenter: Inf1050v08 : antallpaameldt = 300 semester = 'v08' Inf1050v07 : antallpaameldt = 278 semester = 'v07' 278 studenter: INF1050-ansvar-32