Walther-Rathenau- Gewerbeschule Nazar1 Assoziationen (Beziehungen zwischen Objekten)

37
Walther-Rathenau- Gewerbeschule Nazar 1 Assoziationen (Beziehungen zwischen Objekten)

Transcript of Walther-Rathenau- Gewerbeschule Nazar1 Assoziationen (Beziehungen zwischen Objekten)

Page 1: Walther-Rathenau- Gewerbeschule Nazar1 Assoziationen (Beziehungen zwischen Objekten)

Walther-Rathenau-Gewerbeschule

Nazar 1

Assoziationen(Beziehungen zwischen Objekten)

Page 2: Walther-Rathenau- Gewerbeschule Nazar1 Assoziationen (Beziehungen zwischen Objekten)

Walther-Rathenau-Gewerbeschule

Nazar 2

Identifizieren Sie die Objekte im Bild

• Ein Auto-Objekt• Ein Person-Objekt• Vier Reifen-Objekte?• Ein Lenkrad-Objekt• Zwei Scheinwerfer-Objekte• Zwei Tür-Objekte?• ...

Offensichtlich stehen die verschiedenen Objekte zu einander in Beziehung!

Page 3: Walther-Rathenau- Gewerbeschule Nazar1 Assoziationen (Beziehungen zwischen Objekten)

Walther-Rathenau-Gewerbeschule

Nazar 3

Eine Person hat ein Auto

Person Auto

name:Stringalter:int

marke:String baujahr:int

UML:

Page 4: Walther-Rathenau- Gewerbeschule Nazar1 Assoziationen (Beziehungen zwischen Objekten)

Walther-Rathenau-Gewerbeschule

Nazar 4

Eine Person hat ein Auto

class Person{String name;int alter;Auto auto;

}

class Auto{String marke;int baujahr;

}

Person Auto

name:Stringalter:int

marke:String baujahr:int

auto:Auto

UML:

Java:

In Java werden hat-Beziehungen durch Referenzvariablen realisiert. Im obigen Beispiel kann von Auto nicht zu Person navigiert werden, da nur die Klasse Person eine Instanzvariable von Auto besitzt aber nicht umgekehrt!

Page 5: Walther-Rathenau- Gewerbeschule Nazar1 Assoziationen (Beziehungen zwischen Objekten)

Walther-Rathenau-Gewerbeschule

Nazar 5

class Hauptprogramm{

public static void main(String[] args){

}}

class Person{String name;int alter;Auto auto;

}

class Auto{String marke;int baujahr;

}

Auto a = new Auto(); a.marke = ''VW''; a.baujahr = 2014;

p.auto = a;

Hier wird die Beziehung zwischen Person und Auto gesetzt. Wichtig: Das Auto-Objekt muss natürlich vorher angelegt sein.

Person p = new Person(); p.name = ''Monika''; p.alter = 21;

Page 6: Walther-Rathenau- Gewerbeschule Nazar1 Assoziationen (Beziehungen zwischen Objekten)

Walther-Rathenau-Gewerbeschule

Nazar 6

Multiplizität

Person Auto

name:Stringalter:int

marke:String baujahr:int

privatAuto

geschäftsAuto0..1

1

Mit der Angabe der Multiplizität wird die Anzahl der an einer Beziehung beteiligten Objekte angegeben.

Die Multiplizität 0..1 legt fest, dass eine Person keinen oder einen Privatwagen besitzen Kann.

Die Multiplizität 1 bedeutet, dass einePersin genau einen Geschäftswagen besitzen muss.

Page 7: Walther-Rathenau- Gewerbeschule Nazar1 Assoziationen (Beziehungen zwischen Objekten)

Walther-Rathenau-Gewerbeschule

Nazar 7

Person Auto

name:Stringalter:int

marke:String baujahr:int

Das obige Diagramm ohne Angabe von Multiplizitäten ist gleichbedeutend mit dem folgenden Diagramm:

Person Auto

name:Stringalter:int

marke:String baujahr:int

0..1*

Die Multiplizität * bedeutet, dass ein Auto beliebig vielen(0 bis unendlich) Personen gehören kann.

