Sie sind auf Seite 1von 45

Java Schulung - OOP

24. – 28. September 2007


Objektorientierte P. mit Java - Überblick
 Objektorientierung
 Ein bisschen UML
 Verwendung von Objekten (Telefonbuch)
 Definieren von Objekten (Computerladen)
 Polymorphie
 Zugriffsrechte
 Abstrakte Klassen und Enums
 Streifzug durch die Java-Klassenbibliothek
 Exceptions
 Dokumentation
 Innere und Anonyme Klassen
Objektorientierung - Motivation I
 Es ist nicht genug, dass Software funktioniert,
man muss sie auch verstehen!
 Aber: Wir verstehen nur einfache Sachen
(gerade in der praktischen Arbeit)
 Sprechende Namen für Variablen und Methoden
und Klassen, Einfache Schnittstellen,
Übersichtliche Strukturierung
 Strukturierungsmöglichkeiten über Funktionen nicht
ausreichend.
 Bekanntes Phänomen des „Spaghetti“-Code
Objektorientierung - Motivation
 Aber: Software insgesamt bleibt komplex, also
wollen wir sie wenigstens in verständliche Teile
zerlegen.
 Als solche Teile identifizieren wir Klassen von
Objekten, wie in der realen Welt!
(Bankkonto, Benutzer, Fenster, Regel,
Warenkorb, Datenbankschnittstelle..)
 Zwei Schritte:

Modellierung Implementierung
(im Kopf, auf Papier, UML)
(Java)
Modellierung (Klassen von Objekten)

Klassen beschreiben, welche Attribute Objekte haben sollen!


Vererbung („Ist-ein“ Beziehung), Assoziazion („hat ein“)

Assoziazionen beschreiben, wie Objekte in Beziehung stehen!


Methoden (Rabattaktion und Inventur)
Interfaces (Schnittstellen ohne Implementierung)
Zusammenfassung UML

 Nur an der Oberfläche gekratzt, eigentlich ist UML


ein eigenes umfassendes Thema
 Aber soweit: UML hilft uns die Objektklassen für die
Programmierung zu beschreiben!
 Standardisiert und bekannt!
 Objekte haben Eigenschaften und stellen Methoden
bereit, die aufgerufen werden können.
 Objekte selbst sind zuständig für Berechnungen
(Methodenaufrufe)
 Vererbung und Assoziationen bilden Beziehungen
zwischen Objektklassen ab
Nochmal zu Klassen und Objekten

 Klassen
 Haben Attribute mit festgelegten Datentypen (etwa wie ein
Databankschema)
 Sind selbst Datentypen (für Variablen oder Methoden-
Parameter)
 Bieten Methoden an, die Berechnungen auf Instanzen
durchführen.
 Objekte
 Sind Instanzen einer Klasse und haben individuelle Werte
für jedes Attribut (Analogie: Datensatz)
 Können als Werte im Programm verwendet werden.
JAVA: Verwendung von Objekten

 Erzeugung von Objekten


 Syntax new <klassenName>(<argumente>);
 Zuweisung zu einer Variable
 Methodenaufruf
 In diesem Objekt wird eine Methoden aufgerufen.
 Syntax <objectvariable>.<methodenname>(<argumente>);
Erstellen einer Klasse (Beispiel Store)

Attributsdeklaration (ähnlich wie Variablendecl)


Nicht „static“!

Initialisierung von Attributen.


Konstruktor mit Parametern
Deklaration eines Interfaces

 Unterschiede zur Klassendefinition


 Schlüsselwort „interface“ statt „class“
 Keine Attribute erlaubt (Ausnahme Konstanten: „static final“)
 Nur Signaturen ohne Implementierungsblock!
LinkedList – Klasse für verkettete Liste
Templates <> zur genaueren Ausprägung
Was fehlt beim Store ? der Klasse

Iteratoren – Der „Java-Way“ zum


Laufen über Listen.
Wir implementieren einen Computer

