UML klassediagrammer

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

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

Beskjed fra Skagestein

NB! Endring i undervisningsplanen

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

Ansvarsdrevet OO: CRC og UML Sekvensdiagrammer

Spesifikasjon av Lag emne

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

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

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

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

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

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

Fra krav til objekter. INF1050: Gjennomgang, uke 05

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

INF 1050 BRUK AV MODELLERINGSVERKTØYET RATIONAL ROSE

UML-Unified Modeling Language

Use Case-modellering. INF1050: Gjennomgang, uke 04

Utvikling fra skallet og inn

UKE 11 UML modellering og use case. Gruppetime INF1055

Objektorientert design av kode. Refaktorering.

INF1000: Forelesning 7

Kravspesifikasjon med UML use case modellering. Erik Arisholm

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

Eksamen INF1050: Gjennomgang, uke 15

Use case drevet design med UML

Objektorientering og UML. INF1050: Gjennomgang, uke 06

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

UNIVERSITETET I OSLO

INF1000: Forelesning 7. Konstruktører Static

OPPGAVE 5b og 8b Java Kode

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

Satsvise, interaktive, sanntids/innbakte systemer. Arne Maus, Ifi. Oppdeling av både program og data på flere maskiner

UML 1. Use case drevet analyse og design Kirsten Ribu

UNIVERSITETET I OSLO

GJENNOMGANG UKESOPPGAVER 7 REPETISJON

Mer om objektorientering og UML

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

Mer$om$objektorientering$og$UML

GJENNOMGANG UKESOPPGAVER 6 MER OM OBJEKTORIENTERING OG UML

Arne Maus, Ifi. delvis lån av gamle foiler

Gjennomgang av eksamen H99

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

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

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

Mer om objektorientering og UML

IN2001: Kravhåndtering, modellering, design

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

(MVC - Model, View, Control)

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Kravspesifikasjon med. UML diagrammer. systemutvikling. Dokumentasjon av systemets krav, arkitektur, design og implementasjon

Kravspesifikasjon med. Erik Arisholm

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

EKSAMEN I FAG TDT4100 Objekt-orientert programmering. Fredag 3. juni 2005 KL

Læringsmål for forelesningen

Unified Modeling Language (UML) Kravspesifikasjon med UML use case modellering. UML diagrammer. Notasjon som støtter opp under modellbasert

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

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

INF1050 Systemutvikling

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

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

Enkle generiske klasser i Java

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

Løsningsforslag til eksamen i INF1000 våren 2006

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

UNIVERSITETET I OSLO

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

Oppgave 1: Multiple choice (20 %)

Objektorientert design av kode. Refaktorering.

Fra krav til modellering av objekter

Transkript:

UML klassediagrammer Erik Arisholm INF1050-klasser-1

INF1050-klasser-2

INF1050-klasser-3

Dagens forelesning o Litt mer om design med UML sekvensdiagrammer Sentralisert og delegert kontrollstil Resultater fra et eksperiment o UML klassediagrammer Notasjon: UML klassediagram og objektdiagram Metode: Fra sekvensdiagram til klassediagram INF1050-klasser-4

