Uke 12: Oversikt ver frelesningene Fra analyse til bjektdesign Onsdag 12/3: Kravspesifikasjn g bjektrientert analyse Hva skal systemet gjøre? Hva er krav? Hvem g hva påvirker krav? Ansvarsdrevet OO: CRC g UML Sekvensdiagrammer UML: Bruksmønstermdeller Fredag 14/3: Ansvarsdrevet OO (Inf102 metden) Hvrdan skal systemet fungere? UML: Sekvensdiagrammer CRC: Hvrdan finne gde bjekter? Hva er Objekt-Orientert Analyse g Design? INF102-ansvar-1 INF102-ansvar-2 Metde fr ansvarsdrevet OO Utfrdringen i å lage OO-mdeller Inf102 metden (Iterativ): Analyse (1) Identifiser aktører g deres mål (2) Lag et høynivå bruksmønsterdiagram (3) Spesifiser hvert bruksmønster tekstlig med nrmal hendelsesflyt g variasjner Design (ansvarsfrdeling) (4) Identifiser bjekter g frdel ansvar mellm dem (CRC) (5) Lag sekvensdiagram fr viktige bruksmønstre (6) Klassediagram på bruksmønsternivå Finne bjekter g frdele ansvar mellm dem på en slik måte at mgivelsenes frventninger blir ppfylt (7) Klassediagram på systemnivå INF102-ansvar-3 INF102-ansvar-4
Hvrdan finne bjekter? Figur 10-1. CRC-krt Ta først utgangspunkt i språket til dmenet (prblemmrådet): F.eks. prdukt, ingrediens, kunde, student, knt, innskudd Bruk bruksmønster spesifikasjnene Du kan gså bruke språket til prgrammerere: F.eks. register, transaksjn, liste, vindu, meny Men det er fte viktigst i neste iterasjn av designet Lag CRC-krt fr bjektene Lag sekvensdiagram fr bjektene Navn på bjektet Ansvar: Hva bjektet må vite Hva bjektet skal gjøre Liste ver samarbeidende bjekter (bjekter sm kan delegeres ppgaver) INF102-ansvar-5 INF102-ansvar-6 Design med sekvensdiagrammer Figur 10-3. Eksempel på sekvensdiagram Et UML sekvensdiagram viser en interaksjn mellm bjekter i systemet fr et bruksmønster Fkuserer på hvrdan bjektene samarbeider fr å løse en bestemt ppgave Objekt:Klasse attributter metder( ) Objekt:Klasse attributter metder( ) Er fte nyttig fr å identifisere metdene til bjektene i systemet Men hvrdan finner man bjektene?? T hvedtyper: returverdi := melding (parametre) Objektet må ha en metde sm kan ta hånd m meldingen Objektets aktive peride Design av nrmal hendelsesflyt i et bruksmønster Design av en bestemt variasjn i et bruksmønster Returmelding. Vises vanligvis ikke i diagrammet Objektet fjernes det trengs ikke lenger INF102-ansvar-7 INF102-ansvar-8
Sammenheng mellm bruksmønster g sekvensdiagram Eks.: Design av (del)system fr kursregistrering Fr hvert bruksmønster lager du (i de aller fleste tilfeller) et sekvensdiagram fr nrmal hendelsesflyt Fr hver variasjn kan du velge å lage et nytt sekvensdiagram. Meld på kurs Lag kursbeskrivelse K ursadm inistra tr Det er viktig å lage sekvensdiagram fr variasjner sm har str innvirkning på designet Intrduserer variasjnen nye bjekter? B etal semesteravgift Behandle dispensasjnssøknad Intrduserer variasjnen nye metder? INF102-ansvar-9 INF102-ansvar-10 Aktør: Spesifikasjn av Meld på kurs Trigger: ønsker å melde seg på et kurs Pre-betingelse: har betalt semesteravgift g er lgget inn på systemet Pst-betingelse: er meldt på kurset eller student har sendt søknad m dispensasjn Nrmal Hendelsesflyt: 1. en gir pplysinger m kurs 2. Systemet sjekker m det er ledig plass på kurset 3. Systemet sjekker at studenten kvalifiserer til å ta kurset 4. Systemet registrerer studenten på kurset g ppdaterer antall ppmeldte på kurset Spesifikasjn av Meld på kurs (frts.) Variasjner: 1a. Ugyldig kurs: 1. en prøver igjen 2a. et er fullt: 1. Systemet avslutter registreringen 3a. et frutsetter andre kurs: 1. Systemet sjekker m studenten har tatt kursene 1a. en har tatt kursene sm frutsettes: 1. Systemet frtsetter registreringen 1b. en har IKKE tatt kursene sm frutsettes 1. Systemet spør m studenten ønsker å søke m dispensasjn 2. INF102-ansvar-11 INF102-ansvar-12
Figur 10-2. CRC-krt fr Meld på kurs (freløpig) Nrmal hendelsesflyt fr Meld på kurs Registrerings- Vindu Ta i mt g frmidle meldinger fra aktør g system Registrering Registrering Hlde styr på hendelsesfrløpet (krdinerer mellm kantbjektet g frretningsbjekt er) Registrerings- Vindu Register Påmelding Register Vet hvilke kurs sm finnes : : RegistreringsVindu 1: "Angi kurs" 2: MeldPå(student, kurs) : Registrering kurstilbudet : 3: Gyldig(kurs) kurset : 4: [gyldigkurs=true] EretFullt() Vet når g hvr et kurs hldes Vet maks antall påmeldinger g antall påmeldt Vet mitt navn g kursbeskrivelse Vet hvilke kurs sm frutsettes Påmelding Vet hvilket kurstilbud en bestemt student er påmeldt på Vet navn, sv. Vet hvilke kurs jeg har tatt Påmelding 10: "en er påmeldt" 9: MeldPå=true 5: [EretFullt = false] Frutsetter() : Påmelding 6: SmFrutsettes 7: [Frutsetter=false] new(student, kurset) 8: ØkAntallPåmeldt() INF102-ansvar-13 INF102-ansvar-14 Variasjn 3a.1.1a: frutsetter andre kurs Tre typer bjekter : RegistreringsVindu : Registrering kurstilbudet : : 1: "Angi kurs" 2: MeldPå(student, kurs) kurset : : Kantbjekter (grensesnittbjekter, interface bjects ) Aktiveres uten kjente stimuli (stimuli er utenfr systemet) Et bruksmønster bruker minst ett kantbjekt 3: Gyldig(kurs) Kntrllbjekter ( cntrl bjects ) 4: [gyldigkurs=true] EretFullt() 5: [EretFullt=false] Frutsetter() 6: SmFrutsettes Representerer ne sm gjøres i virksmheten. En kntrllbjekt lever vanligvis ikke lenger enn det handlingsfrløpet det inngår i I Inf102 lager vi ett kntrllbjekt pr. bruksmønster. 7: [Frutsetter=true] HarDu(SmFrutsettes) 8: [HarDu=true] new(student, kurset) : Påmelding Frretningsbjekter ( business bjects, entity bjects ) 10: MeldPå=true 11: "en er påmeldt" 9: ØkAntallPåmeldt() Representerer de tingene virksmheten håndterer, så sm vare, tilbud, rdre, kunde sv. En frekmst av et frretningsbjekt kan leve lenge - kanskje like lenge sm virksmheten! INF102-ansvar-15 INF102-ansvar-16
: Eks.: Meld på kurs Kntrllbjekt : RegistreringsVindu : Registrering kurstilbudet : 1: "Angi kurs" 2: MeldPå(student, kurs) kurset : Frretnings -bjekt ReCycle bruksmønsterdiagram Definer prdukt Kmpner prdukt "Prdukt" brukes sm synnym fr sykkel eller sykkeldel 3: Gyldig(kurs) Prdusent Dekmpner prdukt 4: [gyldigkurs=true] EretFullt() Definer bruker Kantbjekt 5: [EretFullt = false] Frutsetter() 6: SmFrutsettes : Påmelding Sjekk bestillinger Legg prdukt ut fr salg Administratr 7: [Frutsetter=false] new(student, kurset) 8: ØkAntallPåmeldt() Depner prdukt 9: MeldPå=true 10: "en er påmeldt" Kjøp prdukt Betalingssystem Frbruker INF102-ansvar-17 INF102-ansvar-18 Spesifikasjn av dekmpner prdukt Aktør: Gjenvinner Trigger: Aktør ønsker å splitte pp (dekmpnere) et prduktindivid i dets bestanddeler. Det kan fr eksempel skyldes at en bruker har lagt inn en bestilling på en del sm et bestemt prduktindivid på lageret består av. Gjenvinner ønsker derfr å dekmpnere slik at bestanddelen sm er bestilt deretter fr eksempel kan legges ut fr salg. Figur 10-2. CRC-krt fr Dekmpner Prdukt (freløpig) BrukerGrensesnitt Ta i mt g frmidle meldinger fra aktør g system Dekmpner- Prdukt DekmpnerPrdukt Hlde styr på hendelsesfrløpet (krdinerer mellm kantbjektet g frretningsbjekter) Brukergrensesnitt Nrmal Hendelsesflyt: 1. Systemet lager liste ver definerte prdukter 2. Gjenvinner angir prdukt 3. Systemet returnerer liste ver de prduktindividene sm finnes på lageret 4. velger det prduktindividet sm skal dekmpneres 5. Systemet lager et nytt prduktindivid fr alle bestanddelene til det pprinnelige prduktindividet g registrerer at hvert delprduktindivid nå finnes tilgjengelig hs Gjenvinner 6. Systemet fjerner det pprinnelige prduktindividet Variasjner: <Ingen viktige. Utsatt spesifikasjn til neste iterasjn> Prdukt Vet hvilke bestanddeler jeg har Prdukt PrduktIndivid Vet hva slags prdukt jeg er Vet min kvalitet Prdukt Vet hvilke prduktindivider sm finnes på lager Prdukt- Individ INF102-ansvar-19 INF102-ansvar-20
Objektmdell før dekmpner acera_1 Sekvensdiagram fr dekmpner acera_1 kntrllbjektet : DekmpnerPrdukt acera : Prdukt acera_1 : PrduktIndivid per : acera_1 : Prduktindivid wf_6500 : Prdukt br88 : Prdukt wt_6500 : Prdukt "dekmpner" velger acera VisPrdukter per : acera : Prdukt wb_6500 : Prdukt pindivider:= FinnPrduktIndivider(acera) VisPrduktIndivider(pIndivider) acera_2 : Prduktindivid fr88x : Prdukt velger acera_1 DekmpnerMeg() lagdelprdukterfr(per) gf88x : Prdukt st88x : Prdukt lagprduktindivid(wf_6500) lagprduktindivid(wb_6500) lagprduktindivid(fr88x) lagprduktindivid(gf88x) lagprduktindivid(st88x) wf_6500_1 : PrduktIndivid wb_6500_1 : PrduktIndivid fr88x_1 : PrduktIndivid gf88x_1 : PrduktIndivid st88x_1 : PrduktIndivid INF102-ansvar-21 INF102-ansvar-22 Objektmdell etter dekmpner acera_1 wf_6500_1 : Prduktindivid wb_6500_1 : Prduktindivid wf_6500 : Prdukt wb_6500 : Prdukt br88 : Prdukt wt_6500 : Prdukt fr88x_1 : Prduktindivid fr88x : Prdukt per : gf88x_1 : Prduktindivid gf88x : Prdukt st88x_1 : Prduktindivid st88x : Prdukt acera_2 : Prduktindivid acera : Prdukt INF102-ansvar-23