Objektorientierung:Javakurs
Theorie
Objektorientierung zeichnet durch folgende Eigenschaften aus:
- Kapselung
- Vererbung
- Polymorphie
- Überladung
In der Programmierung wird dies alles in Klassen realisiert.
Eine Java-Klasse ist ein komplexer Datentyp, der Variablen und Methoden enthält.
Variablen einer Klasse können Objekte mit einfachem Datentyp (int, long, bool, char, float und double) oder mit komplexem Datentyp (Klasse) sein.
Methoden sind benannte Ansammlungen von Anweisungen. Näheres im nächsten Kapitel.
Variablen und Methoden haben Namen.
Grundregel beim Modellieren von Klassen: eine Oberklasse ist immer eine Spezialisierung einer Basisklasse.
Ein Objekt einer Oberklasse kann auch als Basisklasse angesprochen werden, also z.B. ein PKW ist auch ein Fahrzeug.
Kapselung
Kapselung bedeutet, dass Informationen nur dort vorhanden sind, wo sie wirklich gebraucht werden.
Vorteil: Änderungen bleiben lokal begrenzt
Indem zusammengehörige Eigenschaften und Aktionen zu einer Klasse gebündelt werden, ist die erste Stufe der Kapselung erreicht. Die zweiter Stufe sind Zugriffsrechte, die die Sichtbarkeit von Variablen/Methoden außerhalb der Klasse regeln:
Es gibt folgende Zugriffsrechte:
- public: die Variable/Methode ist außerhalb der Klasse bekannt und darf "von jedem" benutzt werden.
- protected: Die Variable/Methode ist nur innerhalb der Klasse und in abgeleiteten Klassen bekannt.
- private: Die Variable/Methode ist nur innerhalb der Klasse bekannt.
Ferner bieten Interfaces (siehe später) eine Möglickeit der Kapselung an.
Vererbung
Eine Klasse kann von einer anderen Klasse (Basisklasse genannt) abgeleitet werden. Das bedeutet, dass alle Variablen/Methoden dieser Basisklasse auch in der Oberklasse vorhanden sind. Allerdings sind private Variablen/Methoden nicht nutzbar.
Der Vorteil: Wiederverwendung von Code. Reduzierung von Komplexität.
Polymorphie
Das bedeutet, dass es mehrere Methoden mit gleichem Namen und verschiedenen Parameterdefinitionen geben kann. Der Compiler findet die passende Methode beim Aufruf selber heraus.
Beispiel: Berechnung eines Teilstrings eines Strings.
- String substr(String source, int from);
- String substr(String source, int from, int to);
Wird die Methode mit 2 Parametern aufgerufen, wird der String ab Position from zurückgegeben, bei 3 Parametern der String von from bis to.
Vorteil: Bessere Verständlichkeit.
Überladung
Eine Methode einer Basisklasse kann in einer Oberklasse überschrieben werden. Diese Methode wird auch dann benutzt, wenn ein Objekt der Oberklasse als Basisklasse angesprochen wird.
Beispiel:
- Klasse Luftfahrzeug,
- Methode Luftfahrzeug.fortbewegung() liefert "fliegt"
- Klasse Zeppelin abgeleitet von Luftfahrzeug
- Methode Zeppelin.fortbewegung() liefert "fährt"
- Klasse Helikopter abgeleitet von Luftfahrzeug
- die Klasse hat keine eigene Methode fortbewegung(), sie erbt also die Methode aus Luftfahrzeug und diese liefert "fliegt"
Beispiel einer Klassenhierarchie
class Article { private int id; // Preis in Cent protected long price; String priceAsString(){ return String.format("%d.%02d EUR", price / 100, price % 100); } } class PieceGoods extends Article { int number } class Fluid extends Article { public int amount; } class Beer extends Fluid { } class Cookie extends PieceGoods { } class Meat : extends PieceGoods { public int weight; }
Diskussion
Die Basisklasse Article enthält die gemeinsame Eigenschaft aller Waren, den Preis.
Davon abgeleitet sind die Klassen PieceGoods und Fluid, die eigene Eigenschaften mitbringen.
Die eigentlichen Warenklassen sind Beer, Cookie und Meat.
Aufgrund der Vererbung hat ein die Klasse Beer auch die Eigenschaften/Methoden der Basisklassen. Also hat Beer auch die Eigenschaft Menge (amount aus Fluid) und einen Preis (price aus Article).
Bei der DM/Euro-Umstellung musste nur eine Stelle geändert werden: die Methode priceAsString().
Und das, obwohl der Preis bei Beer, Keksen und Fleisch existiert.
Aufgabe
Modelliere Klassen für Straßenverkehrsteilnehmer im Sinne der Straßenverkehrsordnung.
Entitäten sind: Verkehrsteilnehmer, Fahrzeug, Fahrrad, Kraftrad, Kraftfahrzeug, Fußgänger, PKW, LKW.
Methoden: benutztStrasse(), benutztAutobahn(), zahltSteuer(), hoechstGeschwindigkeit()
Eigenschaften: hubraum, gewicht
Aufgabe 2
- Ordne die Entitäten in Klassenhierarchien. Ergänze fehlende Hierarchien:
- Staubsauger, Zange, Hammer, Handmixer, Steinkeil, Keule, Presslufthammer, Küchenwerkzeuge
- Finde Eigenschaften für die Entitäten