Page 8: Walther-Rathenau- Gewerbeschule Nazar1 Assoziationen (Beziehungen zwischen Objekten)

Walther-Rathenau-Gewerbeschule

Nazar 8

Beziehungen sind Referenzen

Person p = new Person();p.name = ''Mu'';p.alter = 40;

p.auto = a;

Auto a = new Auto();a.marke = ''VW''; a.baujahr = 2008;

markebaujahr = 2008

a''VW''

namealter = 40 auto

p''Mu''

Page 9: Walther-Rathenau- Gewerbeschule Nazar1 Assoziationen (Beziehungen zwischen Objekten)

Walther-Rathenau-Gewerbeschule

Nazar 9

Aufgabe 1 Erstellen Sie eine Person mit den Daten Ihrer Wahl. Verwenden Sie

die folgende Person-Klasse bzw. den Konstruktor der Klasse Person, die Beziehung zwischen einem Person- und einem Auto-Objekt zu setzen.

Geben Sie weitere Möglichkeiten an, um Beziehungen zwischen Person- und Auto-Objekten zu setzen. Programmieren Sie ggf. die Klassen um.

Page 10: Walther-Rathenau- Gewerbeschule Nazar1 Assoziationen (Beziehungen zwischen Objekten)

Walther-Rathenau-Gewerbeschule

Nazar 10

Aufgabe 2

• Entwerfen Sie ein UML-Diagramm für das folgende Szenario:Ein Kraftfahrzeugfahrer hat eine Personalnummer, einen Vor- und Nachnamen, eine Adresse sowie einen Führerschein. Der Führerschein hat ein Ausstellungsdatum sowie eine Klasse (z. B. Klasse A, Klasse B usw..). Jede Adresse besteht aus einer Straße, einer Hausnummer, einem Postleitzahl und einem Ort. Beachten Sie die Datenkapselung!

• Überführen Sie das Diagramm in Java. • Erstellen Sie die folgenden Objekte und geben Sie deren Daten aus:

Fahrer Michael Anton hat die Personalnummer 1. Sein Führerschein der Klasse A ist am 13. April 2013 ausgestellt. Michael Anton wohnt am Leopoldring 3, in 79199 Kirchzarten.

Fahrerin Michaela Antonella hat die Personalnummer 2. Ihr Führerschein der Klasse B ist am 13.01.2009 ausgestellt. Sie wohnt in der Bahnhofstr. 7, in 79108 Kenzingen.

Page 11: Walther-Rathenau- Gewerbeschule Nazar1 Assoziationen (Beziehungen zwischen Objekten)

Walther-Rathenau-Gewerbeschule

Nazar 11

Aufgabe 3

Person Auto

name:Stringalter:int

marke:String baujahr:int

privatAuto

geschäftsAuto

• Überführen Sie das folgende Diagramm in Java und erstellen Sie eine Person mit zwei Autos..

Page 12: Walther-Rathenau- Gewerbeschule Nazar1 Assoziationen (Beziehungen zwischen Objekten)

Walther-Rathenau-Gewerbeschule

Nazar 12

Page 13: Walther-Rathenau- Gewerbeschule Nazar1 Assoziationen (Beziehungen zwischen Objekten)

Walther-Rathenau-Gewerbeschule

Nazar 13

Eine Person kann auch beliebig viele Autos besitzen

Person Auto

name:Stringalter:int

marke:String baujahr:int

Die Frage ist aber: Wo soll er alle die ganzen Autos parken??

*

In der Realität vielleicht in vielen gemieteten Garagen...

Page 14: Walther-Rathenau- Gewerbeschule Nazar1 Assoziationen (Beziehungen zwischen Objekten)

Walther-Rathenau-Gewerbeschule

Nazar 14

In Java jedenfalls kanner die Autos im Speicher parken wo er will. Er muss sich nur die Adressen der Autos z. B. in einer Liste merken...

...

0

1

2

3

Page 15: Walther-Rathenau- Gewerbeschule Nazar1 Assoziationen (Beziehungen zwischen Objekten)