Metode for ansvarsdrevet OO med UML 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: (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-klasser-5

Delegering av ansvar i en trelagsarkitektur Forretningsobjekter ( entity objects ) Kontrollobjekter ( control objects ) Kantobjekter ( boundary objects ) Hvor mye ansvar bør kontrollobjektene ha, og i hvilken grad bør vi bevisstgjøre forretningsobjektene våre?? INF1050-klasser-6

Hovedflyt for Meld på kurs Objektet som returneres av finnemne Objektet som returneres av Emne::finn Objektet som returneres av finn kantobjektet: Kant universitetet: Universitet emnet: Emne kurset: studenten: ok:=meldpaa(studentid, emnekode, semester) <<create>> meldpaa: MeldPaa ok:=meldpaa(studentid, emnekode, semester) 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:=finnemne(emnekode) forutsetter:=forutsetteremner() kurset:=finn(semester) erledigplass:=ledigplass() paameldingok:=meldpaa(studenten) ermeldtpaa(kurset) INF1050-klasser-7

Hovedflyt for Meld på kurs (Eksempel på Java kode for metoden meldpaa i en sentralisert kontrollstil) public class MeldPaa { public boolean meldpaa(string studentid, String emnekode, String semester) { } // antar at objektet universitetet er tilgjengelig: studenten = universitetet.finn(studentid); Emne emnet = universitetet.finnemne(emnekode); boolean forutsetter = emnet.forutsetteremner(); kurset = emnet.finn(semester); t boolean erledigplass = kurset.ledigplass(); boolean paameldingok = kurset.meldpaa(studenten); studenten.ermeldtpaa(kurset); return paameldingok; } INF1050-klasser-8

Hovedflyt for Meld på kurs (delegert kontrollstil: til Emne og har overtatt tt mye av ansvaret fra kontrollobjektet) kt t) kantobjektet: Kant universitetet: Ui Universitet itt emnet: kurset: studenten: Emne t ok:=meldpaa(studentid, emnekode, semester) <<create>> meldpaa: MeldPaa ok:=meldpaa(studentid, emnekode, semester) studenten:=finn(studentid) emnet:=finnemne(emnekode) ok:=meldpaa(studenten, semester) forutsetter:=forutsetteremner() kurset:=finn(semester) ok:=meldpaa(studenten) erledig:=ledigplass() ermeldtpaa(kurset) INF1050-klasser-9

Hovedflyt for Meld på kurs (Eksempel på Java kode for metoden meldpaa i en delegert kontrollstil) public class MeldPaa { } public boolean meldpaa(string studentid, String emnekode, String semester) { } // antar at objektet universitetet er tilgjengelig: studenten = universitetet.finn(studentid); Emne emnet = universitetet.finnemne(emnekode); boolean ok = emnet.meldpaa(studenten, semester); return ok; INF1050-klasser-10

Resultater fra et kontrollert eksperiment (*) Design Design 110 DC CC 100 DC CC (minutes) Mean Effort 100 90 80 70 olutions % Correct S 50 0 Undergraduate Graduate Junior Intermediate Senior Undergraduate Graduate Junior Intermediate Senior DC = Delegated Control Style CC = Centralized Control Style Totalt 158 Java-utviklere deltok, og skulle gjøre endringer på enten et DC eller et CC design alternativ for det samme systemet. Vi målte tid ( Mean Effort ) og kvalitet ( % correct solutions ) Kun seniorkonsulentene hadde klare fordeler av et delegert (DC) design * Erik Arisholm and Dag Sjøberg, Evaluating the Effect of a Delegated versus Centralized Control Style on the Maintainability of Object-Oriented Software, IEEE Transactions on Software Engineering, 2004 INF1050-klasser-11

Delegert vs sentralisert kontrollstil Sentralisert kontrollstil: o Lett å få oversikt over hva som skjer i et bruksmønster o Feilsituasjoner/variasjoner som krever tilbakemeldinger fra en aktør (via kantobjektene) kan enkelt håndteres av kontrollobjektet o Introduserer flere avhengigheter mellom kontrollobjekt og forretningsobjekter. Potensielt mindre gjenbrukbar/vedlikeholdbar kode Delegert kontrollstil: o Mer elegant objektorientert design, men: o Overdreven bruk av delegering gjør det vanskelig å få oversikt (spesielt dersom sekvensdiagrammer ikke er tilgjengelige!) o Litt mer komplisert å håndtere feilsituasjoner/variasjoner som krever tilbakemeldinger fra en aktør (siden all kommunikasjon med kantobjektene må gå via kontrollobjektene) INF1050-klasser-12

UML Klasser og objekter Klasse -attributt1 -attributt2 +metode1() #metode2( ) + betyr public - betyr private #b betyr protected t Objekt:Klasse -attributt1 aggregering = verdi -attributt2 = verdi sammensetning En klasse beskriver hva objektene vet (tilstand/attributter) og hvilke meldinger de forstår (metoder). Objektene er forekomster av klassebeskrivelsen. INF1050-klasser-13

Assosiasjoner mellom to klasser Ansatt 0..1 er tildelt 0..1 Parkeringsplass (maks en til en) Emne 1 undervises i 0..* (en til mange, g, hvor emne vet om kurs) 0* 0..* er meldt på 0* 0..* (mange til mange, hvor kurs vet om sine studenter, student vet om sine kurs ) Indikator Antall forekomster 0..1 Null eller 1 1 nøyaktig 1 n nøyaktig n 0..* 0 eller flere * 0 eller flere 1..* 1 eller flere 1..n 1 eller flere (<= n) INF1050-klasser-14

Universitet -navn +finnansatt (fødselsnr): Person +finn (fødselsnr): Person Roller 0..1 0..* arbeidsgiver ansatt 0..1 0..* studieplass student Person -navn - fødselsnr +... En person kan ha rollen som ansatt på maks ett universitet it t En person kan ha rollen som student på maks ett universitet (men Per kan godt være student på UiO og ansatt ved NTNU) rapporterer til 0..* Ansatt En ansatt rapporterer til maks en annen ansatt, som er sjef 0..1 sjef INF1050-klasser-15

Arv -navn Universitet +finnperson(fødselsnr): Person 1 0..* Person - navn - fødselsnr +... Ansatt -ansattid - stillingskode +... -studentid +... INF1050-klasser-16

Attributter eller klasser? Ansatt - ansattid - stillingskode +... Ansatt Stilling 0..* 1 - ansattid - stillingskode +... +... Ved å utvide stillingskode-attributtet til å bli en egen klasse (Stilling) kan man definere andre attributter og metoder som har spesielt med stillinger å gjøre INF1050-klasser-17

Klassediagram vs objektdiagram Emne - emnekode: String - <andre attributter> + finn (semester): + <andre metoder> 1 undervises i 0..* emnets - antallplasser: int - antallpaameldt: int - semester: String + ledigplass(): boolean + <andre metoder> Multiplisitetene i klassediagrammet forteller oss at vi kan ha emner uten kurs, men ikke kurs uten emne Inf1000 : Emne emnekode = 'Inf1000' undervises i Inf1000h07 : antallpaameldt = 311 antallplasser = 400 semester = 'v07' Inf1050 : Emne emnekode = 'Inf1050' Inf9001 : Emne emnekode = 'Inf9001' undervises i undervises i Inf1050v07 : antallpaameldt = 278 antallplasser = 300 semester = 'v07' Inf1050v08 : antallpaameldt = 299 antallplasser = 300 semester = 'v08' INF1050-klasser-18

Infostoff: Eks. på realisering i Java Emne - emnekode: String - <andre attributter> + finn (semester): + <andre metoder> 1 undervises i 0..* emnets - antallplasser: int - antallpaameldt: int - semester: String + ledigplass(): boolean + <andre metoder> emnets:hashmap Inf1050v05: Inf1050: Emne 'v05' 'v06' 'v07' 'v08' Inf1050v06: Inf1050v07: Inf1050v08: INF1050-klasser-19

Infostoff: Eks. på realisering i Java Emne - emnekode: String - <andre attributter> + finn (semester): + <andre metoder> 1 undervises i 0..* emnets tk - antallplasser: int - antallpaameldt: int - semester: String + ledigplass(): boolean + <andre metoder> public class Emne { } private String emnekode; <andre attributter>; private HashMap emnets = new HashMap(); finn(string semester) { } kurset; kurset = () emnets.get(semester); return kurset; <andre metoder> INF1050-klasser-20

Sammenhengen mellom sekvensdiagram og klassediagram Start med sekvensdiagrammet for hovedflyt: o Lag klasser for alle objektene i sekvensdiagrammet. o For hver melding til et bestemt objekt i sekvensdiagrammet: Legg til en tilsvarende metode for klassen til dette objektet. o Legg til de attributtene som hver av disse metodene trenger o Lag nødvendige assosiasjoner for at klassene skal kunne utføre sine metoder (f.eks. sende meldinger til andre objekter) For hvert sekvensdiagram for en variasjon: o Utvid klassediagrammet med nye klasser, metoder, attributter og assosiasjoner i klassediagrammet basert på meldingene i sekvensdiagrammet for variasjonen. INF1050-klasser-21

registrering bruksmønstermodell Meld på kurs Lag Emne Meld av kurs Lag administrator Betal semesteravgift Registrer eksamensresultat Skiller mellom "Emne" (f.eks. Inf1050) og "" i emnet (Inf1050 v08) Variasjon for "Lag Emne": 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 INF1050-klasser-22

Tekstlig spesifikasjon av Meld på kurs Navn: Meld på kurs Aktør: Prebetingelse: har betalt semesteravgift Postbetingelse: er meldt på 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 INF1050-klasser-23

Alternativ flyt, steg 1: Emnet finnes ikke: A.1.1 Bruksmønsteret avsluttes Meld på kurs (forts.) Alternativ flyt, steg 2: Emnet 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-klasser-24

CRC-kort for bruksmønsteret Meld på kurs Kant <<boundary>> Kommuniserer med aktøren og kontrollobjektet MeldPaa Universitet <<entity>> Oppslagsobjekt som vet hvilke emner og studenter som finnes i systemet t Emne Emne <<entity>> Vet min emnekode Vet hvilke emner som forutsettes Vet hvordan man finner kurs i emnet Emne MeldPaa <<control>> Kontrollerer hendelses- forløpet i bruksmønsteret Meld på kurs Universitet Emne Kant <<entity>> 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å <<entity>> 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 INF1050-klasser-25

Normal hendelsesflyt for Meld på kurs kantobjektet: Kant universitetet: Universitet emnet: Emne kurset: studenten: ok:=meldpaa(studentid, emnekode, semester) <<create>> meldpaa: MeldPaa ok:=meldpaa(studentid, d tid emnekode, semester) studenten:=finn(studentid) emnet:=finnemne(emnekode) e e(e e forutsetter:=forutsetteremner() kurset:=finn(semester) erledigplass:=ledigplass() paameldingok:=meldpaa(studenten) ermeldtpaa(kurset) INF1050-klasser-26

Klasser involvert i hovedflyt Emne Universitet Kant MeldPaa 1) Inkluder klassene du finner i sekvensdiagrammet INF1050-klasser-27

Metoder og attributter for hovedflyt Kant MeldPaa Emne - emnekode: String - antallemnerforutsettes; int +finn: + forutsetteremner: boolean Universitet + finn: t t + finnemne: Emne + meldpaa:boolean + meldpaa:boolean - antallplasser: int t - antallpaameldt: int - studentid: String - semester: String + ermeldtpaa: void + ledigplass: boolean + meldpaa: boolean 2) Inkluder metodene som ble brukt i sekvensdiagrammet 3) Inkluder attributter som metodene trenger INF1050-klasser-28

