vom objektorientierten entwurf zur implementierung in java · aus...
TRANSCRIPT
![Page 1: Vom objektorientierten Entwurf zur Implementierung in Java · aus “docs.oracle.com/javase/tutorial/collections/implementations](https://reader035.vdocuments.site/reader035/viewer/2022070611/5b15bdf57f8b9ac7128e26f3/html5/thumbnails/1.jpg)
Vom objektorientierten Entwurf zur Implementierung in Java
2. Dezember 2014
![Page 2: Vom objektorientierten Entwurf zur Implementierung in Java · aus “docs.oracle.com/javase/tutorial/collections/implementations](https://reader035.vdocuments.site/reader035/viewer/2022070611/5b15bdf57f8b9ac7128e26f3/html5/thumbnails/2.jpg)
Taentzer Einführung in die Softwaretechnik 226
Überblick
Verwendung von Frameworks und Bibliotheken Was enthält die Java Standard Edition?
Implementieren mit dem Java Collections Framework zum Arbeiten mit Objektmengen, –listen und Abbildungen
Dokumentation: Java Standard Edition 8: http://docs.oracle.com/javase/8/docs/
Wie wird ein Entwurfsmodell in Code übersetzt? Ein- und Ausgabe in Dateien
![Page 3: Vom objektorientierten Entwurf zur Implementierung in Java · aus “docs.oracle.com/javase/tutorial/collections/implementations](https://reader035.vdocuments.site/reader035/viewer/2022070611/5b15bdf57f8b9ac7128e26f3/html5/thumbnails/3.jpg)
Taentzer Einführung in die Softwaretechnik 227
Implementierungsprinzipien
Verwendung von Klassenbibliotheken, wo möglich Wiederverwendung des Codes soweit möglich Realisierung des Entwurfs, bei Abweichungen den
Entwurf entsprechend anpassen auf die Testbarkeit von Methoden achten kleine Einheiten realisieren und testen weitgehend selbstdokumentierender Code Verwendung von javadoc zur Dokumentation von Klassen
und komplexeren Methoden
![Page 4: Vom objektorientierten Entwurf zur Implementierung in Java · aus “docs.oracle.com/javase/tutorial/collections/implementations](https://reader035.vdocuments.site/reader035/viewer/2022070611/5b15bdf57f8b9ac7128e26f3/html5/thumbnails/4.jpg)
Taentzer Einführung in die Softwaretechnik 228
Beispiel: Entwurfsmodell
![Page 5: Vom objektorientierten Entwurf zur Implementierung in Java · aus “docs.oracle.com/javase/tutorial/collections/implementations](https://reader035.vdocuments.site/reader035/viewer/2022070611/5b15bdf57f8b9ac7128e26f3/html5/thumbnails/5.jpg)
Taentzer Einführung in die Softwaretechnik 229
Java Standard Edition
Zu Java gibt es eine große Standardklassenbibliothek. Unter anderem enthalten:
java.awt, java.swing: Graphiken und Bilder, graphische Benutzeroberflächen
java.lang: grundlegende Klassen für die Sprache Java java.io: Ein- und Ausgabe in Datenströme, Dateien, etc. java.math: mathematische Funktionen java.net: Implementierung von Netzwerk-Anwendungen java.sql: Datenquellen, insbesondere relationale Datenbanken java.util: nützliche Helfer, insbesondere Java Collections
Framework, Ereignismodell, Date und Time-Funktionalitäten
![Page 6: Vom objektorientierten Entwurf zur Implementierung in Java · aus “docs.oracle.com/javase/tutorial/collections/implementations](https://reader035.vdocuments.site/reader035/viewer/2022070611/5b15bdf57f8b9ac7128e26f3/html5/thumbnails/6.jpg)
Java Standard Edition 8: Überblick
Taentzer Einführung in die Softwaretechnik 230
aus „http://docs.oracle.com/javase/8/docs/“
![Page 7: Vom objektorientierten Entwurf zur Implementierung in Java · aus “docs.oracle.com/javase/tutorial/collections/implementations](https://reader035.vdocuments.site/reader035/viewer/2022070611/5b15bdf57f8b9ac7128e26f3/html5/thumbnails/7.jpg)
Taentzer Einführung in die Softwaretechnik 231
Das Java Collections Framework
Das Java Collections Framework (JCF) bietet Implementierungen der gängigsten Datenstrukturen.
zu finden im Paket java.util Z.B. lassen sich die Assoziationen durch JCF-Daten-
strukturen implementieren. Collection für Objektbehälter Map für Zuordnungen von Schlüsseln zu Werten
Schlüssel sind eindeutig.
![Page 8: Vom objektorientierten Entwurf zur Implementierung in Java · aus “docs.oracle.com/javase/tutorial/collections/implementations](https://reader035.vdocuments.site/reader035/viewer/2022070611/5b15bdf57f8b9ac7128e26f3/html5/thumbnails/8.jpg)
Java Collections Klassen (1)
Taentzer Einführung in die Softwaretechnik 232
aus „http://wiki3.cosc.canterbury.ac.nz“
![Page 9: Vom objektorientierten Entwurf zur Implementierung in Java · aus “docs.oracle.com/javase/tutorial/collections/implementations](https://reader035.vdocuments.site/reader035/viewer/2022070611/5b15bdf57f8b9ac7128e26f3/html5/thumbnails/9.jpg)
Taentzer Einführung in die Softwaretechnik 233
Collection Schnittstellenklassen
Collection: Ein Behälter für Objekte. Die im folgenden aufgeführten Schnittstellen Set, SortedSet und List sind von Collection abgeleitet.
Set: Ein Behälter für Objekte mit Mengencharakter. Duplikate sind nicht erlaubt.
SortedSet: Analog zu Set mit dem Unterschied, dass die Elemente sortiert werden.
List: Ein Objektbehälter, in dem Objekte über Integer-Werte indiziert werden. Duplikate sind erlaubt. Ein neues Element kann an eine beliebige Stelle in einer List positioniert werden.
Queue: Ein Objektbehälter, in den immer vorn oder immer hinten eingefügt und vorn herausgenommen wird (LIFO (Stack) und FIFO (Queue)).
![Page 10: Vom objektorientierten Entwurf zur Implementierung in Java · aus “docs.oracle.com/javase/tutorial/collections/implementations](https://reader035.vdocuments.site/reader035/viewer/2022070611/5b15bdf57f8b9ac7128e26f3/html5/thumbnails/10.jpg)
Taentzer Einführung in die Softwaretechnik 234
Die Collection-Schnittstelle
Typ: Collection<E> - iterierbare Ansammlung von Objekten vom Typ E
boolean add(E e) – fügt Element e hinzu
boolean contains(E e) – prüft, ob Element e enthalten ist
boolean remove(E e) – entfernt Element e
Iterator<E> iterator() – gibt einen Iterator auf die Collection zurück
![Page 11: Vom objektorientierten Entwurf zur Implementierung in Java · aus “docs.oracle.com/javase/tutorial/collections/implementations](https://reader035.vdocuments.site/reader035/viewer/2022070611/5b15bdf57f8b9ac7128e26f3/html5/thumbnails/11.jpg)
Welche Implementierungsklassen gibt es?
Taentzer Einführung in die Softwaretechnik 235
aus “docs.oracle.com/javase/tutorial/collections/implementations”
![Page 12: Vom objektorientierten Entwurf zur Implementierung in Java · aus “docs.oracle.com/javase/tutorial/collections/implementations](https://reader035.vdocuments.site/reader035/viewer/2022070611/5b15bdf57f8b9ac7128e26f3/html5/thumbnails/12.jpg)
Implementierungsstrukturen
Array…: intern ein größenveränderliches Array size, get(i), set(i) in konstanter Zeit, alle anderen Operationen in linearer Zeit
Hash…: intern eine Hashing und Mapping-Struktur Die Schlüssel (Keys) haben i.a. keine Bedeutung (ungeordnet). effiziente und ca. gleiche Zeit zum Auffinden von Elementen
Linked…: Elemente intern verlinkt optimal für das Einfügen/Löschen von Elementen und zum
Iterieren durch alle Elemente
Tree…: interne Speicherung durch einen Baum Reihenfolge der Elemente durch natürliche Ordnung oder einen
speziellen Vergleichsoperator
Taentzer Einführung in die Softwaretechnik 236
![Page 13: Vom objektorientierten Entwurf zur Implementierung in Java · aus “docs.oracle.com/javase/tutorial/collections/implementations](https://reader035.vdocuments.site/reader035/viewer/2022070611/5b15bdf57f8b9ac7128e26f3/html5/thumbnails/13.jpg)
Taentzer Einführung in die Softwaretechnik 237
Durch eine Collection iterieren Java 1.4 oder älter:Collection c = new HashSet();c.add(“a“);c.add(“b“);Iterator i = c.iterator();while(i.hasNext())
System.out.println((String)i.next());
ab Java 5:Collection<String> c = new HashSet<String>();c.add(“a“);c.add(“b“);for(String i:c)
System.out.println(i);
![Page 14: Vom objektorientierten Entwurf zur Implementierung in Java · aus “docs.oracle.com/javase/tutorial/collections/implementations](https://reader035.vdocuments.site/reader035/viewer/2022070611/5b15bdf57f8b9ac7128e26f3/html5/thumbnails/14.jpg)
Beispielcode für eine sortierte Menge Schnittstelle:
SortedSet Implementierung:
TreeSet Die zu sortierenden
Elemente müssen Comparableimplementieren.
Taentzer Einführung in die Softwaretechnik 238
Ausgabe:
![Page 15: Vom objektorientierten Entwurf zur Implementierung in Java · aus “docs.oracle.com/javase/tutorial/collections/implementations](https://reader035.vdocuments.site/reader035/viewer/2022070611/5b15bdf57f8b9ac7128e26f3/html5/thumbnails/15.jpg)
Die Schnittstelle Comparable zu überschreibende Methode:
compareTo() Parameter: das zu
vergleichende Objekt o Rückgabe:
negativ: this kleiner o 0: this gleich o positiv: this größer obzgl. der definierten Ordnung
wirft Exceptions: NullPointerException ClassCastException
Taentzer Einführung in die Softwaretechnik 239
Beispiel:
![Page 16: Vom objektorientierten Entwurf zur Implementierung in Java · aus “docs.oracle.com/javase/tutorial/collections/implementations](https://reader035.vdocuments.site/reader035/viewer/2022070611/5b15bdf57f8b9ac7128e26f3/html5/thumbnails/16.jpg)
Natürliche Ordnungen für verschiedene Klassen
Taentzer Einführung in die Softwaretechnik 240
aus “docs.oracle.com/javase/tutorial/collections/interfaces”
![Page 17: Vom objektorientierten Entwurf zur Implementierung in Java · aus “docs.oracle.com/javase/tutorial/collections/implementations](https://reader035.vdocuments.site/reader035/viewer/2022070611/5b15bdf57f8b9ac7128e26f3/html5/thumbnails/17.jpg)
Taentzer Einführung in die Softwaretechnik 241
Gleichzeitiges Iterieren und Ändern von Collections
Code-Ausschnitt:
Set<String> s = new HashSet<String>();s.add(“a“);s.add(“b“);for(String i: s){
System.out.println(i);s.add(“x“);}
führt zu einer Concurrent Modification Exception Deshalb: Iterieren und Änderungen separat halten (eventuell in einer Hilfs-
Collection). Also erst ändern, dann iterieren. Oder erst iterieren, dann ändern. Absicherung:
Set<String> c = Collection.synchronized(new HashSet<String>());
![Page 18: Vom objektorientierten Entwurf zur Implementierung in Java · aus “docs.oracle.com/javase/tutorial/collections/implementations](https://reader035.vdocuments.site/reader035/viewer/2022070611/5b15bdf57f8b9ac7128e26f3/html5/thumbnails/18.jpg)
Tuning der Implementierung
ArrayList: initialCapacity: Anzahl der Elemente in der ArrayList, bevor sie
erweitert werden muss
Listen von fester Länge: Arrays.asList() HashSet:
initialCapacity: Anzahl der Hash-Behälter (engl. Buckets), initial: 16 Richtwert: 2 x die erwartete Größe
load factor: Auslastung der Behälter (wird meist nicht geändert)
Taentzer Einführung in die Softwaretechnik 242
![Page 19: Vom objektorientierten Entwurf zur Implementierung in Java · aus “docs.oracle.com/javase/tutorial/collections/implementations](https://reader035.vdocuments.site/reader035/viewer/2022070611/5b15bdf57f8b9ac7128e26f3/html5/thumbnails/19.jpg)
Java Collections Klassen (1)
Taentzer Einführung in die Softwaretechnik 243
aus „http://wiki3.cosc.canterbury.ac.nz“
![Page 20: Vom objektorientierten Entwurf zur Implementierung in Java · aus “docs.oracle.com/javase/tutorial/collections/implementations](https://reader035.vdocuments.site/reader035/viewer/2022070611/5b15bdf57f8b9ac7128e26f3/html5/thumbnails/20.jpg)
Taentzer Einführung in die Softwaretechnik 244
Map-Schnittstellenklassen
MapMap definiert eine Zuordnung von Schlüsseln zu Werten. Jedem Schlüssel wird eindeutig ein Wert zugewiesen. Schlüssel können somit keine Duplikate enthalten, Werte schon.
SortedMapMap, deren Schlüssel zusätzlich sortiert werden.
HashMapHashCode als Schlüssel
![Page 21: Vom objektorientierten Entwurf zur Implementierung in Java · aus “docs.oracle.com/javase/tutorial/collections/implementations](https://reader035.vdocuments.site/reader035/viewer/2022070611/5b15bdf57f8b9ac7128e26f3/html5/thumbnails/21.jpg)
Taentzer Einführung in die Softwaretechnik 245
Map-Schnittstelle Map<K,V> - Zuordnung von Objekten der Klasse V zu Schlüsseln der
Klasse K V put(K key, V value) – Zuordnung von Wert value zu Schlüssel
key boolean containsKey(K key) – prüft, ob der Schlüssel key definiert
ist V get(K key) – gibt den Wert für Schlüssel key zurück Set<K> keySet() – gibt die Schlüsselmenge zurück Collection<V> values() – gibt die Wertansammlung zurück
Map<Integer,String> m = new HashMap<Integer,String>();m.put(1,"c");m.put(2,"d");Collection<String> strings = m.values();for (String s: strings)
System.out.println(s);
![Page 22: Vom objektorientierten Entwurf zur Implementierung in Java · aus “docs.oracle.com/javase/tutorial/collections/implementations](https://reader035.vdocuments.site/reader035/viewer/2022070611/5b15bdf57f8b9ac7128e26f3/html5/thumbnails/22.jpg)
Beispiel: Häufigkeit der bestellten Produkte
Taentzer Einführung in die Softwaretechnik 246
![Page 23: Vom objektorientierten Entwurf zur Implementierung in Java · aus “docs.oracle.com/javase/tutorial/collections/implementations](https://reader035.vdocuments.site/reader035/viewer/2022070611/5b15bdf57f8b9ac7128e26f3/html5/thumbnails/23.jpg)
Auswahl der richtigen
Collection bzw. Map
Taentzer Einführung in die Softwaretechnik 247
![Page 24: Vom objektorientierten Entwurf zur Implementierung in Java · aus “docs.oracle.com/javase/tutorial/collections/implementations](https://reader035.vdocuments.site/reader035/viewer/2022070611/5b15bdf57f8b9ac7128e26f3/html5/thumbnails/24.jpg)
Taentzer Einführung in die Softwaretechnik 248
Überblick
Verwendung von Frameworks und Bibliotheken Was enthält die Java Standard Edition?
Implementieren mit dem Java Collections Framework zum Arbeiten mit Objektmengen, –listen und Abbildungen
Dokumentation: Java Standard Edition 8: http://docs.oracle.com/javase/7/docs/
Wie wird ein Entwurfsmodell in Code übersetzt? Ein- und Ausgabe in Dateien
![Page 25: Vom objektorientierten Entwurf zur Implementierung in Java · aus “docs.oracle.com/javase/tutorial/collections/implementations](https://reader035.vdocuments.site/reader035/viewer/2022070611/5b15bdf57f8b9ac7128e26f3/html5/thumbnails/25.jpg)
Entwurfsmodell: Update
Taentzer Einführung in die Softwaretechnik 249
![Page 26: Vom objektorientierten Entwurf zur Implementierung in Java · aus “docs.oracle.com/javase/tutorial/collections/implementations](https://reader035.vdocuments.site/reader035/viewer/2022070611/5b15bdf57f8b9ac7128e26f3/html5/thumbnails/26.jpg)
Java-Projekt: 1. Iteration Realisierung der Datenschicht
mit Datenhaltung in Dateien Datenschicht in Paket data
UML-Klassen Java-Klassen UML-Enumeration Java-Enum UML-Attribute Java-Felder binäre UML-Assoziationen ein
oder zwei Java-Felder UML-Operation Java-Methode UML-Vererbung Java-Vererbung
Paket test für Test-Klassen Ordner files für Test-DateienTaentzer Einführung in die Softwaretechnik 250
![Page 27: Vom objektorientierten Entwurf zur Implementierung in Java · aus “docs.oracle.com/javase/tutorial/collections/implementations](https://reader035.vdocuments.site/reader035/viewer/2022070611/5b15bdf57f8b9ac7128e26f3/html5/thumbnails/27.jpg)
Singleton-Klassen Es soll genau ein Objekt der
Klasse geben. Lösung:
Instanz als Klassenvariable Privater Konstruktor Getter für die Instanz
Beispiele: Factory: Eine Klasse, die
Objekte eines Pakets erzeugt. Einstiegsklasse für ein Paket
Registry: zentrale Klasse, die Informationen vermittelt
Taentzer Einführung in die Softwaretechnik 251
public class Singleton {private static Singleton
instance = null;private Singleton() {}
public static getInstance() {if (instance == null){
instance = new Singleton();}return instance;
}
![Page 28: Vom objektorientierten Entwurf zur Implementierung in Java · aus “docs.oracle.com/javase/tutorial/collections/implementations](https://reader035.vdocuments.site/reader035/viewer/2022070611/5b15bdf57f8b9ac7128e26f3/html5/thumbnails/28.jpg)
Singleton-Klassen
Besser als globale Variable: wird nur erzeugt, wenn
benötigt kann spezialisiert werden kann leichter zu mehreren
Objekten geändert werden
Taentzer Einführung in die Softwaretechnik 252
Wartekartei.java:
Beispiel:
![Page 29: Vom objektorientierten Entwurf zur Implementierung in Java · aus “docs.oracle.com/javase/tutorial/collections/implementations](https://reader035.vdocuments.site/reader035/viewer/2022070611/5b15bdf57f8b9ac7128e26f3/html5/thumbnails/29.jpg)
Realisierung von MethodenBeispiel: Wareneingang bearbeiten
längere Algorithmen in funktionale Einheiten zerlegen
Welche beteiligten Objekte übernehmen welche Einheiten?
neue (private) Methoden identifizieren
Entwurfsmodell bzgl. neuer öffentlicher Methoden anpassen
Taentzer Einführung in die Softwaretechnik 253
![Page 30: Vom objektorientierten Entwurf zur Implementierung in Java · aus “docs.oracle.com/javase/tutorial/collections/implementations](https://reader035.vdocuments.site/reader035/viewer/2022070611/5b15bdf57f8b9ac7128e26f3/html5/thumbnails/30.jpg)
Realisierung von MethodenBeispiel: Wareneingang bearbeiten
Taentzer Einführung in die Softwaretechnik 254
Wartekartei.java:
Produkt.java:
![Page 31: Vom objektorientierten Entwurf zur Implementierung in Java · aus “docs.oracle.com/javase/tutorial/collections/implementations](https://reader035.vdocuments.site/reader035/viewer/2022070611/5b15bdf57f8b9ac7128e26f3/html5/thumbnails/31.jpg)
Ausgabe in eine Datei
Bibliothek java.io benutzen Datei zum Schreiben öffnen Output-Stream erzeugen
und in die angegebene Datei lenken IOException abfangen Strom zum Schluss schließen
z.B: FileWriter zum Schreiben von Text
z:B: java.io.BufferedWriter write() zum Schreiben eines
Buchstabens oder eines Strings
newLine() zum Schrieben eines Zeilenseparators
close() zum Schließen des Stroms
Taentzer Einführung in die Softwaretechnik 255
![Page 32: Vom objektorientierten Entwurf zur Implementierung in Java · aus “docs.oracle.com/javase/tutorial/collections/implementations](https://reader035.vdocuments.site/reader035/viewer/2022070611/5b15bdf57f8b9ac7128e26f3/html5/thumbnails/32.jpg)
Ausgabe in eine Datei: Beispiel in Java-Code
Taentzer Einführung in die Softwaretechnik 256
Kartei.java:
![Page 33: Vom objektorientierten Entwurf zur Implementierung in Java · aus “docs.oracle.com/javase/tutorial/collections/implementations](https://reader035.vdocuments.site/reader035/viewer/2022070611/5b15bdf57f8b9ac7128e26f3/html5/thumbnails/33.jpg)
Einlesen aus einer Datei Bibliotheken java.io und
java.util benutzen Datei zum Lesen öffnen Input-Stream erzeugen und
mit der Datei verknüpfen IOException abfangen Strom zum Schluss schließen
strukturiertes Einlesen mit StreamTokenizer oder Scanner strukturiert die Eingabe in sinnvolle
Einheiten
z.B. FileReader zum Lesen von Text
z.B. BufferedReader read(), readLine(), close() –
analog zu BufferedWriter
z.B. Scanner hasNext() – hat noch Eingabe nextInt() – nächster Integer next() – nächster String nextLine() – nächste Zeile
Taentzer Einführung in die Softwaretechnik 257
![Page 34: Vom objektorientierten Entwurf zur Implementierung in Java · aus “docs.oracle.com/javase/tutorial/collections/implementations](https://reader035.vdocuments.site/reader035/viewer/2022070611/5b15bdf57f8b9ac7128e26f3/html5/thumbnails/34.jpg)
Beispiel:Einlesen aus einer Datei:
Taentzer Einführung in die Softwaretechnik 258
Kartei.java:
![Page 35: Vom objektorientierten Entwurf zur Implementierung in Java · aus “docs.oracle.com/javase/tutorial/collections/implementations](https://reader035.vdocuments.site/reader035/viewer/2022070611/5b15bdf57f8b9ac7128e26f3/html5/thumbnails/35.jpg)
Taentzer Einführung in die Softwaretechnik 259
Zusammenfassung
Java Collections Framework Verwendung von Standardstrukturen und –algorithmen bzgl.
Objektmengen, –listen und Abbildungen Sortieren entlang einer natürlichen Ordnung, implementiert durch
Comparable Verschiedene Implementierungen, je nach Anforderungen: mehr
Iterieren oder mehr Hinzufügen und Löschen Nur eine Aktion zu einer Zeit: Nicht gleichzeitig durch eine Collection
iterieren und sie ändern.
Möglichst direkte Übersetzung des Entwurfsmodells in Code Ein- und Ausgabe in Dateien
für die Eingabe Scanner benutzen