Walther-Rathenau-Gewerbeschule

Nazar 15

Kurzer Ausflug zur ArrayList-Klasse

Page 16: Walther-Rathenau- Gewerbeschule Nazar1 Assoziationen (Beziehungen zwischen Objekten)

Walther-Rathenau-Gewerbeschule

Nazar 16

Die ArrayList-Klasse

• ArrayList ist eine von vielen Klassen, die Oracle-Programmierer uns bereitstellen. Eine Dokumentation dieser Klasse finden Sie unter:

• Objekte dieser Klasse verhalten sich wie Listen. • Listen sind besondere Datenstrukturen, in denen Daten (Objekte)

über spezielle Methoden bequem hinzugefügt, geändert oder gelöscht werden können.

• Der Zugriff auf die Daten erfolgt über ihre Position in der Liste. Das erste Element bekommt den Index 0, das zweite den Index 1 usw.

• Über die Methode size() kann die aktuelle Größe der Liste abgefragt werden. Die Größe wächst im Gegensatz zu normalen Arrays dynamisch.

• Der letzte Index in der Liste ist size – 1, da die Indexierung bei 0 beginnt.

Page 17: Walther-Rathenau- Gewerbeschule Nazar1 Assoziationen (Beziehungen zwischen Objekten)

Walther-Rathenau-Gewerbeschule

Nazar 17

''Ahmad Nessar''

''Nazar''

''Ottbert''

''Nimmersatt''

0

1

2

3

ArrayList<String> myList = new ArrayList<String>();

...

myList.add(''Ahmad Nessar'');

myList.add(''Nazar'');

myList.add(''Ottbert'');

myList.add(''Nimmersatt'');

Vorteile von ArrayList:- schneller Zugriff- dynamische Länge

Nachteile von ArrayList:- Einfügen und Löschen hat eine Verschiebung der übrigen Elemente zur Folge.

Page 18: Walther-Rathenau- Gewerbeschule Nazar1 Assoziationen (Beziehungen zwischen Objekten)

Walther-Rathenau-Gewerbeschule

Nazar 18

In spitzen Klammern wird angegeben, Objekte welcher Klasse in derArrayList gespeichert werden dürfen. In diesem Beispiel werden String-Objekte in die Liste aufgenommen.

Page 19: Walther-Rathenau- Gewerbeschule Nazar1 Assoziationen (Beziehungen zwischen Objekten)

Walther-Rathenau-Gewerbeschule

Nazar 19

0, 1 oder mehr Beziehungen

Person Auto

name:Stringalter:int

marke:String baujahr:int

autos:ArrayList<Auto>

*

ArrayList<Auto> ist eine Datenstruktur (eine Liste) in der Verweise auf die Autos, die eine Person besitzt, gespeichert werden. Es können aber auch statt ArrayList andere Daten-strukturen verwendet werden, um die Beziehung darzustellen. Wir werden uns aber vorerst auf die ArrayList-Klasse beschränken.

Page 20: Walther-Rathenau- Gewerbeschule Nazar1 Assoziationen (Beziehungen zwischen Objekten)

Walther-Rathenau-Gewerbeschule

Nazar 20

0, 1 oder mehr Beziehungen in Java

class Person{String name;int alter;ArrayList<Auto> autos;

}

class Auto{String marke;int baujahr;

}

UML:

Java:

Der Pfeil deutet es auch hier an, dass die Beziehung unidirektional ist. D.h. es kann nur in eine Richtung, nämlich von Person zu seinen Autos, navigiert werden. Ein Auto kennt in der Regel seinen Besitzer nicht.

Person Auto

name:Stringalter:int

marke:String baujahr:int

*

autos:ArrayList<Auto>

Page 21: Walther-Rathenau- Gewerbeschule Nazar1 Assoziationen (Beziehungen zwischen Objekten)

Walther-Rathenau-Gewerbeschule

Nazar 21

Die Klasse Auto ...

Page 22: Walther-Rathenau- Gewerbeschule Nazar1 Assoziationen (Beziehungen zwischen Objekten)