Komplett klassediagram for hovedflyt Kant MeldPaa Emne - emnekode: String - antallemnerforutsettes; int + finn: + forutsetteremner: boolean 1 0..* 1 Universitet + finn: + finnemne: Emne 1 + meldpaa:boolean + meldpaa:boolean 0..* - antallplasser: int - antallpaameldt: int - semester: String +ledigplass: boolean + meldpaa: boolean 0.. * 0..* kursdeltaker 0..* - studentid: String + ermeldtpaa: void 4) Inkluder assosiasjoner som metodene trenger (bruker eller oppretter) 5) Inkluder avhengighetspiler mellom klassene som utveksler meldinger INF1050-klasser-29

Alternativ flyt, steg 4 (kurset er fullt og studenten ønsker å sette seg på venteliste) kantobjektet: Kant universitetet: Universitet emnet: kurset: studenten: Emne ok:=meldpaa(studentid, emnekode, semester) <<create>> meldpaa: MldP MeldPaa ok:=meldpaa(studentid, emnekode, semester) studenten:=finn(studentid) emnet:=finnemne(emnekode) forutsetter:=forutsetteremner() kurset:=finn(semester) erledig:=ledigplass() [erledig==false] vilvente:=oenskerventeliste() [vilvente==true] okvent:=settventeliste(studenten) [okvent==true] erpaaventeliste(kurset) INF1050-klasser-30

