Interface Comparator - Generische Klassen Heute

Die Seite wird erstellt Sibylle-Angelika Dick
 
WEITER LESEN
Interface Comparator - Generische Klassen Heute
Heute

      • Exceptions
      • Enumerations
      • Generische Klassen
      • Interface Comparator
      • Grafische Benutzeroberflächen
      • (Anonyme) innere Klassen
      • main / ausführbare jar-Files

14.01.2021             OOP - VO 13      1
Organisatorisches

  • Heute letzte VO-Einheit

  • VO-Prüfung am Do 21.1., ab 8:30
    (online) → Anmeldung über MU Online

  • anschließend letzte UE mit Wissensüb.

  • UE-Abschlusstest am 28.1. (online)

  • Bei Fragen → Tutorium

        UE wird evaluiert. Nehmen Sie teil!

14.01.2021            OOP - VO 13             2
Stoff VO-Prüfung
  • equals, hashCode, Comparable
  • abstrakte Klassen, Interfaces
  • Collection, Set, List
  • Map
  • Call by value / Call by reference
  • Vererbung (inkl. Klasse Object)
  • enum
  • Exceptions & Errors
  • Wrapper-Klassen
  • Rekursion
  • CuP-Stoff
14.01.2021            OOP - VO 13       3
Generische Klassen

       Generische Klassen selbst erstellen:

             class MyList
             {
                  ...
             }

       (T steht hier für einen beliebigen Datentyp)

14.01.2021              OOP - VO 13               4
Enumeration types (1)

  • Enumeration types sind definiert durch die
    Aufzählung einer festen Anzahl von Möglichkeiten,
    z.B.

             enum Wochentag{
                MONTAG, DIENSTAG, MITTWOCH,
                DONNERSTAG, FREITAG, SAMSTAG, SONNTAG
              }

  • Beispiel zum Umgang mit Objekten eines
    Enumeration Types:

             Wochentag einTag = Wochentag.DIENSTAG;

14.01.2021                 OOP - VO 13                  5
Enumeration types (2)

  • Enumeration types sollten immer dann
    verwendet werden, wenn es eine fixe und
    kleine Anzahl von möglichen Werten gibt.
  • Java bietet weitere Möglichkeiten bei der
    Verwendung von Enumerations types
    (vgl. Bsp. Planeten).
  • Formal wird durch einen Enumeration
    type eine Klasse definiert mit den
    entsprechenden statischen Konstanten.

14.01.2021          OOP - VO 13                 6
Enumeration types (3)

  • Enumeration types können Attribute,
    entsprechenden Konstruktor und
    Methoden haben.

  • Konstruktor ist nicht public, da von
    Enumeration type keine Objekte erzeugt
    werden.

  • Jeder Enumeration type hat Methode
    values(), die ein Array der
    verschiedenen Werte zurückgibt.

14.01.2021          OOP - VO 13              7
Fehler (Errors)

     Drei Arten von Fehlern:
  • Compilerfehler
  • Laufzeitfehler (Runtime errors)
  • Logische Fehler

14.01.2021            OOP - VO 13     8
Errors und Exceptions

  • Exceptions erlauben eine einheitliche
    Behandlung von Sonderfällen.
  • Exceptions und Errors sind in einer
    Vererbungshierarchie organisiert.

  • Errors:
         Wesentliche Fehler des Laufzeitsystems, die
         vom Anwendungsprogramm in der Regel
         nicht behoben werden können.

14.01.2021               OOP - VO 13                   9
Exceptions und Errors

14.01.2021           OOP - VO 13     10
Exceptions
  • Geprüfte (checked) Exceptions:
      – Besondere Bedingungen insbesondere der
        Systemumgebung, z.B. IOException.

      – Für diese Exceptions muss eine
        Fehlerbehandlung vorgesehen werden.

  • Ungeprüfte (unchecked) Exceptions
    (=RuntimeExceptions):
      – Weisen in der Regel auf Programmfehler hin.

      – Für RuntimeExceptions muss keine
        Fehlerbehandlung vorgesehen sein.
14.01.2021             OOP - VO 13                    11
Fehlerbehandlung

  • Methoden (und Konstruktoren), bei denen eine
    checked Exception auftreten kann, müssen
    diese im Methodenkopf angeben, z.B.:
     void writeObject(Object ob) throws IOException

  • Wenn eine aufgerufene Methode eine Exception
    wirft, kann die aufrufende Methode
      – diese weitergeben,
      – oder in einem try-Block abfangen.

  • Beim Weitergeben muss die Exception im
    Methodenkopf der aufrufenden Methode
    angegeben werden.
