Vom objektorientierten Entwurf zur Implementierung in Java
2. Dezember 2014
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
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
Taentzer Einführung in die Softwaretechnik 228
Beispiel: Entwurfsmodell
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
Java Standard Edition 8: Überblick
Taentzer Einführung in die Softwaretechnik 230
aus „http://docs.oracle.com/javase/8/docs/“
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.
Java Collections Klassen (1)
Taentzer Einführung in die Softwaretechnik 232
aus „http://wiki3.cosc.canterbury.ac.nz“
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)).
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
Welche Implementierungsklassen gibt es?
Taentzer Einführung in die Softwaretechnik 235
aus “docs.oracle.com/javase/tutorial/collections/implementations”
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
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);
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:
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:
Natürliche Ordnungen für verschiedene Klassen
Taentzer Einführung in die Softwaretechnik 240
aus “docs.oracle.com/javase/tutorial/collections/interfaces”
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>());
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
Java Collections Klassen (1)
Taentzer Einführung in die Softwaretechnik 243
aus „http://wiki3.cosc.canterbury.ac.nz“
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
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);
Beispiel: Häufigkeit der bestellten Produkte
Taentzer Einführung in die Softwaretechnik 246
Auswahl der richtigen
Collection bzw. Map
Taentzer Einführung in die Softwaretechnik 247
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
Entwurfsmodell: Update
Taentzer Einführung in die Softwaretechnik 249
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
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;
}
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:
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
Realisierung von MethodenBeispiel: Wareneingang bearbeiten
Taentzer Einführung in die Softwaretechnik 254
Wartekartei.java:
Produkt.java:
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
Ausgabe in eine Datei: Beispiel in Java-Code
Taentzer Einführung in die Softwaretechnik 256
Kartei.java:
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
Beispiel:Einlesen aus einer Datei:
Taentzer Einführung in die Softwaretechnik 258
Kartei.java:
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
Top Related