Klassediagram for hovedflyt og alternativ flyt (steg 4) Kant + meldpaa:boolean + oenskerventeliste: boolean MeldPaa + meldpaa:boolean Emne -emnekode: Kd String - antallemnerforutsettes; int +finn: + forutsetteremner: boolean 1 0..* - antallplasser: int - antallpaameldt: int - semester: String + ledigplass: boolean + meldpaa: boolean + settventeliste:boolean 0..* 1 Universitet + finn: + finnemne: Emne 1 0..* 0..* 0..* kursdeltaker - studentid: String venteliste + ermeldtpaa: void + erpaaventeliste: void 0..* 0..* Legger til nye metoder og assosiasjoner for alternativ flyt INF1050-klasser-31

Alternativ flyt, steg 2 (Emnet forutsetter andre emner som studenten har bestått) kantobjektet: Kant universitetet: Universitet emnet: Emne kurset: studenten: ok:=meldpaa(studentid, emnekode, semester) <<create>> meldpaa: MeldPaa ok:=meldpaa(studentid, emnekode, semester) studenten:=finn(studentid) emnet:=finnemne(emnekode) forutsetter:=forutsetteremner() [forutsetter==true] emnene:=forutsettes() harbestaatt:=harbestaattefor(emnene) [harbestaatt==true] kurset:=finn(semester) erledigplass:=ledigplass() paameldingok:=meldpaa(studenten) ermeldtpaa(kurset) INF1050-klasser-32

