Assoziation und Aggregation

Ähnliche Dokumente
Assoziation und Aggregation

Klassen und ihre Beziehungen I: Assoziation und Aggregation

Beziehungen zwischen Klassen

Vererbung. Martin Wirsing. Ziele. Vererbung

Klassen und ihre Beziehungen III: Mehrfache Vererbung, Rollen, Schnittstellen und Pakete

Softwaretechnik WS 16/17. Übungsblatt 01

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

Beispielprüfung CuP WS 2015/2016

UML -Klassendiagramme

Listen. Prof. Dr. Christian Böhm. in Zusammenarbeit mit Gefei Zhang. WS 07/08

7. Objektorientierung. Informatik II für Verkehrsingenieure

Von der UML nach C++

IT I: Heute. abstrakte Methoden und Klassen. Interfaces. Interfaces List, Set und Collection IT I - VO 7 1

Software Engineering, SoSe 07, WSI, D. Huson, May 7,

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 12. Listen. Listen 1

Programmieren in Java

Programmieren 2 C++ Überblick

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

Polymorphie/Späte Bindung Abstrakte Klassen Interfaces. Polymorphie/Späte Bindung Abstrakte Klassen Interfaces

Programmieren in Java -Eingangstest-

Reihungen. Prof. Dr. Christian Böhm. In Zusammenarbeit mit Gefei Zhang. WS 07/08

Informatik II Übung 06. Benjamin Hepp 5 April 2017

Assoziationen in Java

Einführung in die Programmierung

Tag 8 Repetitorium Informatik (Java)

Universität Stuttgart Institut für Automatisierungstechnik und Softwaresysteme Prof. Dr.-Ing. M. Weyrich