Walther-Rathenau-Gewerbeschule

Nazar 22

Die Klasse Person ...

Page 23: Walther-Rathenau- Gewerbeschule Nazar1 Assoziationen (Beziehungen zwischen Objekten)

Walther-Rathenau-Gewerbeschule

Nazar 23

0, 1 oder mehr Beziehungen erstellen

Hier wird eine ganze Liste von Autos für Hans „übergeben“.

Page 24: Walther-Rathenau- Gewerbeschule Nazar1 Assoziationen (Beziehungen zwischen Objekten)

Walther-Rathenau-Gewerbeschule

Nazar 24

Page 25: Walther-Rathenau- Gewerbeschule Nazar1 Assoziationen (Beziehungen zwischen Objekten)

Walther-Rathenau-Gewerbeschule

Nazar 25

Aufgabe 3 Verwenden Sie die folgenden Klassen (ohne sie zu erweitern), um

eine Person mit ein paar Autos zu erstellen...

Geben Sie weitere Möglichkeiten an, um Beziehungen zwischen Person- und Auto-Objekten zu setzen. Programmieren Sie ggf. die Klassen um.

Weitere Übungen: Siehe separates Übungsblatt!

class Person{String name;int alter;ArrayList<Auto> autos;

}

class Auto{String marke;int baujahr;

}

Page 26: Walther-Rathenau- Gewerbeschule Nazar1 Assoziationen (Beziehungen zwischen Objekten)

Walther-Rathenau-Gewerbeschule

Nazar 26

Bidirektionale Beziehungen

Person Auto

name:Stringalter:int

marke:String baujahr:int

autos:ArrayList<Auto>

*

person:Person

Person Auto

name:Stringalter:int

marke:String baujahr:int

autos:ArrayList<Auto>*0..1

person:Person

… oder man lässt die Pfeile ganz weg ...

0..1

Page 27: Walther-Rathenau- Gewerbeschule Nazar1 Assoziationen (Beziehungen zwischen Objekten)

Walther-Rathenau-Gewerbeschule

Nazar 27

Aufgabe 4 Überführen Sie das folgende Diagramm in Java und erstellen Sie

eine Person mit ein paar Autos. Setzen Sie die Beziehungen in beiden Richtungen!

Person Auto

name:Stringalter:int

marke:String baujahr:int

0..10..1

Page 28: Walther-Rathenau- Gewerbeschule Nazar1 Assoziationen (Beziehungen zwischen Objekten)

Walther-Rathenau-Gewerbeschule

Nazar 28

Bidirektionale Beziehungen

Person p = new Person();p.name = ''Mu'';p.alter = 40;

Auto a = new Auto();a.marke = ''VW''; a.baujahr = 2008;

markebaujahr = 2008person

a''VW''

namealter = 40 auto

p''Mu''p.auto = a;

a.person = p;

Page 29: Walther-Rathenau- Gewerbeschule Nazar1 Assoziationen (Beziehungen zwischen Objekten)

Walther-Rathenau-Gewerbeschule

Nazar 29

Aufgabe 5 Überführen Sie das folgende Diagramm in Java und erstellen Sie

eine Person mit ein paar Autos. Setzen Sie die Beziehungen in beiden Richtungen!

Person Auto

name:Stringalter:int

marke:String baujahr:int

autos:ArrayList<Auto>

*0..1

person:Person

Page 30: Walther-Rathenau- Gewerbeschule Nazar1 Assoziationen (Beziehungen zwischen Objekten)

Walther-Rathenau-Gewerbeschule

Nazar 30

Wiederholung

• Ein wesentlicher Bestandteil der objektorientierter Programme ist der Austausch von Nachrichten untereinander.

• Dazu kennt ein Objekt ein anderes Objekt und sendet diesem eine Nachricht zu.

• Dieses Kennen ist eine Art von Assoziation (Beziehung oder Verbindung) zwischen zwei Objekten.

• Assoziationen werden in UML durch Verbindungslinien zwischen den einzelnen Klassen dargestellt.

Kundename:Stringadresse:String

