Klassediagrammer (I)

Relaterede dokumenter
Opgaven fortsat. Opfølgning på Opgave 2 og Use Cases. Opgaven. Trin 1: Væsentlige begreber. Resultatliste: 100 bryst, herrer

Design by Contract Bertrand Meyer Design and Programming by Contract. Oversigt. Prædikater

IBM Network Station Manager. esuite 1.5 / NSM Integration. IBM Network Computer Division. tdc - 02/08/99 lotusnsm.prz Page 1

Design by Contract. Design and Programming by Contract. Oversigt. Prædikater

Vina Nguyen HSSP July 13, 2008

Tabelbegrebet. Klassediagrammer (III) Oversigt. Anvendelse af Tabeller. Tabeller og qualified associations

Privat-, statslig- eller regional institution m.v. Andet Added Bekaempelsesudfoerende: string No Label: Bekæmpelsesudførende

Det er muligt at chekce følgende opg. i CodeJudge: og

CHAPTER 8: USING OBJECTS

Software Construction 1 semester (SWC) Spørgsmål 1

Software 1 with Java. Recitation No. 7 (Servlets, Inheritance)

Fejlbeskeder i SMDB. Business Rules Fejlbesked Kommentar. Validate Business Rules. Request- ValidateRequestRegist ration (Rules :1)

Business Rules Fejlbesked Kommentar

Portal Registration. Check Junk Mail for activation . 1 Click the hyperlink to take you back to the portal to confirm your registration

Fejlbeskeder i Stofmisbrugsdatabasen (SMDB)

PARALLELIZATION OF ATTILA SIMULATOR WITH OPENMP MIGUEL ÁNGEL MARTÍNEZ DEL AMOR MINIPROJECT OF TDT24 NTNU

Bemærk, der er tale om ældre versioner af softwaren, men fremgangsmåden er uændret.

User Manual for LTC IGNOU

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

Brug sømbrættet til at lave sjove figurer. Lav fx: Få de andre til at gætte, hvad du har lavet. Use the nail board to make funny shapes.

Klasser og objekter. (Afsnit i manualen)

Design til digitale kommunikationsplatforme-f2013

Forelæsning Uge 3 Mandag

Basic statistics for experimental medical researchers

Aflevering af OIOXML-skemaer Dokumentation

Resource types R 1 1, R 2 2,..., R m CPU cycles, memory space, files, I/O devices Each resource type R i has W i instances.

MSE PRESENTATION 2. Presented by Srunokshi.Kaniyur.Prema. Neelakantan Major Professor Dr. Torben Amtoft

Bilag 2 og 3 og værktøjer

Project Step 7. Behavioral modeling of a dual ported register set. 1/8/ L11 Project Step 5 Copyright Joanne DeGroat, ECE, OSU 1

Aarhus Universitet, Science and Technology, Computer Science. Exam. Wednesday 27 June 2018, 9:00-11:00

SOFTWARE PROCESSES. Dorte, Ida, Janne, Nikolaj, Alexander og Erla

ArbejsskadeAnmeldelse

3C03 Concurrency: Model-based Design

Hvordan vælger jeg dokumentprofilen?

A Profile for Safety Critical Java

Generalized Probit Model in Design of Dose Finding Experiments. Yuehui Wu Valerii V. Fedorov RSU, GlaxoSmithKline, US

Forelæsning Uge 3 Mandag

Forelæsning Uge 3 Mandag

UML til kravspecificering

Tabeller (I) Tabeller

Shooting tethered med Canon EOS-D i Capture One Pro. Shooting tethered i Capture One Pro 6.4 & 7.0 på MAC OS-X & 10.8

Hvem er vi? Kursus Introduktion. Kursuslærerne. Agenda for i dag

Conceptual, logic, physical

b) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne.

Forelæsning Uge 5 Mandag

Database. lv/

Fra ER-Diagram til Relationel model i 7 step

Status på det trådløse netværk

Help / Hjælp

how to save excel as pdf

Engineering of Chemical Register Machines

Datalogi OB, Efterår 2002 OH er, forelæsning 10/ Klasser og nedarvning

ODIN-webservice ændringer release 2010 v2.0

ATEX direktivet. Vedligeholdelse af ATEX certifikater mv. Steen Christensen

2a. Conceptual Modeling Methods