Implementierung eines
Interfaces!

this = Referenz auf


das „Selbst“-Objekt!

Livedemo mit extensiver Autokorrekur (Ctrl-Space .. Ctrl-1)


Vererbung beim Notebook
Schlüsselwort „extends“ - Notebook erweitert,
bzw. „erbt von“ Computer

Aufrufe der Elternklasse


mit „super“

Methode der Vaterklasse wird


Überschrieben!

Namenskonventionen:
setter und getter
Klassenhierarchie

F4
Besonderheiten: Vererbung in Java

 Nur Hinzufügen (Attribute, Methoden) möglich, kein


entfernen.
 Keine Mehrfachvererbung (erben von zwei Klassen) in
Java möglich
 Klassen-Attribute (static) sind zugreifbar haben aber
keinen individuellen Wert.
 Konstruktoren werden nicht vererbt, können aber mit
super aufgerufen werden
 Jede Klasse wird implizit von einer Klasse Object
abgeleitet (und erbt equals und hashCode)
Polymorphie was ist das?

 Beispiel: Herr Müller ist nicht am Zahn der Zeit und kennt keine
Autos mit Navigationssystem. Er bekommt in einer Autovermietung
einen neuen Audi mit Navigation. Herr Müller kennt dieses spezielle
Modell nicht und weiss nicht mit den neuen Funktionen umzugehen.
Da er jedoch das allgemeine Konzept Auto kennt, weiss er dieses
dennoch zu gebrauchen.
 Übertragung auf die Programmierung:
 Objekte können auch Variablen von Elternklassen/
Interfaces des Objektes zugewiesen werden
Auto auto = new Audi(); auto.gasgeben();
Audi a4 = new Auto();
 Aquivalentes gilt für Methodenparameter:
waschstrasse.waschen(new Audi());
audihändler.reparieren(new Auto());

Verwandtes Thema: Dynamische Bindung / Statische Bindung


Typüberprüfung und cast
Hier können es noch
alle Autotypen sein

Test auf Typ

Typwandlung
(cast)

 Immer erlaubt: Zuweisung eines Objektes einer spezielleren Klasse


 Nur mit cast: Zuweisung eines Objektes einer allgemeineren Klasse
 Syntaxfehler wenn kein Pfad in der Vererbungshirarchie,
Laufzeitfehler bei ungültigem Cast
Zugriffsrechte - Sichtbarkeit
 Schlüsselwörter „public“ und „private“ haben wir
bisher einfach so hingenommen.
 Zugriffsrechte bei Klassen
 public : Klassen können von überall her benutzt werden
 <Ohne>: Klassen können nur im selben Paket
verwendet werden.
 Zugriffsrechte bei Methoden
 public: Methoden können von allen Objekten
aufgerufen werden
 private: Methoden sind nur innerhalb derselben
Klasse bekannt
 protected:Methoden sind bekannt innerhalb des Paketes
und in abgeleiteten Klassen
 <Ohne>: Methoden sind nur innerhalb des Paketes
bekannt

 Richtlinien:
 Hilfsfunktionen „privat“, Interfacefunktionen „öffentlich“
 „Verstecke“ alles, solange es geht!
Beispiel Nur innerhalb von „Notebook“ sichtbar.

Methode offen für


externe Klasen!
Abstrakte Klassen
 Abstrakte Klasse = Mischung aus Klasse und
Interface.
 Schlüsselwort „abstract“ vor der Klasse
 dürfen Methoden als abstrakt deklarierten (ohne Body)
 können nicht mit new instantiiert werden
 müssen vor Benutzung erweitert werden
 Namenskonvention: häufig „Abstract“ im Namen der Klasse
 Vergleich mit Interfaces
 Bei Interfaces wird nur das Protokoll (die Signaturen)
übernommen, bei Abstrakten K. wird das Grundverhalten
vererbt
 Bei Interfaces ist Mehrfach-Polymorphie möglich
 Interfaces müssen immer public sein