Zahlungsverzugbetrag:doublestichtag:String

*1

Page 31: Walther-Rathenau- Gewerbeschule Nazar1 Assoziationen (Beziehungen zwischen Objekten)

Walther-Rathenau-Gewerbeschule

Nazar 31

Wiederholung

• Im obigen Beispiel ist die Assoziation bidirektional, d.h. der Kunde kann seine Zahlungsverzüge kennen. Auch von Zahlungsverzug kann zum Kunden navigiert werden.

• In der Regel benötigt ein Zahlungsverzug keine Kenntnisse über seine Kunden. Es soll nur in eine Richtung (unidirektional), nämlich nur von Kunde zu Zahlungsverzug navigiert werden:

Kundename:Stringadresse:String

Zahlungsverzugbetrag:doublestichtag:String

*1

Kundename:Stringadresse:String

Zahlungsverzugbetrag:doublestichtag:String

*1

Page 32: Walther-Rathenau- Gewerbeschule Nazar1 Assoziationen (Beziehungen zwischen Objekten)

Walther-Rathenau-Gewerbeschule

Nazar 32

Multiplizitäten

• Kunden können beliebig viele (null oder mehrere) Zahlungsverzüge haben. Ein Zahlungsverzug gehört zu genau einem Kunden.

• 1 und * werden auch als Multiplizität der Beziehungen bezeichnet.• Man unterscheidet Kann- und Muss-Beziehungen.

Jeder Zahlungsverzug gehört genau einem Kunden.

Jeder Kunde hat keinen, einen oder mehr Zahlungsverzüge.

Kundename:Stringadresse:String

Zahlungsverzugbetrag:doublestichtag:String

*1

Page 33: Walther-Rathenau- Gewerbeschule Nazar1 Assoziationen (Beziehungen zwischen Objekten)

Walther-Rathenau-Gewerbeschule

Nazar 33

Komposition

• Eine Komposition ist eine „ist Teil von“-Beziehung.

• Jedes Objekt der Klasse Lenkrad ist nur Komponente eines einzigen Objektes der Klasse Auto (Aggrregat-Klasse).

• Die Komposition verlangt: wird ein Gebäude gelöscht, so müssen auch alle Räume darin gelöscht werden!

B ist Teil von A

Auto Lenkrad

A B

Page 34: Walther-Rathenau- Gewerbeschule Nazar1 Assoziationen (Beziehungen zwischen Objekten)

Walther-Rathenau-Gewerbeschule

Nazar 34

Beispiele für Komposition

Seite

Raum

BestellpostenBestellung

Gebäude

Termin

Buch

Notiz

Page 35: Walther-Rathenau- Gewerbeschule Nazar1 Assoziationen (Beziehungen zwischen Objekten)

Walther-Rathenau-Gewerbeschule

Nazar 35

Falsche Komposition in JavaTermin

datum:Stringtitel:String

Notiztitel:Stringtext:String

Page 36: Walther-Rathenau- Gewerbeschule Nazar1 Assoziationen (Beziehungen zwischen Objekten)

Walther-Rathenau-Gewerbeschule

Nazar 36

Aufgabe 8 Überführen Sie das folgende Diagramm in Java.

Lenkrad

art:String

Auto

marke:String baujahr:int

Page 37: Walther-Rathenau- Gewerbeschule Nazar1 Assoziationen (Beziehungen zwischen Objekten)

Walther-Rathenau-Gewerbeschule

Nazar 37

Aggregation

• Eine Komposition ist ebenfalls eine „ist Teil von“-Beziehung.

• Jedes Objekt der Klasse Artikel ist nur Komponente eines einzigen Objektes der Klasse Zeitschrift (Aggrregat-Klasse).

• Die Aggregation verlangt im Gegensatz zu Komposition nicht, dass nach dem Entfernen einer Zeitschrift auch deren Artikel gelöscht werden.

• In der Implementierung unterscheidet sich eine Aggregation in Java nicht von der Implementierung einer normalen „hat-Beziehung“. Aggregation wird eher zum besseren Verständnis des Modell verwendet.

Zeitschrift Artikel