Anwendungsentwicklung mit Java Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie
Vererbung (1) 2 Problem: Objekte mit gleichen Attributen/Methoden, aber nicht völlig identisch, z.b., LKW, PKW, Lieferwagen, Bus, Sportwagen, Familienwagen... Lösung 1: Für alle Arten separate Klassen schreiben Arbeits-/Pflegeaufwand! Lösung 2: Abstraktion und Vererbung Definition einer Beziehung zwischen einzelnen Kategorien Bus PKW LKW Sportwagen Familienwagen
Vererbung (2) 3 Der besondere Vorteil der OOP: Wiederverwendbarkeit aus vorhandenen Klassen können neue abgeleitet werden Eine Klasse bildet eine Subklasse, an die sie ihre Methoden und Attribute vererbt. Für die Subklasse können noch zusätzliche Methoden und Attribute definiert werden. Hierarchische Struktur: alle Klassen erben von der Klasse Object Object ist die Superklasse aller Klassen. Die Klasse Sportwagen ist eine Spezialisierung der Klasse PKW, Klasse - eine Generalisierung
Vererbung in Java 4 Vorgehen: Schnittmenge an Attributen und Methoden identifizieren und in der Superklasse auslagern Superklasse erweitern Subklassen implementieren mit zusätzlichen Methoden und Attributen, ggf. Methoden überschreiben Die Subklasse erbt die Attribute und Methoden der Superklasse LKW
Ein- vs. Mehrfache Vererbung 5 In Java nur einfache Vererbung jede Klasse hat nur eine unmittelbare Superklasse, aber beliebig viele Subklassen (+) Vermeidung der unklaren Fällen (Woher z. T. stammt diese Methode?) (+) Einfaches Design (+) Vermeidung der Konflikte ( ) Mehrfache Vererbung hat große Vorteile und oft unverzichtbar Postbote Radfahrer PostboteAufDemFahrrad Lösung: Schnittstellen
Abstraktion (1) 6 Wird nicht kompiliert, da die Methode in Car2 nicht vorhanden So ist es richtig! Allgemein gilt: Definiere die Methoden und Attribute in der Klasse, wo sie auch hingehören Problem: Oft ist die Methode in der Superklasse nicht näher zu definieren, da Verhalten zu allgemein (z. B. Methode fortbewegen für Lebewesen) Lösung: Abstrakte Methoden Methode ist definiert in der richtigen Klasse, hat aber kein Verhalten, keine Anweisungen
Abstraktion (2) 7 Abstrakte Methoden enthalten nur die Deklaration der Methode (Signatur), nicht aber ihre Implementierung Abstrakte Methoden werden mit dem Schlüsselwort abstract markiert und haben keine Anweisungen (auch keine geschweifte Klammern) z.b. public abstract void moveforward(); Wenn eine Klasse zumindest eine abstrakte Methode besitzt, muss selbst abstrakt definiert werden: public abstract class XXX {...} Abstrakte Klassen werden ausschließlich als Superklassen und Datentypen verwendet, erzeugen von Objekten ist nicht möglich Die Subklasse einer abstrakten Klasse muss die geerbten abstrakten Methoden überschreiben, oder selbst abstrakt definiert werden Methodenüberschreiben Erzwingen Abstrakte Klasse ohne abstrakte Methoden auch möglich Erzeugen von Objekten verhindern
Überschreiben der Methoden 8 Überschreiben (Override) in einer Subklasse Methoden mit der gleichen Signatur definieren, wie in der Superklasse Die Funktionalität der überschriebenen (in der Superklasse definierten) Methode wird versteckt Die überschreibende Methode kann die Methode der Superklasse aufrufen mittels super
Schnittstellen (1) 9 Mit Schnittstellen (interface) werden die Vorteile mehrfacher Vererbung realisiert, ohne deren Nachteile zu übernehmen Schnittstellen sind klassenähnliche Strukturen, aber dürfen nur abstrakte Methoden und statische Konstanten als Attribute haben Schnittstellen werden mit dem Schlüsselwort interface deklariert und in einer Subklasse mit implements eingeführt Eine Klasse darf beliebig viele Schnittstellen implementieren, muss allerdings entweder alle in den Schnittstellen deklarierten Methoden überschreiben, oder abstrakt deklariert werden Schnittstellen, genau so wie abstrakte Klassen, können als Datentypen benutzt werden
Schnittstellen (2) 10 PKW LKW Bus Sportwagen Pickup Problem: Pickup PKW, LKW oder beides? Lösung: Interface TruckInterface mit der Methode unload
Beziehungen 11 Es wird unterschieden zwischen ist ein (is a) und hat ein (has a) Beziehung ist ein bezieht sich auf die Superklasse hat ein bezieht sich auf die Attribute Ein PKW ist ein Ein Sportwagen ist ein PKW und ist ein Ein hat ein Motor
Polymorphismus 12 Polymorphismus (Vielgestaltigkeit) die Eigenschaft der Java-Objekte, in unterschiedlichen Stellen des Programms unterschiedliche Gestalt anzunehmen Tritt technisch auf, wenn Variable von einem Datentyp auf Objekte des anderen Datentyps referenzieren, z.b. Variable vom Typ Superklasse und Objekt vom Typ Subklasse Variable vom Typ Schnittstelle und Objekt vom Typ implementierende Klasse
Polymorphismus - Beispiel 13
Vererbung und Typecasts (1) 14 Object PKW LKW Object tostring() Object o = new Object();
Vererbung und Typecasts (2) 15 Object PKW LKW Object tostring() Object f = new (); fahren() wenden()
Vererbung und Typecasts (3) 16 Object PKW LKW Object tostring() Object f = new (); f1 = ()f; fahren() wenden()
Vererbung und Typecasts (4) 17 PKW Object LKW LKW Object tostring() Object t = new LKW(); fahren() wenden() lautbrüllen() entladen()
Vererbung und Typecasts (5) 18 PKW Object LKW LKW Object tostring() Object t = new LKW(); t1 = ()t; fahren() lautbrüllen() wenden() entladen()
Vererbung und Typecasts (6) 19 PKW Object LKW LKW Object tostring() Object t = new LKW(); LKW t2 = (LKW)t; fahren() lautbrüllen() wenden() entladen()
20 Polymorphie: Ausgangssituation Programmieren Sie ein Restaurant mit folgenden Eigenschaften: Methode empfangen mit einem Attribut zum Empfang der Gäste. Als Parameter erwartet die Methode das Objekt, das den Besucher repräsentiert Nach dem Empfang werden die Besucher bedient (Aufruf der Methode bestellen bei dem Besucher) Nach dem Bestellen werden die Besucher zur Zahlung aufgefordert (Aufruf der Methode zahlen) Das Restaurant sollte eine Schnittstelle besitzen, damit andere Programmteile darauf zugreifen und bestimmte Methoden (hier empfangen) aufrufen können
Polymorphie: Problemidentifikation Mögliche Lösung? 21 Probleme: Würde nur für die Klasse Mitarbeiter und ihre Subklassen funktionieren - Andere möchten doch auch essen! Was ist mit anderen Modulen, wie Schwimmbad, Fitnessstudio, und andere?
Polymorphie: Lösung L 22 Interface RestaurantBesucher muss implementiert werden, damit die Objekte ins Restaurant gehen können
Zugriffsrechte 23 Zugriffsrechte (Accessmodifier) schützen Variablen und Methoden vor nichterlaubtem Zugriff In Java vier unterschiedliche Zugriffsrechte Private Default Protected Public Zugriff nur in der gleichen Klasse Zugriff in den Klassen des gleichen Namensraums (Package) Zugriff in der Subklassen Zugriff öffentlich Schlüsselwort: private, protected, public Wenn kein Modifier vorhanden default
Datenkapselung 24 Die Klassen- und Objektattribute und Methoden müssen immer kleinstmögliche Zugriffsrechte haben Für die Attribute, die nach Außen sichtbar sein sollten, die getter und setter Methoden definieren