Beispiel einer abstrakten Klasse
Unspezifisches Produkt soll nicht instantiiert
werden können!

Allgemeines Verhalten, muss nicht in jeder


ableitenden Klasse erneut implementiert werden!

Spezielles Verhalten, soll in ableitenden


Klassen explizit produktspezifisch
angegeben werden!
Die implementierende Klasse
Enums (seit Java 1.5)

Aufzählungstyp
Java - Klassenbibliothek

 Beim Programmieren wollen wir das Rad nicht


neu erfinden.
 Irgendwo gibt es schon eine „beste Lösung“.

 Wichtige Sachen werden in der Java-


Klassenbibliothek bereitgestellt
 Weitere Klassenbibliotheken (Open-Source
oder kommerziell) können eingebunden
werden.
Java Klasssenbibliothek – Wo findet man was ?

Paket Funktion
 java.io: Ein-/Ausgabe (Streams, Dateien, ...)
 java.lang: Basis-Klassen (System, Object, Runtime, String, ...)
 java.lang.reflect: Java Reflection API (Introspektion, ...)
 java.util Allerlei Hilfsklassen (Random, Listen, Maps…)
 java.applet: Alles für Java-Applets
 java.awt: Graphische Oberflächen mit AWT
 javax.swing Graphische Oberflächen mit Swing
 ….
java.util.List
 allgemeines Interface für den standardisierten Zugriff
auf verschiedene Implementierungen
 LinkedList (Leichtes Hinzufügen, Löschen)

 ArrayList (Effizienter Random-Zugriff)

 Methoden
 boolean add(Object obj);
 Object remove(int pos);
 void contains(Object obj);
 Object get(int pos);
 …
java.util.Iterator
 Jeder Listentyp liefert bei Bedarf einen Iterator
 Einschränkung des Zugriffs
 Originalliste nicht veränderbar (Objekte in der Liste
schon!)

 Methoden
 boolean hasNext();
 Object next();
 …
java.util.String

 Einfache Operationen in String-Klasse eingebaut:


 char charAt(int pos)
Buchstaben an Position pos+1 (in Java immer 0..n-1)
 boolean equals(String s)
 Gleichheitstest
 boolean startsWith(String s)
 selbstredend..
 int length();
 Länge ges Strings
 String replace(char alt, char neu);
 ersetzt Zeichen im String
 String substring(int vonIndex, int bisIndex);
 Liefert einen Teilstring
 Klasse StringTokenizern, Pattern
 Praktisch zum Verarbeiten von Stringeingaben
 Splitten von Strings nach Trennern, Mustererkennung (regex)
java.util.Integer, Double, Float
 Die Primitiven Datentypen int, double, float gibt es auch
als Klassen (ContainerKlassen, Wrapper-Klassen)
 Erkennbar daran, dass sie mit Grossbuchstaben
beginnen.
 Konvertiertung ineinander klassisch:
 Erzeugung mit Konsturktor
 Methoden intValue(), doubleValue(),..
 Konvertierung neu seit Java :
 Autoboxing, Autounboxing
 Nützlich:
 Teil der Vererbungshierarchie, kann übergeben werden, wenn
Object erwartet wird
 Z.B. in Generics (new HashMap<String, Integer>();)
 Parsen von Stringwerten (Integer.parseInt(s);)
Exceptions - Kontrollierte Fehlerbehandlung
 Programmierer kann nicht alle Fehler verhindern
sollte aber geeignet auf Fehler reagieren, z.B.
 USB-Stick wird abgezogen während davon gelesen wird.
 Netzwerkverbindung bricht zusammen
 Bei der String zu Int-Konvertierung wird ein Buchstabe
angetroffen…
 Designfragen bei Fehler in Methoden:
 Wahl der Reaktion auf einen Fehler!
 Defaultwert zurückgeben,
 Nicht verwendeten Wert zurückgeben
 Programmterminierung (C++)
 Zuständigkeit der Fehlerbehebung
 Programmierer der aufgerufenen Methode
 Programmierer der aufgerufenden Methode

 Lösung: Exceptions