14.01.2021                   OOP - VO 13              12
try-Block
      try{
               Anweisungsblock;
             }catch(IOException e){
               Fehlerbehandlung1;
             }catch(ClassNotFoundException e){
               Fehlerbehandlung2;
             }

      Tritt im Anweisungsblock eine Exception auf,
      wird der Anweisungsblock abgebrochen und
      die entsprechende Fehlerbehandlung
      durchgeführt:
      Es wird die Fehlerbehandlung der ersten passenden
      catch-Anweisung durchgeführt.

14.01.2021                 OOP - VO 13                    13
java.io.*
  •     Wichtige Klassen:
      –      FileWriter, FileReader, Buffered Reader
      –      FileOutputStream, FileInputStream
      –      ObjectOutputStream, ObjectInputStream

  •     Interface Serializable:
      – Nur Klassen, die Serializable implementieren,
        können auf Streams geschrieben werden.
      – Serializable erfordert keine Implementierung von
        Methoden („Marker-Interface“).

  •     Nur ein sehr kleiner Ausschnitt der
        Möglichkeiten von Ein-/Ausgabe auf externe
        Geräte (Files, Netzwerk, …) mit Java.
14.01.2021                 OOP - VO 13                     14
Serializable
  • Files sind eine sequentielle Anordnung von Daten.
  • Objekte mit ihren Objekt-Referenzen können eine
    komplizierte Struktur haben.
  • Um Objekte in ein File zu schreiben, müssen die Daten
    sequentiell angeordnet werden.
  • Java erledigt das automatisch für alle Klassen, die
    Serializable implementieren.
  • Nur Objekte von Klassen die Serializable
    implementieren, können auf einen Stream geschrieben
    werden.
  • Dabei werden auch (rekursiv) alle Objekte, auf die es
    vom geschriebenen Objekt aus Referenzen gibt, auf den
    Stream geschrieben.
  • Serializable erfordert keine Implementierung von
    Methoden, es ist ein „Marker-Interface“.

14.01.2021                 OOP - VO 13                      15
IO-Klassen

  • FileOutputStream, FileInputStream
         stellen die Verbindung zu einem File für das
         Schreiben oder Lesen her.
  • ObjectOutputStream,ObjectInputStream
         ermöglichen das Schreiben von Objekten und
         primitiven Datentypen auf einen
         OutputStream (bzw. das Lesen von einem
         InputStream).
      – Die relevanten Methoden sind
             • writeObject(), readObject()
             • writeInt(), readInt(), …

14.01.2021                  OOP - VO 13                 16
Grafische Oberflächen
                     (GUI)
    • Pakete awt (alt) und swing (neu)
      enthalten Klassen für GUIs.

    • swing verwendet einige Klassen aus awt,
      sodass meist beide importiert werden
      müssen.

    • Klassennamen in swing, die Klassen aus
      awt ersetzen, beginnen typischerweise
      mit einem 'J'
      (z.B. JFrame ersetzt Frame).

14.01.2021           OOP - VO 13           17
GUI: Wichtige Klassen und
              Methoden
    • JFrame ist Klasse für Fenster.
      Konstruktor erzeugt leeres, unsichtbares
      Fenster.

    • Auf Inhalt des Fensters wird mit
       Container getContentPane()
      zugegriffen.

    • Mit setVisible(boolean) kann Fenster
      (un)sichtbar gemacht werden.

14.01.2021          OOP - VO 13             18
GUI: Wichtige Klassen und
              Methoden
    • Klassen für Steuerelemente u.ä.:
      JButton, JLabel, JTextField,
      JmenuBar, ...

    • Steuerelemente können dem Inhalt
      (Objekt der Klasse Container) des
      Fensters mit add hinzugefügt werden.

    • Damit mehrere Elemente sichtbar,
      muss mit setLayout() die Anordnung
      festgelegt werden.

14.01.2021          OOP - VO 13              19
GUI: Benutzinteraktion

    • Für jedes Steuerelement gibt es ein oder
      mehrere “Listener”-Interfaces, die
      Methoden vorgeben, die ausgeführt
      werden, wenn der Benutzer bestimmte
      Aktionen durchführt (Mausklick, Eingabe,
      o.ä.).

    • Die Steuerelemente müssen mit den
      entsprechenden “Listeners” verknüpft
      werden.

