Seite 1

Werbung
3.1 UML: Assoziationen und Multiplizitäten
• Definition: Eine (binäre) Assoziation AS zwischen zwei Klassen
K1 und K2 beschreibt, daß die Instanzen der beiden Klassen in
einer fachlich wesentlichen Beziehung zueinander stehen.
Kapitel 3: Datenstrukturen verwenden
• Semantik: Für jedes Objekt O1 der Klasse K1 gibt es eine
individuelle, veränderbare und endliche Menge AS von
Objekten der Klasse K2, mit dem die Assoziation AS besteht.
Analoges gilt für Objekte von K2 .
3.1 UML: Assoziationen und Multiplizitäten
3.2 Systematische Umsetzung nach Java
3.3 Kollektionen und Iteratoren
• Notation:
AS
K1
K2
• Beispiel:
Leitung
Teambesprechung
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
Objektoiertierte Programmierung
K3 - 1
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
Leserichtung und Assoziationsenden
findet statt in
VeranstOrt
für
Team
Reservierung
• Ein Name für ein Assoziationsende bezeichnet die Assoziation
(evtl. zusätzlich) aus der Sicht einer der teilnehmenden Klassen.
Veranstaltungsort
Teambesprechung
K3 - 2
Besprechungsraum
Besprechungsraum
ist Ort von
Objektoiertierte Programmierung
Am Beispiel: Assoziationen
• Für Assoziationsnamen kann die Leserichtung angegeben
werden. Es ist möglich, mehrere Namen für eine Assoziation
anzugeben.
Teambesprechung
Teammitglied
Besprechungsraum
Teambesprechung
Leiter
Mitglied
leitet
Privater
Termin
Teammitglied
Teilnahme
für
– Synonym zu Assoziationsende manchmal: Rollenname
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
Objektoiertierte Programmierung
K3 - 3
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
Multiplizität bei Assoziationen
*
Besprechungsraum
1
für
*
Reservierung
1
Privater
Termin
(auch 0)
(beliebiger Wert, einschließlich 0)
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
*
Teambesprechung
0..1
1 1..* Mitglied
leitet
Teilnahme
*
*
• Beispiel:
*
Team
1
0..1 VeranstOrt
(genau n Objekte der Klasse K2)
(n bis m Objekte der Klasse K2)
(n1 oder n2 Objekte der Klasse K2)
Teambesprechung
K3 - 4
Am Beispiel: Multiplizitäten
• Definition Die Multiplizität einer Klasse K1 in einer Assoziation
AS mit einer Klasse K2 begrenzt die Menge der Objekte der
Klasse K2, mit denen ein Objekt von K1 in der Assoziation AS
stehen darf.
AS
• Notation:
K1
K2
Mult
Multiplizität Mult:
n
n..m
n1, n2
Zulässig für n und m :
Zahlenwerte
Objektoiertierte Programmierung
2..*
1 Leiter
Teammitglied
1
für
2..* Teammitglied
Teilnahme
Objektoiertierte Programmierung
K3 - 5
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
Seite 1
Objektoiertierte Programmierung
K3 - 6
Aggregation
Am Beispiel: Assoziationen und Agregationen
Besprechungsraum
• Definition: Ein Spezialfall der Assoziation ist die Aggregation.
Wenn die Assoziation den Namen „besteht aus“ tragen könnte,
handelt es sich um eine Aggregation.
Eine Aggregation besteht zwischen einem Aggregat und seinen
Teilen.
1
für
Team
*
Reservierung
1
0..1 VeranstOrt
0..1
• Notation:
K1
K2
1
Privater
Termin
• Beispiel:
Team
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
Objektoiertierte Programmierung
K3 - 7
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
*
raumFestlegen
einladen
absagen
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
*
Termin
name
1
1..*
*
Objektoiertierte Programmierung
titel
beginn
dauer
verschieben
0..1
Team
name
1
0..1 VeranstOrt
1 Leiter
*
Privater
Termin
ort
wegzeit
leitet
Teammitglied
1
name
abteilung
Teilnahme
terminBestätigen
*
2..*
1
für
Objektoiertierte Programmierung
Besprechungsraum
raumNr
kapazität
reservieren
freigeben
freienRaumSuchen
Teambesprechung
anzahl
raumFestlegen
einladen
absagen
verschieben
verschieben
*
K3 - 9
für
1..*
*
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
Objektoiertierte Programmierung
Qualifizierte Assoziation
• Definition: Eine Qualifikation (Qualifier) ist ein Attribut für eine
• Beispiel (Programmcode im nächsten Abschnitt):
• Notation:
*
leitet
1
Teilnahme
*
2..*
1 Leiter
Teammitglied
1
name
abteilung
Teilnahme
terminBestätigen
*
2..*
1
• Assoziationen werden verwendet, um im Objektgeflecht zu
navigieren.
• Assoziationen sind im Normalfall in beiden Richtungen navigierbar
(d.h. werden auf beiden Seiten wie ein Attribut behandelt).
• Spezialfall: einseitige Navigationsrichtung (d.h. nur auf einer Seite
wie Attribut behandelt).
themen [0..*]
raumFestlegen
einladen
absagen
verschieben
0..1
leitet
Navigationsrichtung von Assoziationen
Teambesprechung
K3 - 8
... und abstrakten Elementen und Vererbung
Team
Teambesprechung
titel
beginn
dauer
anzahl
1
1
0..1 Ort
Privater
Termin
beschreibg
beginn
dauer
ort
wegzeit
genehmigen
verschieben
2..*
Terminverwaltung
Besprechungsraum
raumNr
kapazität
reservieren
freigeben
freienRaumSuchen
*
1 Leiter
1..*
Teammitglied
für
Das Beispiel mit Operationen und Attributen ...
Hier Klasse
Reservierung aus
Platzgründen
weggelassen
1
Teilnahme
*
*
Teammitglied
leitet
*
Teambesprechung
K3 - 10
Assoziation zwischen Klassen K1 und K2, durch das die Menge der zu
einem K1-Objekt assoziierten K2-Objekte partitioniert wird.
Zweck der Qualifikation ist direkter Zugriff unter Vermeidung von
Suche.
K1
Teammitglied
Name
Abteilung
terminBestätigen
a
0..1
K2
statt:
K1
0..*
K2
Navigationsrichtung
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
Objektoiertierte Programmierung
K3 - 11
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
Seite 2
Objektoiertierte Programmierung
K3 - 12
Ein Beispiel ohne qualifizierte Assoziation:
Das Beispiel mit qualifizierten Assoziationen:
Termin
Raumverwaltung
Termin
Raumverwaltung
titel
beginn
dauer [0..1]
verschieben
– einzigeInstanz
titel
beginn
dauer [0..1]
verschieben
freienRaumSuchen
freienRaumSuchen
1
*
Teambesprechung
themen [0..*]
0..*
raumFestlegen
einladen
absagen
verschieben
vorhanden
– einzigeInstanz
größe
1
vorhanden
*
Teambesprechung
Besprechungsraum
themen [0..*]
0..1
0..1
raumNr
raumFestlegen
beginn
kapazität
Veranstaleinladen
reservieren
tungsort
absagen
freigeben
verschieben
Besprechungsraum
raumNr
0..1
kapazität
Veranstalreservieren
tungsort
freigeben
freienRaumSuchen
Raumverwaltung.freienRaumSuchen
(plaetze=10, start=04.05.98 10:00, dauer=60, raum=R12);
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
Objektoiertierte Programmierung
K3 - 13
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
3.2 Systematische Umsetzung nach Java
K3 - 14
... und Konstruktoren für Objekte
Zur Erinnerung: Realisierung von Klassen ...
class Teammitglied {
private String name;
private String abteilung;
Teammitglied
– name: String
– abteilung: String
public Teammitglied (String name, String abteilung) {
this.name = name;
this.abteilung = abteilung;
}
+ terminBestätigen
(von: Date, bis: Date):boolean
public Teammitglied (String name) {
this.name = name;
abteilung = "";
}
class Teammitglied {
private String name;
private String abteilung;
}
Objektoiertierte Programmierung
public boolean terminBestaetigen (Date von, Date bis) {
// geeigneter Methodenrumpf
}
... }
Teammitglied m = new Teammitglied("Max Müller", "Abt. B");
Konstruktoren werden meist überladen.
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
Objektoiertierte Programmierung
K3 - 15
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
Objektoiertierte Programmierung
K3 - 16
Standard-Realisierung von gerichteten
Assoziationen mit beschränkter Multiplizität
Feinheit: Der Default-Konstruktor
class Teammitglied {
... // ohne Konstruktor
}
A
a
0..1
B
class A {
...
private B a;
...
}
B
class A {
...
private B[] a;
...
}
Teammitglied m = new Teammitglied();
A
• Für jede Klasse gibt es immer mindestens einen Konstruktor.
a
0..*
• Wenn kein benutzerdefinierter Konstruktor vorliegt, wird ein
"Default-Konstruktor" bereitgestellt.
• Der Default-Konstruktor ist nicht mehr für die Klasse verfügbar,
wenn irgendein benutzerdefinierter Konstruktor definiert wird !
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
Objektoiertierte Programmierung
Annahme hier:
Obergrenze der Anzahl der B-Objekte spätestens bei erstmaliger Eintragung
von Assoziationsinstanzen bekannt und relativ klein.
(Allgemeinere Realisierung siehe Ende des Kapitels.)
K3 - 17
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
Seite 3
Objektoiertierte Programmierung
K3 - 18
Umsetzung einer gerichteten Assoziation
Teambesprechung
teilnahme
0..*
Optionale und notwendige Assoziationen
Teammitglied
– abstimmen
0..1
b
A
+ terminBestaetigen
class A {
...
private B b;
...
}
B
class Teambesprechung {
private Teammitglied[] teilnahme; ...
}
1
b
A
class A {
...
private B b;
...
public A (B b, ...) {
this.b = b; ...
}
}
B
private boolean abstimmen (Date beginn, int dauer) {
boolean ok = true;
for (int i=0; i<teilnahme.length; i++)
ok = ok &&
teilnahme[i].terminBestaetigen(beginn, dauer);
return ok;
}
Analog für andere Multiplizitäten wie 0..* und 1..*
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
Objektoiertierte Programmierung
K3 - 19
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
Umsetzung verschiedener Assoziationen
Teambesprechung
+ anzahl: int
...
*
leitet
1
teilnahme
*
2..*
Realisierung von Aggregation / Komposition
– name: String
– abteilung: String
A
...
Objektoiertierte Programmierung
A
Entwurfs-Modell
Notation: UML
Notation: UML
Objekte: Fachgegenstände
Klassen: Fachbegriffe
Vererbung: Begriffsstruktur
Objekte: Softwareeinheiten
Klassen: Schemata
Vererbung: Programmableitung
Annahme perfekter
Technologie
Funktionale Essenz
Erfüllung konkreter
Rahmenbedingungen
Gesamtstruktur des Systems
Grobe Strukturskizze
Genaue Strukturdefinition
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
B
0..*
B
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
class A {
...
private B[] b;
...
}
Objektoiertierte Programmierung
K3 - 22
3.3 Kollektionen und Iteratoren
Java 2 Collection Framework
• Objektorientierte Datenstrukturbibliothek für Java
– meiste Standard-Datenstrukturen abgedeckt
– Verwendung von Vererbung zur Strukturierung
– flexibel auch zur eigenen Erweiterung
• „Geschichte“:
– basiert auf Java Generic Library (JGL) der Firma ObjectSpace
– bis JDK 1.1 „alte“ Datenstrukturklassen Vector, Hashtable ...
– seit Java 1.2 (Java-2) Standard => java.util.*
Mehr Struktur & mehr Details
Objektoiertierte Programmierung
a
0..*
– spezielle Semantik für Komposition geht aber verloren!
K3 - 21
Analyse-Modell
b
• Aggregationen können genau analog zu Assoziationen
abgebildet werden !
• Kompositionen werden ebenfalls analog zu Assoziationen
abgebildet.
Abstraktionsstufen von UML-Diagrammen
Übergang „ohne Bruch“
(gemeinsame Terminologie)
K3 - 20
Teammitglied
class Teambesprechung {
static public int anzahl;
private Teammitglied leitet;
private Teammitglied teilnahme[];
...
public Teambesprechung
(Teammitglied leitet, Teammitglied[] teilnehmer) {
this.leitet = leitet;
this.teilnahme = teilnehmer; anzahl += 1;
}
}
class Teammitglied {
Konstruktor ohne
private String name;
„teilnahme“-Parameter
private String abteilung;
private Teambesprechung[] teilnahme; ...
}
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
Objektoiertierte Programmierung
K3 - 23
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
Seite 4
Objektoiertierte Programmierung
K3 - 24
Anwendungsbeispiel für Datenstrukturen
Testprogramm für Anwendungsbeispiel
Entwurfsmodell „Bestellungsabwicklung“ (Auszug):
public static void main (String[] args) {
Artikel tisch = new Artikel("Tisch",200);
Artikel stuhl = new Artikel("Stuhl",100);
Artikel schrank = new Artikel("Schrank",300);
Bestellung
– kunde: String
+ neuePosition(b: Bestellposition)
+ löschePosition(pos int)
+ sonderpreis(pos: int, preis: int)
+ auftragssumme(): int
+ print()
„Sonderpreise“
als kleine
Komplikation
1
Bestellung b1 = new Bestellung(“UniBw");
b1.neuePosition(new Bestellposition(tisch,1));
b1.neuePosition(new Bestellposition(stuhl,4));
b1.neuePosition(new Bestellposition(schrank,2));
b1.print(); // Gesamtpreis 1200
*
Bestellposition
– anzahl: int
– preis: int
+ einzelpreis(): int *
+ einzelpreis(p: int)
+ positionspreis(): int
für
1
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
Artikel
– name: String
– preis: int
b1.sonderpreis(1,50);
b1.print(); // Gesamtpreis 1050, weil Tisch billiger
}
+ preis(): int
Objektoiertierte Programmierung
K3 - 25
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
„Naive Realisierung“ mit Arrays (1)
K3 - 26
„Naive Realisierung“ mit Arrays (2)
class Bestellung {
public void sonderpreis (int pos, int preis) {
liste[pos].einzelpreis(preis);
}
private String kunde;
private Bestellposition[] liste;
private int anzahl = 0;
public Bestellung(String kunde) {
this.kunde = kunde;
liste = new Bestellposition[20];
}
public void neuePosition (Bestellposition b) {
// was passiert bei mehr als 20 Positionen ?
liste[anzahl] = b;
anzahl++;
}
}
Objektoiertierte Programmierung
public int auftragssumme() {
int s = 0;
for(int i=0; i<anzahl; i++)
s += liste[i].positionspreis();
return s;
Bestellungs-Methoden
}
abgestützt auf
...
Bestellpositions-Methoden
„Dynamische Arrays“ ? Erforderlich wäre:
1. Obergrenze erweiterbar
2. Automatisches Zusammenschieben beim Löschen
public void loeschePosition (int pos) {
// ist mit Arrays nicht einfach zu realisieren !
}
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
Objektoiertierte Programmierung
K3 - 27
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
Klassifikation von Java-Datenstrukturen
Objektoiertierte Programmierung
K3 - 28
Java Collection Framework: Struktur
• Collection (Kollektion):
<<interface>>
– Ansammlung von Datenelementen
– Hinzufügen, Entfernen, Suchen, Durchlaufen
Collection
• Set (Menge):
– Mehrfachvorkommen spielen keine Rolle
– Reihenfolge des Einfügens spielt keine Rolle
– SortedSet (geordnete Menge): Ordnung auf den Elementen
<<interface>>
List
• List (Liste):
<<interface>>
Set
Keine
Collection!!
<<interface>>
Map
– Mehrfachvorkommen werden separat abgelegt
– Reihenfolge des Einfügens bleibt erhalten
• Map (Abbildung):
– Zuordnung von Schlüsselwerten auf Eintragswerte
– Mehrfachvorkommen bei Schlüsseln verboten, bei Einträgen erlaubt
– SortedMap (geordnete Abbildung): Ordnung auf den Schlüsseln
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
Objektoiertierte Programmierung
<<interface>>
SortedSet
K3 - 29
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
Seite 5
<<interface>>
SortedMap
Objektoiertierte Programmierung
K3 - 30
java.util.Collection (Auszug aus Protokoll)
java.util.List (Auszug)
public interface List extends Collection {
public interface Collection {
public
public
public
public
public
public
...
public
public
public
public
public
public
public
...
public
public
public
public
boolean add (Object o);
boolean remove (Object o);
void clear();
boolean isEmpty();
boolean contains (Object o);
int size();
Iterator iterator();
}
boolean add (Object o);
boolean remove (Object o);
void clear();
boolean isEmpty();
boolean contains (Object o);
int size();
zusätzlich Zugriff per Index
Object get (int index);
Object set (int index, Object element);
boolean remove (int index);
int indexOf (Object o);
}
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
Objektoiertierte Programmierung
K3 - 31
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
1. Implementierung: java.util.ArrayList (Auszug)
Objektoiertierte Programmierung
K3 - 32
Anwendungsbeispiel mit ArrayList (1)
import java.util.ArrayList;
...
class Bestellung {
private String kunde;
private ArrayList liste;
private int anzahl = 0;
public class ArrayList implements List {
public boolean add (Object o);
public boolean remove (Object o); //exception!
public void clear();
public boolean isEmpty();
public boolean contains (Object o);
public int size();
...
public Object get (int index);
public Object set (int index, Object element)
public boolean remove (int index);
public int indexOf (Object o);
implementierungs...
spezifisch!
public Bestellung(String kunde) {
this.kunde = kunde;
liste = new ArrayList();
}
public void neuePosition (Bestellposition b) {
liste.add(b);
}
public void loeschePosition (int pos) {
liste.remove(pos);
Methoden aus Collection
}
...
verwendet
public ArrayList (int initialCapacity);
public void ensureCapacity (int minCapacity);
}
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
Objektoiertierte Programmierung
K3 - 33
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
Anwendungsbeispiel mit ArrayList (falsch!)
Objektoiertierte Programmierung
„Generisches“ Programmieren
Bestellung
– kunde: String
– anzahl: int
...
public void sonderpreis (int pos, int preis) {
liste.get(pos).einzelpreis(preis);
}
...
Methode aus List
1
Object
java.util.ArrayList
add(Object o)
get(pos:
int): Object
liste
...
Zusicherung: Alle von einem Bestellung-Objekt
über die liste-Assoziation erreichbaren Objekte
sind aus der Klasse Bestellposition.
• Compilermeldung:
„Method einzelpreis(int) not found in class java.lang.Object.“
*
K3 - 34
*
Bestellposition
Typanpassung (cast):
liste.get(pos).einzelpreis(preis);
Explizite Typanpassung (dynamic cast) erforderlich,wenn
Operationen der Unterklasse auf Objekte anzuwenden
sind, die sich in Variablen einer Oberklasse befinden:
Object-Speicherplatz!
( Typ ) Variable
• Lösung mit „cast“ auf nächster Folie!!
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
hier: (Bestellposition)liste.get(i)
Objektoiertierte Programmierung
K3 - 35
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
Seite 6
Objektoiertierte Programmierung
K3 - 36
Anwendungsbeispiel mit ArrayList (2)
Iterator-Konzept
• Aufzählen der in einem “Behälter” befindlichen Elemente
public void sonderpreis (int pos, int preis) {
((Bestellposition)liste.get(pos)).einzelpreis(preis);
}
– Keine Aussage über die Reihenfolge!
– Interface java.util.Iterator
public int auftragssumme() {
int s = 0;
for(int i=0; i<liste.size(); i++)
s +=
((Bestellposition)liste.get(i)).positionspreis();
return s;
}
}
interface Iterator {
public abstract boolean hasNext();
public abstract Object next();
public void remove();
}
Verwendungsbeispiel:
public void print () {
System.out.println("Bestellung fuer Kunde "+kunde);
for(int i=0; i<liste.size(); i++)
System.out.println(liste.get(i));
System.out.println("Gesamt: "+auftragssumme()+„\n");
}
• Erzeugung eines Iterators für eine beliebige Kollektion
(deklariert in java.util.Collection):
public Iterator iterator();
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
Objektoiertierte Programmierung
K3 - 37
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
Anwendungsbeispiel mit Iteratoren
Objektoiertierte Programmierung
K3 - 38
2. Implementierung: java.util.LinkedList (Auszug)
public class LinkedList implements List {
public boolean add (Object o);
public boolean remove (Object o);
public void clear();
public boolean isEmpty();
public boolean contains (Object o);
public int size();
public Object get (int index);
public Object set (int index, Object element)
public boolean remove (int index);
public int indexOf (Object o);
implementierungs...
spezifisch!
import java.util.Iterator;
...
class Bestellung {
private String kunde;
private ArrayList liste;
}
Iterator i = ...;
while (i.hasNext()) {
doSomeThing(i.next());}
...
Auch hier ist ein
public int auftragssumme() {
Cast erforderlich!!
Iterator i = liste.iterator();
int s = 0;
while (i.hasNext())
s += ((Bestellposition)i.next()).positionspreis();
return s;
}
...
public void addFirst (Object o);
public void addLast (Object o);
}
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
Objektoiertierte Programmierung
K3 - 39
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
Wechsel der Datenstruktur ist einfach!
• ArrayList:
class Bestellung {
private String kunde;
private List liste;
public Bestellung(String kunde) {
this.kunde = kunde;
liste = new ArrayList();
} ...
public interface Map {
...
public boolean containsKey (Object key);
public boolean containsValue (Object value);
public Object get (Object key);
public Object put (Object key, Object value);
public Object remove (Object key);
public int size();
public Set keySet();
public Collection values();
...
Schlüsselmenge und Wertemenge
}
class Bestellung {
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
Nur im
Konstruktor
eine
Instantiierung
ändern !
Objektoiertierte Programmierung
K3 - 40
java.util.Map (Auszug)
List ist ein
Interface,
keine Klasse !
• LinkedList:
private String kunde;
private List liste;
public Bestellung(String kunde) {
this.kunde = kunde;
liste = new LinkedList();
} ...
Objektoiertierte Programmierung
sind jeweils Collections!
„Assoziativer Speicher“ oder „Wörterbuch“
K3 - 41
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
Seite 7
Objektoiertierte Programmierung
K3 - 42
Anwendungsbeispiel
Anwendungsbeispiel mit HashMap
class Katalog {
Katalog
– name: String
+ put (code: String, a: Artikel)
+ get (code: String): Artikel
+ anzahl(): int
private String name; // des Katalogs
private Map inhalt; // die Eintraege
Map:
code -> Artikel
ordnet jedem code
seinen Artikel zu.
code: String
*
1
Artikel
– name: String
– preis: int
+ preis(): int
}
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
Objektoiertierte Programmierung
K3 - 43
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
Suche nach vorgefertigten Lösungen
Collection
ja
List
Sortierung relevant?
SortedSet
kleinstes / größtes Element
Elemente "über" / "unter" x
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
Objektoiertierte Programmierung
K3 - 45
assoc
*
1) Einfügen (ohne Reihenfolge)
2) Assoziation entfernen
2) Entfernen (ohne Reihenfolge)
3) Durchlaufen aller bestehenden
Assoziationen zu B-Objekten
3) Aufzählen aller Elemente
(per Iterator)
4) Manchmal: Abfrage, ob
Assoziation zu einem
B-Objekt besteht
4) "ist enthalten"-Abfrage
5) Keine Obergrenze der
Multiplizität gegeben
5) dynamischer Erweiterbarkeit
Objektoiertierte Programmierung
K3 - 46
Beispiel zu Set-Assoziationen (Teil 1)
Teambesprechung
B
*
teilnahme
*
Teammitglied
name
abteilung
import java.util.Set;
import java.util.HashSet;
import java.util.Iterator; ...
class A {
private Set assoc;
...
class Teammitglied {
private String name;
private String abteilung;
private Set teilnahme;
public void addAssoc (B b) {
assoc.add(b);
}
public void teilnahmeSetzen (Teambesprechung b) {
teilnahme.add(b);
}
public boolean testAssoc (B b) {
return assoc.contains(b);
}
public A {
...
assoc = new HashSet();
}
}
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
dann Datenstruktur mit ...
1) Assoziation anlegen
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
z. B. Realisierung von Assoziationen mit Set
A
B
assoc
Wenn ... gebraucht,
SortedMap
Set
Abfrage an i-ter Position
Ersetzen an i-ter Position
Entfernen an i-ter Position
K3 - 44
Datenstruktur im A-Objekt für B-Referenzen
Sortierung der
Schlüssel relevant?
nein
*
A
Einfügen eines Werts für einen Schlüssel
Entfernen eines Schlüssel/Wert-Paars
Abfrage eines Werts für einen Schlüssel
"ist enthalten"-Abfrage für Schlüssel
dynamisch erweiterbar
Einfügereihenfolge relevant?
Objektoiertierte Programmierung
Allgemeinere Realisierung von Assoziationen
Map
Einfügen eines Elements
Entfernen eines Elements
Aufzählen aller Elemente
"ist enthalten"-Abfrage
dynamisch erweiterbar
public Katalog (String name) {
this.name = name;
this.inhalt = new HashMap(); // implementiert Map
}
public void put (String code, Artikel a) {
inhalt.put(code,a);
}
public int anzahl() {
return inhalt.size();
}
public Artikel get (String code) {
return (Artikel)inhalt.get(code);
}
...
Objektoiertierte Programmierung
K3 - 47
public Teammitglied (String name, String abteilung) {
this.name = name;
this.abteilung = abteilung;
this.teilnahme = new HashSet();
} ...
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
Seite 8
Objektoiertierte Programmierung
K3 - 48
Beispiel zu Set-Assoziationen (Teil 2)
Beispiel: Raumverwaltung
static Besprechungsraum freienRaumSuchen
(int groesse, Hour beginn, int dauer)
class Teammitglied {
...
• Suche unter vorhandenen Räumen nach Raum mit mindestens der
Kapazität groesse, aber möglichst klein.
public boolean terminBestaetigen (Date beginn,int dauer) {
}
...
}
– Datenstruktur für vorhandene Räume in Klasse Raumverwaltung
» SortedSet (Elemente: Besprechungsraum)
boolean konflikt = false;
Iterator it = teilnahme.iterator();
while (it.hasNext() && !konflikt) {
Teambesprechung b = (Teambesprechung)it.next();
if (b.inKonflikt(beginn, dauer))
konflikt = true;
};
return !konflikt;
• Überprüfung eines Raumes, ob er für die Zeit ab beginn für die
Länge dauer bereits belegt ist.
– Operation in Klasse Besprechungsraum:
boolean frei (Hour beginn, int dauer)
– Datenstruktur in Klasse Besprechungsraum für Zeiten (Stunden):
» Set (Elemente: Hour)
• Zusatzanforderung (Variante): Überprüfung, welcher andere
Termin eine bestimmte Stunde belegt.
– Datenstruktur in Klasse Besprechungsraum:
» Map (Schlüssel: Hour, Wert: Teambesprechung)
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
Objektoiertierte Programmierung
K3 - 49
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
Raumverwaltung: Freien Raum suchen
class Raumverwaltung {
private static SortedSet vorhandeneRaeume = new TreeSet();
// vorhandene Raeume, aufsteigend nach Groesse sortiert
static Besprechungsraum freienRaumSuchen
(int groesse, Hour beginn, int dauer) {
Besprechungsraum r = null;
boolean gefunden = false;
Iterator it = vorhandeneRaeume.iterator();
while (! gefunden && it.hasNext()) {
r = (Besprechungsraum)it.next();
if (r.grossGenug(groesse)&&r.frei(beginn,dauer))
gefunden = true;
};
return r; // also null, falls nicht gefunden
}
...
}
Lothar Schmitz UniBwM (teils nach Prof. Hußmann TUD)
Objektoiertierte Programmierung
K3 - 51
Seite 9
Objektoiertierte Programmierung
K3 - 50
Herunterladen