Beispiel 1 - Zahlenformatierung

 Auswirkungen beim Auftreten eines Fehlers


 Restliche Anweisungen des Try-blocks werden übersprungen
 Catch-Block wird ausgeführt
 Bearbeitung geht nach try-catch Weiter
 Effekte
 Kontrollierte Reaktion beim Aufrufer möglich
Beispiel 2 – Fehler weiterreichen

 Throws Deklaration
 Zeigt an, dass dieser Fehler auftreten kann
 Bewirkt, dass wir Fehler nicht mit try-catch fangen müssen
 Effekte
 Verantwortung für Fehlerbehandlung wird abgegeben!
Beispiel 3 – Eigene Exceptions erzeugen!

 Schritte
 Eigene Fehlerklasse von der Klasse Exception ableiten.
 Methodensignatur um throws erweitern
 Beim Fehler diesen mit throw werfen.
Dokumentieren in JAVA - Überblick

 Arten der Doku


 Dokumentation des Protokolls (sehr wichtig)
 Dokumentation der Implementierung (bei im Code, Bedarf)

 Folgender Inhalt
 Java-Bezeichnerkonventionen

 Dokumentation der Implementierung

 Dokumentation des Protokolls / javadoc


Java-Bezeichnerkonventionen (Wiederholung)
 Klassen:
 Erster Buchstabe jeweils groß
 HelloWorld.class
 ACXFramework
 Attribute / Variablen:
 Erster Buchstabe klein, Anfangsbuchstaben neuer Worte groß
 minimumRange
 maximumValue
 Methoden:
 Erster Buchstabe klein, Anfangsbuchstaben neuer Worte groß
 createWindow
 lockDatabase
 Konstanten:
 Komplette Großschreibung, Wörter mit „_“ getrennt.
 SSL_PORT
 PI
Javadoc – Kommentieren von Methoden/Klassen
 JavaDoc ist Teil der Java-Distribution und generiert statische Webseiten
zur Dokumentation aus den Kommentaren im Quelltext
 Kommentare im muss entsprechend standardisiert aufbereitet sein

 Eclipse generiert java-doc-konforme Kommentare „/** <return>“

 Schlüsselwörter:
@version <text>
@author <text>
@param <name> <beschreibung>
@return <beschreibung>
@throws <klassenname> <beschreibung>

 Generieren der HTML-Doku aus Eclipse:


 Projekt – Generate JavaDoc
JavaDoc in Anwendung
Generierte API-Dokumentation
Zusammenfassung -Dokumentation

 Verschiedene Dokumenationsformen
 Javadoc, Gute Benamung, Quellcode-Kommentare
 TODO‘s als temporäre Hilfestellung (Namen des Entwicklers, Jira-
Referenz, zum Release alle Todos entfernen)

 Dokumentation dient der..


 Wartbarkeit des eigenen Codes
 Benutzung des Codes durch

 Richtiges „Augenmaß“ gefragt


 Getter und Setter muss man nicht Dokumentieren
 Öffentliche Schnittstellen muss man unbedingt dokumentieren
 Dazwischen liegt ein großer Bereich in dem es nach dem eigenen
Ermessen geht
Was gibt es noch hübsches?
 Innere Klassen
 Komplette Klassen, die aber in eine andere Klasse
geschachtelt sind.
 Zugriff mit <äussereKlasse>.<innereKlasse>
 Strukturierungsmittel
 Nur bei „kleinen“ Hilfs-Klassen verwenden,
ansonsten ist eine neue Klasse vorzuziehen.
 Anonyme Klassen
 Können spontan innerhalb von Methoden definiert
werden.
 Kein Namen, kein Construktor
 Werden von einem Interface/Klasse abgeleitet.
Genug Stoff für heute…
Fragen??

Das könnte Ihnen auch gefallen