5. Abstrakte Klassen



Ähnliche Dokumente
5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:

1. Abstrakte Klassen

Objektorientierte Programmierung. Kapitel 12: Interfaces

Vorkurs C++ Programmierung

Programmieren in Java

Java: Vererbung. Teil 3: super()

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Einführung in die Java- Programmierung

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Folge 18 - Vererbung

Innere Klassen in Java

Programmiersprache 2 (C++) Prof. Dr. Stefan Enderle NTA Isny

Abschnitt 9: Schnittstellen: Interfaces

3 Objektorientierte Konzepte in Java

3. Konzepte der objektorientierten Programmierung

Objektorientierte Programmierung OOP

Typumwandlungen bei Referenztypen

Objektorientierte Programmierung

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

Kapitel 6. Vererbung

Kapitel 6. Vererbung

Java Einführung Abstrakte Klassen und Interfaces

Kapitel 6. Vererbung

Zählen von Objekten einer bestimmten Klasse

SEP 114. Design by Contract

Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter

Programmieren Tutorium

GetName(), GetName(), GetGeschlecht() und AelterWerden().

Einführung in die Programmierung

Programmierkurs Java

Vererbung & Schnittstellen in C#

Software Engineering Klassendiagramme Einführung

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Beispiel: Methode mit einem Fehler. Diese Methode wird problematisch, wenn von außen eine Dauer von 0 Sekunden angegeben wird, etwa im Aufruf

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

Die Post hat eine Umfrage gemacht

Objektorientierte Programmierung

Java Kurs für Anfänger Einheit 5 Methoden

Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007

Institut für Programmierung und Reaktive Systeme 25. August Programmier-Labor Übungsblatt. int binarysearch(int[] a, int x),

Grundlagen der Theoretischen Informatik, SoSe 2008

Fachdidaktik der Informatik Jörg Depner, Kathrin Gaißer

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

Client-Server-Beziehungen

Studentische Lösung zum Übungsblatt Nr. 7

Algorithmen und Datenstrukturen

13. Tutorium zu Programmieren

Prüfungszeuch im Fach Objektorientierte Programmierung WS 2000

Primzahlen und RSA-Verschlüsselung

Einführung in die Informatik Tools

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Lernziele: Ausgleichstechniken für binäre Bäume verstehen und einsetzen können.

Prinzipien Objektorientierter Programmierung

Grundlagen von Python

Die Beschreibung bezieht sich auf die Version Dreamweaver 4.0. In der Version MX ist die Sitedefinition leicht geändert worden.

Professionelle Seminare im Bereich MS-Office

Abituraufgabe zur Stochastik, Hessen 2009, Grundkurs (TR)

7 Rechnen mit Polynomen

Wurzeln als Potenzen mit gebrochenen Exponenten. Vorkurs, Mathematik

Prof. Dr. Uwe Schmidt. 21. August Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

Assoziation und Aggregation

Formeln. Signatur. aussagenlogische Formeln: Aussagenlogische Signatur

Lehrer: Einschreibemethoden

Was meinen die Leute eigentlich mit: Grexit?

Zeichen bei Zahlen entschlüsseln

VIII: Vererbung. Unterklassen einer Klasse. Vererbung von Methoden und Instanzvariablen. Überschreiben von Methoden

Aufgabe 12 Nach dem Eintippen der Kantenlänge soll die folgende Tabelle den Rauminhalt und die Oberfläche eines Würfels automatisch berechnen.

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

Große Übung Praktische Informatik 1

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Leichte-Sprache-Bilder

4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes.

Sichtbarkeit & statische Methoden. Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben

Software Entwicklung II (SS12)

Lineare Gleichungssysteme

Xcode/Cocoa/Objective-C Crashkurs Programmieren unter Mac OS X

Programmierkurs Java

Statuten in leichter Sprache

Elternzeit Was ist das?

Javakurs 2013 Objektorientierung

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Musterlösungen zur Linearen Algebra II Blatt 5

Objektbasierte Entwicklung

Repetitionsaufgaben Wurzelgleichungen

Vererbung. Vererbung von Methoden und Instanzvariablen. Vererbung als Realisierung einer is-a Beziehung.

Prozentrechnung. Wir können nun eine Formel für die Berechnung des Prozentwertes aufstellen:

Software Engineering Klassendiagramme Assoziationen

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Computeranwendung und Programmierung (CuP)

Fakultät Angewandte Informatik Lehrprofessur für Informatik