14.01.2021           OOP - VO 13             20
GUI: Benutzinteraktion

       Beispiel:
       JButton knopf=new Jbutton(“press”);

    • Damit Button reagiert, implementiere
      Interface
         ActionListener
      und (über)schreibe Methode
         void actionPerformed(Event e)

    • Button mit Listener verknüpfen:
        knopf.addActionListener(this);
14.01.2021           OOP - VO 13             21
Innere Klassen

    • Um Fallunterscheidungen bei
      Benutzerinteraktion zu vermeiden
      (welches Steuerelement hat Ereignis
      ausgelöst?), können innere Klassen
      verwendet werden.

    • Diese Klassen sind nur innerhalb der
      umschließenden Klasse bekannt, können
      aber auf Attribute der umschließenden
      Klasse zugreifen.

14.01.2021          OOP - VO 13             22
Innere Klassen
       Beispiel:
       class EinFenster{
             JButton knopf = new JButton(...);
             knopf.addActionListener(new Innen());

             // innere Klasse
             class Innen implements ActionListener
             {
                public void actionPerformed(...)
                {...}
             }
       }

14.01.2021               OOP - VO 13             23
Anonyme innere Klassen

    • Da von inneren Klassen meist nur ein
      Objekt erzeugt wird, gibt es die
      Möglichkeit, innere Klassen anonym zu
      machen.

    • In diesem Fall wird an Ort und Stelle der
      (anonyme) Konstruktor des zu
      erzeugenden Objekts aufgerufen und die
      entsprechende Methode implementiert.

14.01.2021           OOP - VO 13              24
Anonyme innere Klassen

       Beispiel:
       class EinFenster{
             JButton knopf = new JButton(...);
             knopf.addActionListener(
                   // Konstruktoraufruf der anonymen
                   // inneren Klasse
                   new ActionListener(){
                     public void actionPerformed(...)
                     {...}
             });
       }
14.01.2021                  OOP - VO 13            25
Interface Comparator

    • Alternativ zum Interface Comparable kann über
      das Interface Comparator eine Reihung von
      Objekten einer Klasse festgelegt werden.

    • Diese Reihung kann von Sortiermethoden der
      Klassen Arrays und Collections oder durch
      Klassen wie TreeSete oder TreeMap verwendet
      werden.

    • Anders als Comparable wird das Interface
      Comparator in einer beliebigen Klasse
      implementiert. Dadurch lassen sich auch
      Objekte bereits gegebener Klassen sortieren
      bzw. verschiedene Sortierkriterien angeben.
14.01.2021             OOP - VO 13                  26
Interface Comparator

     In der Klasse, die das Interface Comparator
     implementiert, muss die Methode

        int compare(T t1, T t2)

     so überschrieben werden, dass

  • ein Wert t2.

  • Der Wert 0 zurückgegeben wird, wenn
    t1.equals(t2)==true.

14.01.2021             OOP - VO 13                27
Interface Comparator

    • Um einen Comparator zu verwenden,
      muss der Konstruktor einer das Interface
      implementierenden Methode aufgerufen
      werden.

    • Das entsprechende Objekt wird der
      Sortiermethode o.ä. übergeben, z.B.

        class CompB implements Comparator
        {…}
         ArrayList liste = …;
         Collections.sort(liste, new CompB());

14.01.2021             OOP - VO 13               28
Interface Comparator

    • Alternativ können auch (anonyme) innere
      Klassen verwendet werden, z.B.

       ArrayList liste = …;
       Collections.sort(liste,
             new Comparator(){
             public int compare(Blub b1, Blub b2)
             {
                    ...
             }
       });

14.01.2021                OOP - VO 13           29
public static void main(String[] args)

  • Definiert die „Hauptmethode“ einer Klasse.
  • Diese Methode wird ausgeführt, wenn das
    Java-Laufzeitsystem mit dieser Klasse als Input
    gestartet wird.
  • Z.B. java TestKlasse
  • Dazu muss TestKlasse.class im
    entsprechenden Verzeichnis vorhanden sein,
    und in Testklasse eine main-Methode definiert
    sein.
  • Alle weiteren benötigten Klassen müssen
    ebenfalls als class-Files vorhanden sein.
  • Im String-Array args können Argumente zur
    Verfügung gestellt werden.
14.01.2021             OOP - VO 13                    30
Ausführbares jar-File

  • In BlueJ kann ausführbares jar-File
    erstellt werden.
  • Dazu muss Klasse angegeben
    werden, die main-Methode enthält.
  • jar-File kann durch Doppelklick
    ausgeführt werden, wenn JDK und
    JRE auf Rechner installiert und mit
    jar-Files verknüpft.

14.01.2021           OOP - VO 13          31
Sie können auch lesen