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

Like dokumenter
Fra krav til objektdesign

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

Ansvarsdrevet OO: CRC og UML Sekvensdiagrammer

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

NB! Endring i undervisningsplanen

Beskjed fra Skagestein

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

UML klassediagrammer

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

Utvikling fra skallet og inn

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

UML-Unified Modeling Language

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

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

Kursregistrering bruksmønstermodell

INF1000: Forelesning 7

UKE 11 UML modellering og use case. Gruppetime INF1055

INF1000: Forelesning 7. Konstruktører Static

Produktrapport Gruppe 9

OPPGAVE 5b og 8b Java Kode

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

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

UML 1. Use case drevet analyse og design Kirsten Ribu

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

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

Eksamen INF1050: Gjennomgang, uke 15

UNIVERSITETET I OSLO

Fra krav til objekter. INF1050: Gjennomgang, uke 05

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

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

Use case drevet design med UML

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

OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK

Use Case-modellering. INF1050: Gjennomgang, uke 04

INF 1050 BRUK AV MODELLERINGSVERKTØYET RATIONAL ROSE

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

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

INF1000: Forelesning 6. Klasser og objekter del 1

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

Introduksjon til objektorientert programmering

Gjennomgang av eksamen H99

INF1010 våren januar. Objektorientering i Java

UNIVERSITETET I OSLO

INF1000: noen avsluttende ord

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

UNIVERSITETET I OSLO

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

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

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

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

Universitetet i Bergen Det matematisk-naturvitenskapelige fakultet Institutt for informatikk

Fra problem til program

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

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

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

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

Objektorientering og UML. INF1050: Gjennomgang, uke 06

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

UNIVERSITETET I OSLO

INF1000 Metoder. Marit Nybakken 16. februar 2004

UNIVERSITETET I OSLO

Velkommen til. INF våren 2017

(MVC - Model, View, Control)

UNIVERSITETET I OSLO

Planlegging og dokumentasjon

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

class Book { String title; } class Dictionary extends Book { int wordcount; } class CartoonAlbum extends Book { int stripcount; }

lfæ~~~~:::j~~:~l -.~=:~-t::-d I Alle trykte og håndskrevne EKSAMENSOPPGA VE Side l av 5 Eksamenstid:

Eksamen 2013 Løsningsforslag

Objektorientert design av kode. Refaktorering.

INF106 Objektorientert programmering

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

Trafikanten + Innlevering oblig 1 INF2120 Våren Versjon 1

INF Seminaroppgaver til uke 3

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

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

UNIVERSITETET I OSLO

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

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

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

Løsningsforslag til eksamen i INF1000 våren 2006

UNIVERSITETET I OSLO

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

IN1010 våren januar. Objektorientering i Java

UNIVERSITETET I OSLO

Prosjektrettet systemarbeid

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

INF1010 MVC i tekstbaserte programmer

INF1000: noen avsluttende ord

Eksamen INF1010 V2009 Del B prøveeksamen V2010 Vekt 60 %

Transkript:

Dagens forelesning o Kort repetisjon av kravspesifikasjon med UML Fra krav til objektdesign Hva skal systemet gjøre? UML: Bruksmønstermodeller 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 (ny versjon) Spesifikasjon av Lag emne Navn: Lag emne Aktør: administrator Trigger: administrator ønsker å opprette eller endre et emne Normal Hendelsesflyt: 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 Variasjoner: 2a. koden eksisterer ikke: 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