Sichere Anleitung Zertifikate / Schlüssel für Kunden der Sparkasse Germersheim-Kandel. Sichere . der

40-Tage-Wunder- Kurs. Umarme, was Du nicht ändern kannst.

Wie optimiert man die Werbungserkennung von Ad- Detective?

Transkript:

5. Abstrakte Klassen Beispiel 5. Abstrakte Klassen Angenommen, wir wollen die folgende Klassenhierarchie implementieren: Vogel Amsel Drossel Fink Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 138

5. Abstrakte Klassen Beispiel Beispiel (2) Vorschlag zur Implementierung: public class Vogel { public void singe() { System.out.println( "Vogel singt:..."); public class Amsel extends Vogel { public void singe() { System.out.println( "Amsel singt: uiuiii..."); public class Drossel extends Vogel { public void singe() { System.out.println( "Drossel singt: zwawaaa..."); public class Fink extends Vogel { public void singe() { System.out.println( "Fink singt: zrzrrr..."); Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 139

5. Abstrakte Klassen Beispiel Beispiel (3) Probleme des Implementierungsvorschlags: (1) In der Realität gibt es keinen Vogel, der nur ein Vogel ist. Konsequenz: Nur für die Unterklassen sollte eine Instanziierung möglich sein. (2) Ein Programmierer erweitert die Klassenhierarchie um die Klasse Star und vergisst dabei, die Methode singe() zu überschreiben. Dann haben Stare keine Stimme. (3) Wenn (1) erfüllt ist und der Fehler von (2) nicht vorliegt, dann wird die Methode singe() in der Klasse Vogel nie aufgerufen. Wir können Sie aber auch nicht einfach weglassen. Warum nicht? Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 140

5. Abstrakte Klassen Abstrakte Klasse Abstrakte Klasse Problem (1) können wir lösen, indem wir eine Klasse als abstrakt kennzeichnen. Zugehöriges Schlüsselwort: abstract public abstract class Klassenname... {... Von abstrakten Klassen können keine Instanzen erzeugt werden. Konsequenz: Um Objekte erzeugen zu können, muss mindestens eine Unterklasse zur abstrakten Klasse definiert werden, die nicht mehr abstrakt ist. Für unser Beispiel: Wenn wir die Klasse Vogel als abstrakt kennzeichnen, können wir nur noch Amseln, Drosseln oder Finken instanziieren. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 141

5. Abstrakte Klassen Abstrakte Klasse Abstrakte Klasse (2) Bemerkungen: Eine abstrakte Klasse kann Unterklasse einer nicht abstrakten Klasse sein. Eine abstrakte Klasse kann weitere abstrakte Klassen als Unterklassen haben. Auch für abstrakte Klassen sollten Konstruktoren definiert werden. Grund: Die Initialisierung von Objekten erfolgt entlang der Klassenhierarchie (siehe Beispiel zu geometrischen Objekten). Eine Klasse kann nicht gleichzeitig final und abstrakt sein. Konsequenz: Der Compiler verbietet die Kombination von abstract und final im Klassenkopf. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 142

5. Abstrakte Klassen Abstrakte Klasse Abstrakte Klasse in UML Im UML-Klassendiagramm werden abstrakte Klassen durch einen kursiven Klassennamen gekennzeichnet. Vogel Amsel Drossel Fink Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 143

5. Abstrakte Klassen Abstrakte Methoden Abstrakte Methoden Zur Lösung der Probleme (2) und (3) erklären wir die Methode singe() in der Klasse Vogel zu einer abstrakten Methode. Die Definition einer abstrakten Methode besteht aus einer Methodensignatur ohne einen Rumpf. Statt eines Blocks als Rumpf folgt dem Methodenkopf ein Semikolon. Solch eine Methode wird mit dem Schlüsselwort abstract markiert. Damit haben wir Problem (3) gelöst: Wir brauchen keine Dummy-Implementierung mehr für die Methode singe(). Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 144

5. Abstrakte Klassen Abstrakte Methoden Abstrakte Methoden (2) Syntax: Modifikator abstract Datentyp Methodenname(Parameterliste); Beispiel: Abstrakte Klasse mit einer abstrakten Methode: public abstract class Vogel { public abstract void singe(); Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 145

5. Abstrakte Klassen Abstrakte Methoden Abstrakte Methoden (3) Die Definition einer abstrakten Methode m in einer Klasse K bedeutet: Für die Klasse K und somit auch für alle Unterklassen U von K ist die Methode m bekannt. K möchte/kann die Methode nicht implementieren. Dies muss in einer Unterklassen U von K erfolgen. Sei U eine (nicht abstrakte) Unterklasse von K. Dann ist folgendes möglich. K k = new U(); k.m(); Die Methodenauswahl basiert auf dem dynamischen Typ von k. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 146

5. Abstrakte Klassen Abstrakte Methoden Abstrakte Methoden in UML Im UML-Klassendiagramm werden abstrakte Methoden durch eine kursive Schreibweise gekennzeichnet. Vogel Amsel Drossel Fink Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 147

5. Abstrakte Klassen Abstrakte Methoden Zusammenspiel: Abstrakte Klassen und Methoden Abstrakte Klassen dürfen abstrakte Methoden anbieten. Jede Klasse, die mindestens eine (evtl. geerbte) abstrakte Methode hat, ist selbst abstrakt und muss entsprechend deklariert werden. Damit eine Unterklasse einer abstrakten Klasse eine konkrete Klasse werden kann, muss sie Implementierungen für alle geerbten abstrakten Methoden anbieten. Andernfalls ist die Unterklasse selbst abstrakt und muss als solche gekennzeichnet werden. Damit haben wir Problem (2) gelöst: Wenn der Programmierer der Klasse Star vergessen sollte, die Methode singe() zu überschreiben, meldet der Compiler einen Fehler. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 148

5. Abstrakte Klassen Abstrakte Methoden Wann setzt man abstrakte Klassen ein? Zur Repräsentation einer Generalisierung verschiedener Klassen, die Eigenschaften der gleichen Art haben, die in den Unterklassen aber unterschiedlich berechnet werden müssen. Für die Berechnung der Eigenschaften sehen wir in der Generalisierung jeweils eine abstrakte Methode vor, um deutlich zu machen, dass Objekte dieser Klasse (und der Unterklasse) diese Eigenschaften haben. Die jeweilige Art und Weise der Berechnung wird aber erst in den Unterklassen festgelegt. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 149

5. Abstrakte Klassen Weitere Beispiele Beispiel: Roboter mit spezialisiertem Verhalten Übungsaufgabe der kommenden Woche. Roboter mit Positionsbestimmung in ganzzahligem Koordinatensystem Steuerungsmöglichkeiten für solche Roboter: Einen Schritt in aktuelle Richtung, Änderung der Richtung durch Drehung um 90 Grad nach links bzw. rechts. In Unterklassen soll für die Roboterklassen ein spezifisches Verhalten festgelegt werden: Sie erhalten einen Auftrag. Zugehörige Methode: bewegedich() Torkelnder Roboter: Ziellos, zufällige Schritte und Drehungen Wächter: Geht ein vorgegebenes Rechteck ab. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 150

5. Abstrakte Klassen Weitere Beispiele Beispiel: Roboter mit spezialisiertem Verhalten (2) Roboter int gibx() int giby() void macheschritt() void drehelinks() void dreherechts() void bewegedich() TorkelnderRoboter WächterRoboter void bewegedich() void bewegedich() Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 151

5. Abstrakte Klassen Weitere Beispiele Beispiel: Geometrische Objekte und deren Eigenschaft Fläche GeoObjekt double x double y double gibx() double giby() void verschiebe(double,double) double berechneflaeche() Rechteck double breite double hoehe double berechneflaeche() Kreis double radius double berechneflaeche() Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 152

5. Abstrakte Klassen Weitere Beispiele Beispiel: Geometrische Objekte und deren Eigenschaft Fläche (2) public abstract class GeoObjekt { private double x; private double y; public GeoObjekt(double x, double y) { this.x = x; this.y = y;... public abstract double berechneflaeche(); Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 153

5. Abstrakte Klassen Weitere Beispiele Beispiel: Geometrische Objekte und deren Eigenschaft Fläche (2) public class Rechteck extends GeoObjekt { private double hoehe; private double breite; public Rechteck(double x, double y, double hoehe, double breite) { super(x,y); this.hoehe = hoehe; this.breite = breite; public double berechneflaeche() { return this.hoehe*this.breite; Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 154

5. Abstrakte Klassen Weitere Beispiele Beispiel: Geometrische Objekte und deren Eigenschaft Fläche (3) public class Kreis extends GeoObjekt { private double radius; public Kreis(double x, double y, double radius) { super(x,y); this.radius = radius; public double berechneflaeche() { return Math.PI * this.radius * this.radius; Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 155