Engelsk. Niveau D. De Merkantile Erhvervsuddannelser September Casebaseret eksamen. og

Forelæsning Uge 6 Mandag

Vores mange brugere på musskema.dk er rigtig gode til at komme med kvalificerede ønsker og behov.

dintprog Manual Revision: 1241 August 24, 2010 I Introduktion 3 1 Notation 3 II Begreber 4 2 Grundbegreber om programmering 4

Forslag til implementering af ResearcherID og ORCID på SCIENCE

Breaking Industrial Ciphers at a Whim MATE SOOS PRESENTATION AT HES 11

Hvor er mine runde hjørner?

Tree klassen fra sidste forelæsning

Forelæsning Uge 3 Mandag

Software Design (SWD) Spørgsmål 1

Black Jack --- Review. Spring 2012

Aktivering af Survey funktionalitet

Linear Programming ١ C H A P T E R 2

GUIDE TIL BREVSKRIVNING

Ugeseddel 4 1. marts - 8. marts

Løsning af skyline-problemet

Particle-based T-Spline Level Set Evolution for 3D Object Reconstruction with Range and Volume Constraints

IBM WebSphere Operational Decision Management

Engelsk. Niveau C. De Merkantile Erhvervsuddannelser September Casebaseret eksamen. og

Unitel EDI MT940 June Based on: SWIFT Standards - Category 9 MT940 Customer Statement Message (January 2004)

IBM Software Group. SOA v akciji. Srečko Janjić WebSphere Business Integration technical presales IBM Software Group, CEMA / SEA IBM Corporation

Software Construction 1. semester (SWC) januar 2014 Spørgsmål 1

TM4 Central Station. User Manual / brugervejledning K2070-EU. Tel Fax

Eksempel: et ordresystem note 5 Lagdeling s. 1

Molio specifications, development and challenges. ICIS DA 2019 Portland, Kim Streuli, Molio,

Udfordringer med indeklima ved energirenovering

Øvelse 9. Klasser, objekter og sql-tabeller insert code here

Sikkerhedsvejledning

Eksempel: Skat i år 2000

Info og krav til grupper med motorkøjetøjer

Statistik for MPH: oktober Attributable risk, bestemmelse af stikprøvestørrelse (Silva: , )

Terese B. Thomsen 1.semester Formidling, projektarbejde og webdesign ITU DMD d. 02/

Userguide. NN Markedsdata. for. Microsoft Dynamics CRM v. 1.0

Eksempel på eksamensspørgsmål til caseeksamen

Skriftlig Eksamen Beregnelighed (DM517)

Small Autonomous Devices in civil Engineering. Uses and requirements. By Peter H. Møller Rambøll

DET KONGELIGE BIBLIOTEK NATIONALBIBLIOTEK OG KØBENHAVNS UNIVERSITETS- BIBLIOTEK. Index

RoE timestamp and presentation time in past

Skriftlig Eksamen Beregnelighed (DM517)

Teknologispredning i sundhedsvæsenet DK ITEK: Sundhedsteknologi som grundlag for samarbejde og forretningsudvikling

WIKI & Lady Avenue New B2B shop

Abstrakte datatyper C#-version

United Nations Secretariat Procurement Division

X M Y. What is mediation? Mediation analysis an introduction. Definition

extreme Programming Kunders og udvikleres menneskerettigheder

Transkript:

Klassediagrammer (I) Modellering og Implementering Michael R. Hansen and Hubert Baumeister Informatics and Mathematical Modelling Technical University of Denmark Spring 2008 c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 1 / 61

Oversigt beskrivelser af klasser ensrettede associationer (unidirectional associatons) dobbeltrettede associationer (bidirectional assocations) aggregering (shared aggregation and composite aggregation) implementering Næste uge: nedarvning (subclassing / inheritance), implementering, brug af tabeller (map datatype) c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 2 / 61

Beskrivelser af klasser Klassediagrammer Formål: at modellere begreber at identificere væsentlige objekter deres tilstand og grænseflade at give et overblik over systemets sammensætning at give et overblik over systemets implementering c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 3 / 61

Beskrivelser af klasser Klassebeskrivelse En klasse beskriver en samling objekter med fælles karakteristika mht tilstand (attributter) opførsel (operationer) relationer til andre klasser (associationer) c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 4 / 61