Klassediagram for normal hendelsesflyt + alternativ flyt steg 2 og 4 Kant + meldpaa:boolean + oenskerventeliste: boolean MeldPaa emne som forutsettes 0..* + meldpaa:boolean Emne 0..* - emnekode: String Universitet 0..* 1 - antallemnerforutsettes; int +finn: + finn: + forutsetteremner: boolean +finnemne:emne + forutsettes: Emne[] 1 1 0..* 0..* 0..* 0..* - antallplasser: int - antallpaameldt: int 0..* kursdeltaker - studentid: String - semester: String venteliste 0..* + ldipl ledigplass: boolean + ermeldtpaa: void + meldpaa: boolean + erpaaventeliste: void 0..* 0..* + settventeliste:boolean bestått kurs + harbeståttefor:boolean Legger til nye metoder og assosiasjoner for alternativ flyt steg 2 INF1050-klasser-33

Klassediagram på systemnivå Lag Kant + meldpaa:boolean +oenskerventeliste: boolean LagEmne MeldPaa emne som forutsettes tt 0..* + meldpaa:boolean MeldAv BetalSemesteravgift RegistrerEksamensResultat Emne - emnekode: String - antallemnerforutsettes; int +finn: + forutsetteremner: boolean + forutsettes: Emne[] 1 0..* 0..* 1 Universitet + finn: + finnemne: Emne 1 0..* 0..* 0..* 0..* - antallplasser: int - antallpaameldt: int 0..* kursdeltaker - studentid: String - semester: String venteliste 0..* + ledigplass: boolean + ermeldtpaa: void + meldpaa: boolean + erpaaventeliste: void 0..* 0..* + settventeliste:boolean t t l bestått kurs + harbeståttefor:boolean De andre bruksmønstrene vil introdusere nye kontrollobjekter og evt. nye forretningsobjekter, samt nye assosiasjoner, metoder og attributter på eksisterende forretningsobjekter. Kantobjektet vil få flere metoder (antar ett kantobjekt i systemet) INF1050-klasser-34