Aufgabe11. Methode test1. import java.util.hashmap; import java.util.arraylist; public class Aufgabe11 {

Grundzüge der Programmierung. Wiederverwendung POLYMORPHIE

Testen mit JUnit. Martin Wirsing. Ziele. Arten von Tests. Testen. Whitebox-Test. Unit-Test

Testen mit JUnit. Martin Wirsing. Ziele. Arten von Tests. Testen. Lernen Unit Tests zu schreiben Lernen mit Unit-Testen mit JUnit durchzuführen

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Aufgabenblatt 4. Aufgabe 3. Aufgabe 1. Aufgabe 2. Prof. Dr. Th. Letschert Algorithmen und Datenstrukturen

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Polymorphismus 179. Function.h. #include <string>

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

Javakurs für Anfänger

Programmierung Nachklausurtutorium

Javakurs für Anfänger

Sommersemester Implementierung I: Struktur

Arrays von Objekten. Dr. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung

Objektorientierte Programmierung mit C++ SS 2007

Variablen in Java. Martin Wirsing. in Zusammenarbeit mit Michael Barth, Philipp Meier und Gefei Zhang. Ziele

Einführung in die OOP mit Java

Unified Modelling Language

Javakurs für Anfänger

Fakultät IV Elektrotechnik/Informatik

Software Entwicklung 1

Objektorientierte Programmierung Studiengang Medieninformatik

Computeranwendung und Programmierung (CuP)

Software Entwicklung 1. Fallstudie: Arithmetische Ausdrücke. Rekursive Klassen. Überblick. Annette Bieniusa / Arnd Poetzsch-Heffter

Grafik-Programmierung

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0

Nebenläufige Programmierung I

VU Objektorientierte Modellierung Übung 2

1 Klassen und Objekte

Algorithmen und Datenstrukturen 06

Übungen zu Computeranwendung und Programmierung WS 17/18

Computeranwendung und Programmierung (CuP)

Humboldt-Universität zu Berlin Wintersemester 2010/11 Institut für Informatik Grundlagen der Programmierung. 6. Übungsblatt

Einführung in die Programmierung mit Java

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke

Objektorientierte Programmierung Studiengang Medieninformatik

Testen mit JUnit. Martin Wirsing. Ziele. in Zusammenarbeit mit Michael Barth, Philipp Meier und Gefei Zhang

Objektorientierte Programmierung

Übungen zu Computeranwendung und Programmierung WS 13/14

8. Objektorientierte Programmierung. Informatik II für Verkehrsingenieure

Verschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes

Transkript:

Assoziation und Aggregation Prof. Dr. Christian Böhm in Zusammenarbeit mit Michael Eckert und Gefei Zhang http://www.dbs.ifi.lmu.de/lehre/nfinfows WS 07/08

2 Ziele Verstehen der Begriffe Assoziation und Aggregation Implementierung von Assoziationen in Java schreiben lernen

3 Assoziation und Aggregation Assoziation ist eine Beziehung zwischen zwei oder mehr Klassen C D Assoziation: Die Klassen C und D stehen in Beziehung C D Aggregation: Jedes Objekt von C enthält Objekte von D C D Vererbung: Die Klasse C ist Erbe der Klasse D C D Abhängigkeit: Die Klasse C benützt Elemente der Klasse D (i.a. Methoden)

4 Assoziation Die Assoziation ist die allgemeinste Art einer Beziehung C name mult role D Das Diagramm drückt aus, daß jedes Objekt o von C mit mult -vielen Objekten von D im Beziehung steht, die die Rolle role für o spielen. Dabei ist role ein Name und mult entweder eine natürliche Zahl, ein Stern * für beliebig viele Objekte oder ein Intervall der Form a..b mit a N, b N {* Der Name name gibt den Namen der Assoziation an. Das ausgefüllte Dreieck bezeichnet die Leserichtung.

5 Beispiele: Assoziation und Aggregation Assoziation 1. Professor 1 liest 0..* Vorlesung Schwache Aggregation 2. Hypertext-Buch Titel Erscheinungsjahr * * chapter Kapitel Autor AnzahlSeiten Jedes Hypertext-Buch ist gekennzeichnet durch seine Kapitel, d.h. Kapitel spielt die Rolle chapter für Hypertext-Buch.

6 Beispiele: Assoziation und Aggregation 3. starke Aggregation (Komposition) Customer 1 owner 0..* account BankAccount Jeder Bankkunde besitzt 0 oder mehrere Konten, die die Rolle account spielen. Jedes Bankkonto hat genau einen Besitzer ( owner ). Die Lebensdauer eines Bankkontos ist durch die des Kunden beschränkt.

7 Beispiel: Schwache Aggregation Schwache Aggregation Unternehmen 1 besteht aus 1..* 1 besteht aus 1..* Abteilung Mitarbeiter Schwache Aggregation ist eine Teile-Ganzes Relation, die Lebensdauer der Teile hängt aber nicht von der Lebensdauer des Ganzen ab. Es gilt aber, dass die Objekte der schwachen Aggregation einen gerichteten azyklischen Graphen bilden. (Wenn B Teil von A, dann ist A nicht Teil von B). Ein Teil darf jedoch auch einem anderen Ganzen zugeordnet werden.

8 Starke Aggregation Ganzes 0..1 besteht aus * Teil Die Teile existieren nur innerhalb des Aggregats Ganzes ; d.h. die Lebensdauer eines Teil -Objekts wird durch die Lebensdauer des zugehörigen Aggregats beschränkt. Objekte der Aggregation bilden einen Baum. (Wenn A ein Objekt B enthält, dann enthält B nicht A.) Jedes Objekt der Teilklasse kann - zu einem Zeitpunkt - nur Komponente eines einzigen Objekts der Aggregatklasse sein, d.h., die bei der Aggregatklasse angetragene Kardinalität darf nicht größer als eins sein (unshared aggregation, strong ownership). Die dynamische Semantik des Ganzen gilt auch für seine Teile (propagation semantics). Wird beispielweise das Ganze kopiert, so werden auch seine Teile kopiert.

9 Starke Aggregation Beispiel: starke Aggregation (Komposition) Verzeichnis Name Erstellung Datei Name Erstellung letzte Änderung letzter Zugriff

10 Java Implementierung von Assoziationen C name mult role D In Java repräsentiert man Assoziationen durch Attribute. Jede Rolle role vom Typ D wird als Attribut von C implementiert. Ist die Multiplizität 0, 1 oder 0..1 erhält man ein Attribut D role. Ist die Multiplizität >1 oder * verwendet man eine Reihung oder eine ArrayList von D-Objekten.

11 Java Implementierung von Assoziationen C multd myd D multb = 0..1 induziert das Schema: class C { D myd; multb = * induziert das Schema: class C { ArrayList<D> myd;

12 Implementierung von starker Aggregation Erzeugung der Komponenten durch Konstruktor des Aggregats Beispiel Circle double radius... 1 center Point class Circle { private double radius; private Point center; public Circle(double rad, double x, double y) { radius = rad; center = new Point(x,y);... Das Point Objekt wird durch den Konstruktor von Circle erzeugt und sollte keine Beziehungen zu äußeren Objekten besitzen.

13 Implementierung von starker Aggregation Beispiel Assoziation mit Multiplizität 1: Kunde, der genau ein Bankkonto besitzen muss. Customer name getbalance () deposit (x) withdraw (x) 1 1 account BankAccount

14 Implementierung von starker Aggregation class Customer { private String name; private BankAccount account; public Customer(String cname, double initialbalance) { name = cname; account = new BankAccount(initialBalance); public String getname() { return name; public double getbalance() { return account.getbalance(); public void transferto(bankaccount other, double amount) { account.transferto(other, amount); public void withdraw(double x) { account.withdraw(x); public void deposit(double x) { account.deposit(x);

15 Implementierung von Assoziationen mit Multiplizität * Beispiel: Kunden mit 0 oder mehreren Bankkonten Customer name getbalance () deposit (x) withdraw (x) 1 0..* accounts BankAccount

16 Die Klasse ArrayList class ArrayList<T> { public ArrayList() //Constructs an empty list with an initial capacity of ten. public ArrayList(int initialcapacity) //Constructs an empty list with the specified initial capacity. public T get(int index) //Returns the element at the specified position in this list. public T set(int index, T element) //Replaces the element at the specified position //in this list with the specified element. public boolean add(t element) //Appends the specified element to the end of this list. public int size() //Returns the number of elements in this list.

17 Implementierung von Assoziationen mit Multiplizität * import java.util.arraylist; class Customer { private String name; private ArrayList<BankAccount> accounts; public Customer(String cname) { name = cname; accounts = new ArrayList<BankAccount>(); public void createaccount(double initialbalance) { BankAccount a = new BankAccount(initialBalance); accounts.add(a); public String getname() { return name; fügt neues Element an das Ende der ArrayList an.

18 Implementierung von starker Aggregation... public double getbalance(int i) { BankAccount a = accounts.get(i); return a.getbalance(); public void transferto(int i, BankAccount other, double amount) { BankAccount a = accounts.get(i); a.transferto(other, amount); public void withdraw(int i, double x) { BankAccount a = accounts.get(i); a.withdraw(x); public void deposit(int i, double x) { BankAccount a = accounts.get(i); a.deposit(x);

19 Zusammenfassung Eine Assoziation ist eine Relation (Beziehung) zwischen Klassen. Eine Aggregation ist eine Teile-Ganzes-Beziehung und damit eine spezielle Assoziation. Bei einer starken Aggregation sind die Teile existenzabhängig vom Ganzen. Insbesondere kann jedes Teil nur zu einem Aggregat gehören. Eine Rolle myb (vom Typ B) mit Multiplizität 1 oder 0..1 wird durch ein Attribut myb vom Typ B implementiert, bei Multiplizität * bekommt es den Typ ArrayList. Bei der starken Aggregation werden die abhängigen Objekte im Konstruktor des Aggregats erzeugt, um die Lebensdauerabhängigkeit zu garantieren.