Beskrivelser af klasser Beskrivelse af en klasse - : private + : public # : protected KlasseNavn +navn1: String = "abc" -navn2: int #navn3: boolean -f1(a1:int,a2:string []): float +f2(x1:string,x2:boolean): void #f3(a:double): String Klassens navn Attributter Operationer navn3 og f1 er statiske størrelser private : kun synlighed i selve klassen protected : synlig også i subklasser public : synlig også for andre klasser package : ( ) visible for other classes in the same package Attributes and operations that are underlined are static Attributes can be accessed without that an instance of that class exists Operations can be called without that an instance of that class exists c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 5 / 61

Beskrivelser af klasser En klasses roller Grænsefladen (interface) for en klasse har to formål at beskrive den funktionalitet som stilles til rådighed for omverdenen at beskrive den funktionalitet som skal implementeres Private attributter indkapsler data Private operationer er hjælpefunktioner for andre operationer Detaljeringsgrad ved en klassebeskrivelse afhænger af formål Begrebsmodellering : typisk lav detaljeringsgrad Implementering. : typisk høj detaljeringsgrad c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 6 / 61

Beskrivelser af klasser Klassebeskrivelse og programskelet (I) Til hver klassebeskrivelse svarer et programskelet, f.eks. public class KlasseNavn { public String navn1 = "abc" private int navn2 protected static boolean navn3 private static float f1(int a1, String[] a2) {... public void f2(string x1, boolean x2) {... protected String f3(double a) {... Udviklingsværktøjer udnytter denne sammenhæng: Diagram Programskelet programmeludvikling Program Diagram reverse engineering c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 8 / 61

Beskrivelser af klasser Klassebeskrivelse og programskelet (II): Implementing public attributes Attributes are implemented as fields A +int a public class A { public int a; In Java one uses setter and getter methods to access public fields instead of directly accessing the field This corresponds to the following class diagram public class A { private int a; public void seta(int a) {this.a = a; public int geta() { return a; A -int a +seta(int a) +geta() However, a lot of tools support the generation of above Java code from the original diagram c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 10 / 61

Associationer Associationer mellem klasser En association mellem to klasser betyder, at objekter tilhørende de to klasser har et kendskab til hinanden. Associationer kan være såvel ensrettede som dobbeltrettede kendskabet kan altså være ensidigt eller gensidigt. c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 11 / 61

Associationer Ensrettede associationer I Ensrettede associationer Eksempel: Personer og deres arbejdsgivere * 0..1 Person Firma enhver person er tilknyttet en arbejdsgiver (firma) ethvert firma har 0, 1, eller flere ( * ) ansatte (personer) Pilen betyder at et firma har kendskab til alle ansatte (personer) et firmaobjekt indeholder referencer til objekter for alle ansatte Omvendt behøver et personobjekt ikke at reference til sin arbejdsgivers objekt. Et på en pil markerer ikke-navigerbarhed. Navigerbarhed i pilens retning. 0 og kaldes multipliciteter eller kardinaliteter c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 12 / 61

Associationer Ensrettede associationer: II Ensrettede associationer Eksempel: Ansatte og deres arbejdsgivere * 0..1 Person ansatte Firma et rollenavn (her ansatte) beskriver objekter (her personer) ved en ende af en association, set ud fra objekter tilhørende klassen i den anden ende (her firmaer). i en implementering er et rollenavn typisk en variabel. F.eks. public class Firma {... private Collection<Person> ansatte;... c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 14 / 61

Associationer Attributes and Associations Ensrettede associationer There is in principle no distinction between attributes and associations Associations can be drawn as attributes and vice versa c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 15 / 61

Associationer Attributes versus Associations Ensrettede associationer When to use attributes and when to use associations? Associations When the target class of an association is shown in the diagram The target class of an association is a major class of the model e.g. Part, Assembly, Component,... Attributes When the target class of an associations is not shown in the diagram With datatypes / Value objects Datatypes consists of a set of values and set of operations on the values In contrast to classes are datatypes stateless e.g. int, boolean, String... Library classes However final choice depends on what one wants to express with the diagram E.g. Is it important to show a relationship to another class? c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 16 / 61

Kardinaliteter Associationer Ensrettede associationer Ved associationers endepunkter (og andre steder) skal ofte angives hvor mange gange en størrelse kan forekomme. F.eks. hvor mange ansatte firmaer kan have. Disse angivelser kaldes multipliciteter eller kardinaliteter. Typisk forekommende angivelser af kardinalitet: angivelse betydning 0 0 1 1 m..n intervallet af heltal fra m til n * 0, 1, 2,... m..* m, m + 1, m + 2, m + 3,... c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 17 / 61

Associationer Ensrettede associationer Implementing Associations: Cardinality 0..1 A 0..1 B public class A { private B b; public B getb() { return b; public void setb(b b) { this.b = b; c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 19 / 61

Associationer Ensrettede associationer Implementing Associations: Cardinality * A * B public class A { private Collection<B> bs = new java.util.arraylist<b>(); public Collection<B> getb() { return bs; public void setb(collection<b> bs) { this.bs = bs; If the multiplicity is >1, one adds a plural s to the role name: b bs Access to the implementation of the association using setb and getb poses encapsulation problems A client of A can change the association without A knowing it! c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 21 / 61

Associationer Encapsulation problem Ensrettede associationer University * Student University dtu = new University("DTU");.. Student hans = new Student("Hans"); Collection<Student> students = dtu.getstudents(); students.add(hans); students.remove(ole);... Students can be added and removed, without the university knowing about it! c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 23 / 61

Associationer Ensrettede associationer Implementing Associations: Cardinality * (II) A * B public class A { private Collection<B> bs = new java.util.arraylist<b>(); public void addb(b b) { bs.add(b); public void contains(b b) { return bs.contains(b); public void removeb(b b) { bs.remove(b); addb, removeb,... control the access to the association The methods should have more intention revealing names, like registerstudent for addstudent c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 25 / 61

Associationer Interface Collection<E> Ensrettede associationer Operation boolean add(e e) boolean remove(e e) boolean contains(e e) Iterator<E> iterator() int size() Description returns false if e is in the collection returns true if e is in the collection returns true if e is in the collection allows to iterate over the collection number of elements Example of iterating over a collection Collection<String> names = new HashSet<String>() ; names.add("hans");... for (String name : names) { // Do something with name, e.g. System.out.println(name); Collection cannot be instantiated directly One needs to use concrete implementation classes like HashSet or ArrayList c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 27 / 61

Associationer Dobbeltrettede associationer Doppelrettede associationer forældre 2 Person barn * ansatte * 0..1 * * kunde Firma Når associationer ingen pile har, kan de enten forstås som dobbeltrettede, dvs. navigerbare i begge retninger, hvor man har besluttet at ikke viser navigerbarhed, f.eks. hvert personobjekt har en reference til sin arbejdsgiver hvert firmaobjekt har referencer til sine ansatte eller som en underspecifikation af navigerbarhed. Eksemplet viser i øvrigt to forskellige associationer mellem personer og firmaer en selv-association c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 28 / 61

Associationer Dobbeltrettede associationer (II) Doppelrettede associationer Eksempel: Bemærk: Person -navn: String +setfirma(firma:firma) * 0..1 ansatte arbejdsgiver Firma -navn: String +addansat(ansat:person,) +sletansat(ansat:person) Ændring af et person-objekts arbejdsgiver giver anledning til ændringer i op til to firmaer-objekter liste over ansatte. Ændring af et firma-objekts liste over ansatte afleder ændring af et person-objekts arbejdsgiver. referential integrity Person private String navn; private Firma arbejdsgiver; public Person(String nv){navn = nv; public void setfirma(firma f){... Firma private String navn; private ArrayList<Person> ansatte =... public Firma(String nv){navn = nv; public void addansat(person p {... public void sletansat(person p) {... c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 30 / 61

Associationer Doppelrettede associationer Implementing bidirectional associations Bidirectional associations are implemented as two unidirectional associations Person: Firma arbejdsgiver = null; Firma: Collection<Person>ansatte = new ArrayList<Person>(); Konsistensproblem public void testaddansatte() { Firma firma = new Firma(); Person hans = new Person(); firma.addansatte(hans); // hans.setarbejdgiver(firma) needs to be tested too! asserttrue(firma.containsansatte(hans)); assertequals(firma,hans.getarbejdsgiver()); sletansatte and setarbejdsgiver(null) have similar problems c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 32 / 61

Associationer Konsistens via Hjælpefunktioner Doppelrettede associationer Tre ekstra operationer bruges i pakken til at opretholde konsistens Person: Implemenation of role arbejdsgiver in Person Firma arbejdsgiver = null; protected void setf(firma f){arbejdsgiver = f; public void setfirma(firma f){ if (arbejdsgiver!= null) arbejdsgiver.sletp(this); if (f!= null) f.addp(this); arbejdsgiver = f; Firma: Implemenation of role ansatte in Firma Collection<Person>ansatte = new ArrayList<Person>(); public void addansat(person p) {if (!ansatte.contains(p)) {ansatte.add(p); p.setf(this); public void sletansat(person p) {if (ansatte.contains(p)) {ansatte.remove(i); p.setf(null); protected void addp(person p){if (!ansatte.contains(p)) ansatte.add(p); protected void sletp(person p) {if (ansatte.contains(p) ansatte.remove(p); c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 34 / 61

Exercise Associationer Doppelrettede associationer Is the implementation correct? What happens if a person changes companies? c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 35 / 61

Eksempel Eksempel: Svømmere og klubber Problem description En svømmer kan være medlem af en klub, men behøver det ikke hvis hun f.eks. svømmer på et elitecenter. En svømmer kan højst stille op til stævner for een klub. En svømmer beskrives ved navn, bedste tider, osv. En klub har en række medlemmer, og beskrives ved et navn. Man skal kunne oprette svømmere og klubber Man skal kunne tilføje, slette og ændre medlemskab Hvordan gribes opgaven an? What is the user relevant functionality of the system? Can one do example scenarios? For each scenario identificer væsentlige begreber lav en klassemodellering Write a test for the scenario implementer c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 36 / 61

Eksempel Step 1: Identify functionality Step: Identify the relevant functionality with example scenarios Functionality #1: Add a swimmer to a club Create a club with name Holte Create a swimmer with name Ole Add swimmer Ole to club Holte Check that Ole is member of Holte Functionality #2: Remove a swimmer from a club Create a club with name Virum Create a swimmer with name Per Add swimmer Per to club Virum Check that Per is member of Virum Remove swimmer Per from club Virum Check that Per is not member of Virum anymore c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 37 / 61

Eksempel Step 2: Identify relevant notions Scenario: add swimmer Problem Description En svømmer kan være medlem af en klub, men behøver det ikke hvis hun f.eks. svømmer på et elitecenter. En svømmer kan højst stille op til stævner for en klub. En svømmer beskrives ved navn, bedste tider, osv. En klub har en række medlemmer, og beskrives ved et navn Add swimmer scenario Create a club with name Holte Create a swimmer with name Ole Add swimmer Ole to club Holte Check that Ole is member of Holte Nouns Classes Relationship between nouns Attributes and Associations Actions Methods c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 38 / 61

Eksempel Step 3: Class modelling Scenario: add swimmer Svoemmer +navn: String +Svoemmer() * +medlemmer +klub 0..1 Klub +navn: String +Klub() +addsvoemmer() +containssvoemmer() c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 39 / 61

Eksempel Scenario: add swimmer Step 4: Write a test case for the scenario public void testaddsvoemmer1() { Klub holte = new Klub("Holte"); Svoemmer ole = new Svoemmer("Ole"); assertfalse(holte.containssvoemmer(ole)); holte.addsvoemmer(ole); asserttrue(holte.containssvoemmer(ole)); assertsame(holte,ole.getklub()); public void testaddsvoemmer2() { Klub holte = new Klub("Holte"); Svoemmer ole = new Svoemmer("Ole"); assertfalse(holte.containssvoemmer(ole)); ole.setklub(holte); assertsame(holte,ole.getklub()); asserttrue(holte.containssvoemmer(ole)); c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 41 / 61

Eksempel Step 5: Implement Svoemmer Scenario: add swimmer package imm.swe1.svoemmer; public class Svoemmer { private String navn; private Klub klub; public Svoemmer(String navn) { this.navn = navn; public String getnavn() { return navn; public Klub getklub() { return klub; public void setklub(klub klub) { if (this.klub == klub) return; this.klub = klub; klub.addsvoemmer(this); protected void setk(klub klub) { this.klub = klub; c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 43 / 61

Eksempel Step 5: Implement Klub Scenario: add swimmer public class Klub { private String navn ; private Collection<Svoemmer> medlemmer = new java.util.arraylist<svoemmer>() public Klub(String navn) { this.navn = navn; public String getnavn() { return navn; public void addsvoemmer(svoemmer svoemmer) { if (containssvoemmer(svoemmer)) return; medlemmer.add(svoemmer); svoemmer.setk(this); public boolean containssvoemmer(svoemmer svoemmer) { return medlemmer.contains(svoemmer); c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 45 / 61

Eksempel Step 2: Identify relevant notions Scenario: remove swimmer Problem description En svømmer kan være medlem af en klub, men behøver det ikke hvis hun f.eks. svømmer på et elitecenter. En svømmer kan højst stille op til stævner for en klub. En svømmer beskrives ved navn, bedste tider, osv. En klub har en række medlemmer, og beskrives ved et navn. Remove svimmer scenario Create a club with name Virum Create a swimmer with name Per Add swimmer Per to club Virum Check that Per is member of Virum Remove swimmer Per from club Virum Check that Per is not member of Virum anymore Nouns Classes Relationship between nouns Attributes and Associations Actions Methods c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 46 / 61

Eksempel Step 3: Class modelling Scenario: remove swimmer Svoemmer +navn: String +Svoemmer() * +medlemmer +klub 0..1 Klub +navn: String +Klub() +addsvoemmer() +containssvoemmer() +sletsvoemmer() c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 47 / 61

Eksempel Scenario: remove swimmer Step 4: Write a test case for the scenario public void testsletsvoemmer1() { Klub virum = new Klub("Virum"); Svoemmer per = new Svoemmer("Per"); virum.addsvoemmer(per); asserttrue(virum.containssvoemmer(per)); virum.sletsvoemmer(per); assertfalse(virum.containssvoemmer(per)); assertnull(per.getklub()); public void testsletsvoemmer2() { Klub virum = new Klub("Virum"); Svoemmer per = new Svoemmer("Per"); virum.addsvoemmer(per); asserttrue(virum.containssvoemmer(per)); per.setklub(null); assertnull(per.getklub()); assertfalse(virum.containssvoemmer(per)); c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 49 / 61

Eksempel Step 5: Implement Svoemmer Scenario: remove swimmer Additions to class Svoemmer public void setklub(klub klub) { if (this.klub == klub) return; Klub oldklub = this.klub; this.klub = klub; if (oldklub!= null) { oldklub.slets(this); if (this.klub!= null) { this.klub.addsvoemmer(this); c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 51 / 61

Eksempel Step 5: Implement Klub Scenario: remove swimmer Additions to class Klub public void sletsvoemmer(svoemmer svoemmer) { if (!medlemmer.contains(svoemmer)) return; medlemmer.remove(svoemmer); svoemmer.setk(null); protected void slets(svoemmer svoemmer) { medlemmer.remove(svoemmer); c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 53 / 61

Aggregering Composite Aggregation (I) Composite Aggregation En speciel relation del af mellem objekter Sammensat Del Eksempel: En email består af et hoved, et indhold og en række attachments 1 Email 1 * 1 Hoved 1 Inhold * Attachment c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 54 / 61

Aggregering Composite Aggregation (II) Composite Aggregation The basic two properties of a composite aggregation are: A part can only be part of one object The of the part object is tied to the life of the containing object This results in requirements to the implementation c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 55 / 61

Aggregering Composite Aggregation (III) A part can only be part of one object Composite Aggregation Allowed c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 56 / 61

Aggregering Composite Aggregation (IV) Composite Aggregation The life of the part object is tied to the life of the containing object If the containing object dies, so does the part object c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 57 / 61

Aggregering Composite Aggregation (V) Composite Aggregation But: A part can be removed before the composite object is destroyed c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 58 / 61

Aggregering Composite Aggregation Composite Aggregation (VI): Styklister En kompleks komponent (assembly) kan ikke have sig selv som komponent. Styklister kan derfor modelleres bedre ved brug af aggregering Component * Part 0..1 Assembly c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 59 / 61

Shared Aggregation Aggregering Shared Aggregation General part of relationship Notation: empty diamond Precise semantics of shared aggregation varies by application area and modeller. (from the UML 2.0 standard) c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 60 / 61

Opsummering Opsummering beskrivelser af klasser ensrettede associationer dobbeltrettede associationer aggregering komposition implementering c 2008 M. R. Hansen & H. Baumeister (IMM) Software Engineering I (02161) Spring 2008 61 / 61