Objektorientierte Implementierung

Werbung
Objektorientierte Implementierung
Verfeinern von Assoziationen mit dem
Java-2 Collection Framework
Softwaretechnologie, © Prof. Uwe Aßmann, Prof. Heinrich Hussmann
1
Objektorientierte Implementierung
mit Java-Datenstrukturen
1 Verfeinern von Assoziationen mit dem Java-2 Collection Framework
2 Programmieren gegen Schnittstellen
3 Auswahl von Datenstrukturen
4 Persistente Datenhaltung
Softwaretechnologie
2
Obligatorische Literatur
►
JDK Tutorial für J2SE oder J2EE, www.java.sun.com
Softwaretechnologie
3
Anwendungsbeispiel für Datenstrukturen
Grobes Entwurfsmodell „Bestellungsabwicklung“ (Auszug):
Bestellung
– kunde: String
+ neuePosition(b: Bestellposition)
+ löschePosition(pos int)
+sonderpreis(pos: int, preis: int)
+ auftragssumme(): int
+ print()
1
{ordered}
*
Bestellposition
– anzahl: String
– preis: int
+ einzelpreis(): int
+ einzelpreis(p: int)
+ positionspreis(): int
für
Überladene
Namen!
*
1
Artikel
– name: String
– preis: int
Softwaretechnologie +
preis(): int
4
Zentrale Frage:
►
Wie bilde ich einseitige Assoziationen aus UML auf Java ab?
►
Antwort 1: durch Abbildung auf Arrays
Softwaretechnologie
5
Testprogramm für Anwendungsbeispiel (1)
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 b1 = new
b1.neuePosition(new
b1.neuePosition(new
b1.neuePosition(new
b1.print(); ...}
Online:
Bestellung0.java
Softwaretechnologie
Bestellung("TUD");
Bestellposition(tisch,1));
Bestellposition(stuhl,4));
Bestellposition(schrank,2));
Bestellung fuer Kunde TUD
0. 1 x Tisch Einzelpreis: 200 Summe: 200
1. 4 x Stuhl Einzelpreis: 100 Summe: 400
2. 2 x Schrank Einzelpreis: 300 Summe: 600
Auftragssumme: 1200
6
Testprogramm für Anwendungsbeispiel (2)
public static void main (String[] args) {
...
b1.sonderpreis(1,50);
b1.print();
}
Bestellung fuer Kunde TUD
0. 1 x Tisch Einzelpreis: 200 Summe: 200
1. 4 x Stuhl Einzelpreis: 50 Summe: 200
2. 2 x Schrank Einzelpreis: 300 Summe: 600
Auftragssumme: 1000
Softwaretechnologie
7
Einfache Realisierung mit Arrays (1)
class Bestellung {
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) {
liste[anzahl] = b;
anzahl++;
// was passiert bei mehr als 20 Positionen ?
}
public void loeschePosition (int pos) {
// geht mit Arrays nicht einfach zu realisieren !
}
Softwaretechnologie
8
Einfache Realisierung mit Arrays (2)
public void sonderpreis (int pos, int preis) {
liste[pos].einzelpreis(preis);
}
public int auftragssumme() {
int s = 0;
for(int i=0; i<anzahl; i++)
s += liste[i].positionspreis();
return s;
}
...
}
Softwaretechnologie
9
Probleme der Realisierung mit Arrays
►
►
►
Dynamische Arrays ?
■
Obergrenze erweiterbar
■
Automatisches Verschieben bei Löschen
Was passiert, wenn keine Ordnung benötigt wird?
Kann das Array sortiert werden?
■
Viele Algorithmen laufen auf sortierten Universen wesentlich schneller als
auf unsortierten (z.B. Queries in Datenbanken)
Softwaretechnologie
10
Collections
►
►
Probleme werden durch das Java-Collection-Framework gelöst,
eine objektorientierte Datenstrukturbibliothek für Java
■
Meiste Standard-Datenstrukturen abgedeckt
■
Verwendung von Vererbung zur Strukturierung
■
Flexibel auch zur eigenen Erweiterung
Basiert auf Java Generic Library (JGL) der Firma ObjectSpace
■
Erst seit Java 1.2 (Java-2) Standard
.
java.util.
►
Zentrale Frage: Wie bilde ich einseitige Assoziationen aus UML auf
Java ab?
►
Antwort: Einziehen von Behälterklassen (collections) aus dem
Collection-Framework
■
Flachklopfen (lowering) von Sprachkonstrukten: Wir klopfen
Assoziationen zu Java-Behälterklassen flach.
Softwaretechnologie
11
Flachklopfen von Assoziationen auf
Behälterklassen
Ersetzen von “*”-Assoziationen durch Behälterklassen
Bestellung
– kunde: String
+ neuePosition(b: Bestellposition)
+ löschePosition(pos int)
+sonderpreis(pos: int, preis: int)
+ auftragssumme(): int
+ print()
1
Bestellung
– kunde: String
+ neuePosition(b: Bestellposition)
+ löschePosition(pos int)
+sonderpreis(pos: int, preis: int)
+ auftragssumme(): int
+ print()
<<interface>>
Collection
1
{ordered}
*
Bestellposition
– anzahl: String
– preis: int
Bestellposition
– anzahl: String
– preis: int
+ einzelpreis(): int
+ einzelpreis(p: int)
+ positionspreis(): int
+ einzelpreis(): int
+ einzelpreis(p: int)
+ positionspreis(): int
für
*
für
1
*
*
1
Artikel
– name: String
– preis: int
Softwaretechnologie
+ preis():
1 {ordered}
int
Artikel
– name: String
– preis: int
+ preis(): int
12
Facetten von Behälterklassen
►
Behälterklassen können anhand von verschiedenen Facetten
klassifiziert werden
■
Facetten sind orthogonale Dimensionen einer Klassifikation oder eines
Modells
Ordnung
Duplikate
Sortierung
Schlüssel
geordnet
ungeordnet
mit Duplikaten
ohne Duplikate
sortiert
unsortiert
mit Schlüssel
ohne Schlüssel
Softwaretechnologie
13
Java Collection Framework: Struktur
<<interface>>
Collection
Ordnung
<<interface>>
List
Schlüssel
Duplikate
<<interface>>
Set
<<interface>>
Map
Sortierung
<<interface>>
SortedSet
<<interface>>
SortedMap
/home/ua1/Courses/ST1/Ressourcen/jdk-1_5_0-doc/index.html
Softwaretechnologie
14
Klassifikation der Schnittstellen der
Datenstrukturen
►
►
►
►
Collection (Kollektion):
■
Ansammlung von Datenelementen
■
Hinzufügen, Entfernen, Suchen, Durchlaufen
Set (Menge):
■
Mehrfachvorkommen spielen keine Rolle
■
Reihenfolge des Einfügens spielt keine Rolle
■
SortedSet (geordnete Menge): Ordnung auf den Elementen +
Sortierung
List (Liste):
■
Mehrfachvorkommen werden separat abgelegt
■
Reihenfolge des Einfügens bleibt erhalten
Map (Abbildung, mapping, associative array):
■
Zuordnung von Schlüsselwerten auf Eintragswerte
■
Mehrfachvorkommen bei Schlüsseln verboten, bei Einträgen erlaubt
SortedMap (geordnete Abbildung): Ordnung auf den Schlüsseln +
Softwaretechnologie
Sortierung danach
■
15
Schnittstelle
java.util.Collection (Auszug)
public interface Collection {
// Queries
public boolean isEmpty();
public boolean contains (Object o);
public boolean equals(Object o);
public int size();
// Repräsentations-Transformierer
public Object[] toArray();
// Zustandsveränderer
public boolean add (Object o);
public boolean remove (Object o);
public void clear();
...
}
Softwaretechnologie
16
java.util.List (Auszug)
public interface List extends Collection {
public
public
public
public
public
public
boolean isEmpty();
boolean contains (Object o);
int size();
boolean add (Object o);
boolean remove (Object o);
void clear();
public
public
public
public
...
Object get (int index);
Object set (int index, Object element);
Object remove (int index);
int indexOf (Object o);
}
Softwaretechnologie
17
java.util.Set (Auszug)
public interface Set {
public
public
public
public
public
public
public
...
public
...
public
boolean isEmpty();
boolean contains (Object o);
int size();
boolean add (Object o); // Semantik??
boolean remove (Object o);
void clear();
boolean equals (Object o);
int hashCode();
Iterator iterator();
}
Softwaretechnologie
18
Object - Collection - List : Beispiel
o : Object
Keine speziellen Operationen anwendbar
"instanceOf"
o : XCol
XCol
"implements"
Collection
add, remove, clear, isEmpty, contains, size
"instanceOf"
o : XList
XList
"implements"
List
add, remove, clear, isEmpty, contains, size,
get, set, remove, indexOf
Softwaretechnologie
19
Die Klasse "Object" (Wiederholung)
• java.lang.Object: allgemeine Eigenschaften aller Objekte.
■
Jede Klasse ist Unterklasse von Object (“extends Object”).
■
Diese Vererbung ist implizit
(d.h. man kann “extends Object” weglassen).
■
Dadurch werden Probleme mit Mehrfachvererbung vermieden.
class Object {
public boolean equals (Object obj);
public int hashCode();
public String toString(); ...
}
• Jede Klasse kann die Standard-Operationen überdefinieren:
– equals: Objektgleichheit (Standard: Referenzgleichheit)
– hashCode: Zahlcodierung
– toString: Textdarstellung, z.B. für println()
Softwaretechnologie
20
Abstrakter und konkreter Datentyp
Konkreter Datentyp
(Implementierung)
Abstrakter Datentyp
(Schnittstelle)
Konkretisierung:
Abstraktion:
►
►
■
Instantiierbare Klassen
■
Operationen
■
Ausführbare Operationen
■
Verhalten der Operationen
Theorie:
■
Datenstrukturen
■
Komplexität
Praxis:
■
►
►
■
■
Verkettete Liste
■
Liste durch Feld
Softwaretechnologie
Algebraische Spezifikationen
.
►
Alternativen
Beispiel:
Theorie:
►
Axiomensysteme
Praxis:
■
Abstrakte Klassen
■
Interfaces
Beispiel:
■
List
21
Implementierungen im Collection-Framework
Vererbung (extends)
<<interface>>
Collection
<<interface>>
List
Implementierung (implements)
<<interface>>
Set
<<interface>>
SortedSet
ArrayList
LinkedList
Softwaretechnologie
HashSet
<<interface>>
Map
<<interface>>
SortedMap
HashMap
TreeSet
TreeMap
22
Beispiel: Implementierungsklasse
java.util.ArrayList (Auszug)
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 Object remove (int index);
public int indexOf (Object o);
public ArrayList (int initialCapacity);
public void ensureCapacity (int minCapacity);
...
}
Softwaretechnologie
23
The End
►
Diese Folien sind eine überarbeitete Version der Vorlesungsfolien zur
Vorlesung Softwaretechnologie von © Prof. H. Hussmann, 2002.
used by permission.
Softwaretechnologie
24
Herunterladen