Vom objektorientierten Entwurf zur Implementierung in Java - Dezember 2014

Die Seite wird erstellt Felix Moser
 
WEITER LESEN
Vom objektorientierten Entwurf zur Implementierung in Java - Dezember 2014
Vom objektorientierten Entwurf zur
    Implementierung in Java

          2. Dezember 2014
Vom objektorientierten Entwurf zur Implementierung in Java - Dezember 2014
Ü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