Vom objektorientierten Entwurf zur Implementierung in Java - Dezember 2014
←
→
Transkription von Seiteninhalten
Wenn Ihr Browser die Seite nicht korrekt rendert, bitte, lesen Sie den Inhalt der Seite unten
Ü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 226
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 227
Beispiel: Entwurfsmodell Taentzer Einführung in die Softwaretechnik 228
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 Taentzer Einführung in die Softwaretechnik 229
Java Standard Edition 8: Überblick aus „http://docs.oracle.com/javase/8/docs/“ Taentzer Einführung in die Softwaretechnik 230
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. Taentzer Einführung in die Softwaretechnik 231
Java Collections Klassen (1) aus „http://wiki3.cosc.canterbury.ac.nz“ Taentzer Einführung in die Softwaretechnik 232
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 233
Die Collection-Schnittstelle Typ: Collection - 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 iterator() – gibt einen Iterator auf die Collection zurück Taentzer Einführung in die Softwaretechnik 234
Welche Implementierungsklassen gibt es? aus “docs.oracle.com/javase/tutorial/collections/implementations” Taentzer Einführung in die Softwaretechnik 235
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
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 c = new HashSet(); c.add(“a“); c.add(“b“); for(String i:c) System.out.println(i); Taentzer Einführung in die Softwaretechnik 237
Beispielcode für eine sortierte Menge Schnittstelle: SortedSet Implementierung: TreeSet Die zu sortierenden Elemente müssen Comparable implementieren. Ausgabe: Taentzer Einführung in die Softwaretechnik 238
Die Schnittstelle Comparable zu überschreibende Methode: Beispiel: compareTo() Parameter: das zu vergleichende Objekt o Rückgabe: negativ: this kleiner o 0: this gleich o positiv: this größer o bzgl. der definierten Ordnung wirft Exceptions: NullPointerException ClassCastException Taentzer Einführung in die Softwaretechnik 239
Natürliche Ordnungen für verschiedene Klassen aus “docs.oracle.com/javase/tutorial/collections/interfaces” Taentzer Einführung in die Softwaretechnik 240
Gleichzeitiges Iterieren und Ändern von Collections Code-Ausschnitt: Set s = new HashSet(); 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 c = Collection.synchronized(new HashSet()); Taentzer Einführung in die Softwaretechnik 241
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) aus „http://wiki3.cosc.canterbury.ac.nz“ Taentzer Einführung in die Softwaretechnik 243
Map-Schnittstellenklassen Map Map 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. SortedMap Map, deren Schlüssel zusätzlich sortiert werden. HashMap HashCode als Schlüssel Taentzer Einführung in die Softwaretechnik 244
Map-Schnittstelle Map - 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 keySet() – gibt die Schlüsselmenge zurück Collection values() – gibt die Wertansammlung zurück Map m = new HashMap(); m.put(1,"c"); m.put(2,"d"); Collection strings = m.values(); for (String s: strings) System.out.println(s); Taentzer Einführung in die Softwaretechnik 245
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
Ü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 Taentzer Einführung in die Softwaretechnik 248
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-Dateien Taentzer Einführung in die Softwaretechnik 250
Singleton-Klassen public class Singleton { Es soll genau ein Objekt der private static Singleton Klasse geben. instance = null; Lösung: private Singleton() {} Instanz als Klassenvariable public static getInstance() { Privater Konstruktor if (instance == null){ Getter für die Instanz instance = new Singleton(); } Beispiele: return instance; 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
Singleton-Klassen Beispiel: Besser als globale Variable: wird nur erzeugt, wenn Wartekartei.java: benötigt kann spezialisiert werden kann leichter zu mehreren Objekten geändert werden Taentzer Einführung in die Softwaretechnik 252
Realisierung von Methoden Beispiel: 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 Methoden Beispiel: Wareneingang bearbeiten Produkt.java: Wartekartei.java: Taentzer Einführung in die Softwaretechnik 254
Ausgabe in eine Datei Bibliothek java.io benutzen Datei zum Schreiben öffnen z.B: FileWriter Output-Stream erzeugen zum Schreiben von Text und in die angegebene z:B: java.io.BufferedWriter Datei lenken write() zum Schreiben eines IOException abfangen Buchstabens oder eines Strings Strom zum Schluss schließen 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 Kartei.java: Taentzer Einführung in die Softwaretechnik 256
Einlesen aus einer Datei Bibliotheken java.io und java.util benutzen z.B. FileReader Datei zum Lesen öffnen zum Lesen von Text Input-Stream erzeugen und z.B. BufferedReader mit der Datei verknüpfen read(), readLine(), close() – IOException abfangen analog zu BufferedWriter Strom zum Schluss schließen z.B. Scanner strukturiertes Einlesen mit hasNext() – hat noch Eingabe StreamTokenizer oder nextInt() – nächster Integer Scanner next() – nächster String strukturiert die Eingabe in sinnvolle Einheiten nextLine() – nächste Zeile Taentzer Einführung in die Softwaretechnik 257
Beispiel: Einlesen aus einer Datei: Kartei.java: Taentzer Einführung in die Softwaretechnik 258
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 Taentzer Einführung in die Softwaretechnik 259
Sie können auch lesen