Revidert spesifikasjon av Meld på kurs Navn: Meld på kurs Aktør: Trigger: ønsker å melde seg på et kurs Pre-betingelse: har betalt semesteravgift og er logget inn på systemet Post-betingelse: er meldt på kurset eller er satt på venteliste Normal Hendelsesflyt: 1. en velger emne 2. Systemet sjekker at studenten kvalifiserer 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.) Variasjoner: 1a. t finnes ikke: 1. en velger et annet emne eller avslutter 2a. t forutsetter andre emner: 1. Systemet sjekker at studenten har bestått kurs for emner som forutsettes 1a. en har ikke bestått kurs for emner som forutsettes: 1. en velger et annet emne eller avslutter 3a. Det holdes ikke kurs i emnet dette semesteret: 1. en velger et annet emne eller avslutter 4a. et er fullt: 1. Systemet spør om studenten ønsker å bli satt på venteliste 1a. en ønsker å bli satt på venteliste: 1. Systemet setter studenten på venteliste Relatert informasjon: I denne versjonen holdes administrasjon av gruppeundervisning utenfor systemet 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 normal hendelsesflyt og variasjoner Objektdesign For hvert bruksmønster: (4) Identifiser objekter og fordel ansvar mellom dem (CRC) 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. Virkelighetens objekter er dyr, planter, maskiner og mekanismer. I modeller er alt mulig - også å bevisstgjøre i utgangspunktet døde ting som innsjøer, veier, kommuner, firmaer, lån... (5) Lag sekvensdiagram for normal hendelsesflyt 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 objekter 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 o Finn begreper i bruksmønsterspesifikasjonene! Lag CRC-kort for objektene du tror du trenger Lag sekvensdiagrammer for bruksmønstrene Kantobjekter ( 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 = navnet på bruksmønsteret! INF1050-ansvar-13 INF1050-ansvar-14 Kantobjekter (boundary objects) CRC-kort (Class-Responsibility-Collaboration) Kantobjekter 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. Kantobjektet oppretter deretter en forekomst av kontrollobjektet som kontrollerer selve handlingsforløpet i bruksmønsteret Vi kan godt tenke på kantobjekter som bindeleddet mellom et uspesifisert brukergrensesnitt og et kontrollobjekt. Kantobjekter kommuniserer kun med aktører (via brukergrensesnittet) og kontrollobjekter. Navn på objektet <<type objekt>> Ansvar: Hva objektet må vite Hva objektet skal gjøre Liste over samarbeidende objekter (objekter som kan delegeres oppgaver) INF1050-ansvar-15 INF1050-ansvar-16

Eks: CRC-kort for 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å + andre ansvarsområder: Vil bli tydeligere etter hvert som man designer bruksmønstre ved hjelp av sekvensdiagrammer Eks: CRC-kort for Universitet Objektorienterte systemer inneholder ofte et slikt oppslagsobjekt Universitet 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 Kant <<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 Universitet Kant Universitet Oppslagsobjekt som vet hvilke emner og studenter som finnes i systemet 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å Vet min emnekode Vet hvilke emner som forutsettes Vet hvordan man finner kurs 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: Klasse1 objekt1; if (betingelser) { returverdi = objekt1.metode(parametere) Klassen til objektet må ha en metode som kan ta hånd om meldingen [betingelser] returverdi := metode (parametere) Meldingens aktive periode objekt1:klasse1 objekt2:klasse2 Sammenheng mellom bruksmønster og sekvensdiagram For hvert bruksmønster lager du (i de aller fleste tilfeller) et sekvensdiagram for normal hendelsesflyt For hver variasjon 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 (iterasjon #1, uten forretningsobjektene) NB! Korrekt UML notasjon er kantobjektet:kant og meldpaa:meldpaa (Eksempel på Java kode for metoden meldpaa til kantobjektet) public class Kant { boolean meldpaa(string studentid, String emnekode, String semester) { // message #1.1 (det kan tenkes at kontrollobjektet må sende meldinger til // kantobjektet. Derfor sendes kantobjektet (this) inn som parameter til // kontrollobjektets constructor): MeldPaa meldpaa = new MeldPaa(this); Lager en instans av kontrollobjektet (<<create>> i UML => new i Java) // message #1.2 (her utføres selve logikken i bruksmønsteret): boolean ok = meldpaa.meldpaa(studentid, emnekode, semester); return ok; INF1050-ansvar-23 INF1050-ansvar-24

(Eksempel på Java kode for metoden meldpaa til kontrollobjektet) public class MeldPaa { public boolean meldpaa(string studentid, String emnekode, String semester) NB! Returverdien = studentobjektet { // antar at objektet universitetet er tilgjengelig: Normal hendelsesflyt: 1. en velger emne (1 1.2.2) 2. Systemet sjekker at studenten kvalifiserer til å ta emnet (1.2.3) 3. Systemet finner kurset for emnet (1.2.4) 4. Systemet sjekker om det er ledig plass på kurset (1.2.5) 5. Systemet registrerer studenten på kurset (1.2.6 og 1.2.7) CRC kortene forteller deg hvilket objekt som skal motta en bestemt melding studenten = universitetet.finn(studentid); // message #1.2.1 emnet = universitetet.finn(emnekode); // message #1.2.2 boolean forutsetteremner = emnet.forutsetterr(); // message #1.2.3 kurset = emnet.finn(semester); // message #1.2.4 boolean erledigplass = kurset.ledigplass(); // message #1.2.5 boolean paameldingok = kurset.meldpaa(studenten); // message #1.2.6 studenten.ermeldtpaa(kurset); // message #1.2.7 INF1050-ansvar-25 INF1050-ansvar-26 (ytterligere detaljering: sekvensdiagram med betingelser) INF1050-ansvar-27 (Eksempel på Java kode for metoden meldpaa fra forrige sekvensdiagram) public class MeldPaa { // i Inf1050 bruker vi konvensjonen at betingelsene også gjelder de resterende meldinger i sekvensdiagrammet, dvs: public boolean meldpaa(string studentid, String emnekode, String semester) { studenten = universitetet.finn(studentid); // message #1.2.1 if (studenten!= null) { emnet = universitetet.finn (emnekode); // message #1.2.2 if (emnet!= null { boolean forutsetteremner = emnet.forutsetterr(); // message #1.2.3 if (forutsetteremner == false) { kurset = emnet.finn(semester ); // message #1.2.4 if (kurset!= null) { boolean erledigplass = kurset.ledigplass(); // message #1.2.5 if (erledigplass == true) { boolean paameldingok = kurset.meldpaa(studenten); // message #1.2.6 if (paameldingok == true) { studenten.ermeldtpaa(kurset); // message #1.2.7 else { <de forskjellige variasjonene som sekvensdiagrammet IKKE definerer> INF1050-ansvar-28

Variasjon 4a.1.1a.1 (kurset er fullt og studenten ønsker å sette seg på venteliste) public class MeldPaa { Variasjon 4a.1.1a.1 (kurset er fullt og studenten ønsker å sette seg på venteliste private Kant kantobjektet; public boolean meldpaa(string studentid, String emnekode, String semester) { // SAMME KODE SOM PÅ FOIL 28 FRAM TIL MESSAGE 1.2.5, OG DERETTER: boolean erledigplass = kurset.ledigplass(); // message #1.2.5 if (erledigplass == false) { boolean vilvente = kantobjektet..oenskerventeliste(); // message #1.2.6 if (vilvente == true) { boolean ventelisteok = kurset.settventeliste(studenten); // message #1.2.7 if (ventelisteok == true) { studenten.erpaaventeliste(kurset); // message #1.2.8 4a. et er fullt (1.2.5): 1. Systemet spør om studenten ønsker å bli satt på venteliste (1.2.6) 1a. en ønsker å bli satt på venteliste (1.2.6): 1. Systemet setter studenten på venteliste (1.2.7 og 1.2.8) INF1050-ansvar-29 INF1050-ansvar-30