Abstrakte Basisklassen

Ähnliche Dokumente
Abstrakte Basisklassen

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke

Ableiten konkreter Klassen

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Ableiten konkreter Klassen

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Kapitel 13. Abstrakte Methoden und Interfaces. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.

Vererbung, Polymorphie

Programmieren II. Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz Institut für Angewandte Informatik

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0

Java für Bauingenieure

Klassenvariablen und statische Methoden

Programmieren II. Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz Institut für Angewandte Informatik

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete. II.4.2 Abstrakte Klassen und Interfaces - 1 -

Einstieg in die Informatik mit Java

Abstrakte Klassen, Interface. DVG Abstrakte Klassen, Interface

1 Abstrakte Klassen, finale Klassen und Interfaces

Programmierkurs Java

Programmieren in Java

Vererbung und Polymorphie

II.4.2 Abstrakte Klassen und Interfaces - 1 -

Klassenvariablen und statische Methoden

Prüfung Softwareentwicklung II (IB)

Java Einführung Abstrakte Klassen und Interfaces

Prüfung Softwareentwicklung I (IB)

Objektorientierte Programmierung Studiengang Medieninformatik

Wiederholung. Klassenhierarchie:

Programmierkurs C++ Abstrakte Klassen und Methoden

Java Schulung (Java 2 Java Development Kit 5 / 6)

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

Weitere Beispiele. Beispiel CD-Spieler: Exemplare eines abstrakten Konzepts. 7. Schnittstellen. Schnittstelle: Syntax

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Interfaces und Vererbung

Vererbung P rogram m ieren 2 F örster/r iedham m er K apitel 11: V ererbung 1

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Programmieren 2 Java Überblick

Programmieren in Java

6. Globalübung (zu Übungsblatt 8)

Informatik II Übung, Woche 17

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Schnittstellen, Vererbung & Polymorphismus für Fortgeschrittene

Programmieren in Java

Programmieren in Java

Anwendungsentwicklung mit Java. Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie

Einstieg in die Informatik mit Java

Informatik II Übung 06. Benjamin Hepp 5 April 2017

Polymorphie. Überschreiben. Definition Eigene Methoden überschreiben Beispiele. Dr. Beatrice Amrhein

II.4.5 Generische Datentypen - 1 -

Vererbung Was versteht man unter dem Begriff Vererbung?

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

Java Vererbung. Inhalt

Vererbung. Was versteht man unter dem Begriff Vererbung?

12 Abstrakte Klassen, finale Klassen und Interfaces

Programmiertechnik Vererbung & Polymorphismus für Fortgeschrittene

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 14.1.

Java Grundlagen 2 - OOP

Kapitel 5: Interfaces

Abgabe: keine Pflichtabgabe (vor 12 Uhr) Aufgabe 10.1 (P) Vererbung Gegeben seien folgende Java-Klassen:

Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen. J. W. v. Goethe.

Einführung in C# Teil 3. Matthias Nübling

3 Objektorientierte Konzepte in Java

Grundlagen Polymorphismus Eigenschaften virtueller Klassen Mehrfachvererbung bei ROOT. Mehrfache Vererbung. Daniel Beneckenstein. 21.

Abstrakte Klassen und Interfaces

14 Abstrakte Klassen, finale Klassen, Interfaces

Wiederholung zur Vorlesung Programmieren

Vorausgesetzte Grundkenntnisse. Inhalt. Klassenhierarchie und Vererbung. Vererbung. Klassenhierarchie und Vererbung. Einführung in C# Teil 3

13. Generics. Prof. Dr. Harald Gall. Institut für Informatik Universität Zürich.

13. Generics. Lernziele. Motivation. Prof. Dr. Harald Gall. Institut für Informatik Universität Zürich.

14 Abstrakte Klassen, finale Klassen, Interfaces. Auswertung von Ausdrücken. Beispiel. Abstrakte Methoden und Klassen

Vorlesung Programmieren

14 Abstrakte Klassen, finale Klassen, Interfaces

Klassen und ihre Beziehungen III: Mehrfache Vererbung, Rollen, Schnittstellen und Pakete

Präsentation Interfaces

Tafelübung 07 Algorithmen und Datenstrukturen

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Programmieren in Java -Eingangstest-

Exkurs: ANONYME KLASSEN. Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm

OPP II Klausuraufgaben - Schnittstellen

Javakurs für Anfänger

Einführung in die Programmierung

Enum-Klassen. Softwareentwicklung II (IB) Prof. Dr. Oliver Braun Letzte Änderung: :36. Enum-Klassen 1/12

Informatik II Übung 6

5.14 Generics. Xiaoyi Jiang Informatik I Grundlagen der Programmierung

Javakurs für Anfänger

Prof. Dr. Wolfgang Schramm. Vorlesung. Techniken der Programmentwicklung. Exkurs: Anonyme Klassen

Kapitel 8 Vererbung. Korbinian Molitorisz. IPD Tichy Lehrstuhl für Programmiersysteme

Objektorientierte Programmierung Studiengang Medieninformatik

Methoden. (Softwareentwicklung II (IB)) Prof. Dr. Oliver Braun. Letzte Änderung: :40. Methoden 1/44

Th. Letschert OOP 2 2. Geheimnisprinzip und Sichtbarkeitsbeziehungen

Objekt-orientierte Programmierung

Untertypen, Vererbung, Sichtbarkeit A01 OOP. Untertypen, Vererbung, Sichtbarkeit

Überblick. Peer Kröger (LMU München) Einführung in die Programmierung WS 14/ / 567

Transkript:

Abstrakte Basisklassen Softwareentwicklung II (IB) Prof. Dr. Oliver Braun Letzte Änderung: 24.06.2018 15:20 Abstrakte Basisklassen 1/18

Idee (1/2) Gegensätze: Interfaces ausschließlich Methodenköpfe, keine Methodenrümpfe, keine Konstruktoren, keinen Objektvariablen Konkrete Basisklassen vollständig mit Methodenrümpfen, Konstruktoren, Objektvariablen Mittelweg: Abstrakte Basisklassen (abstract base classes, ABCs) Definition mit Modifier abstract abstract class Name { Abstrakte Basisklassen 2/18

Idee (2/2) Methoden in einer ABC wahlweise konkret: mit Rumpf (wie in konkrete Klassen), oder abstrakt: nur Signatur (wie bei Interfaces), statt Rumpf nur ; Methoden ohne Rümpfe zusätzlich mit Modifier abstract abstract class Name { void foo() { // konkrete Methode abstract void bar(); // abstrakte Methode Abstrakte Basisklassen 3/18

Beispiel: ABC Zähler Beispiel: ABC Counter für Zähler abstract class Counter { private int count = 0; void reset() { count = 0; int read() { return count; abstract void step(); // als ABC markiert // nur Signatur Methode step abstrakt = ohne Implementierung Methoden read, reset konkret Abstrakte Basisklassen 4/18

Ableiten einer ABC (1/2) ABC kann nicht instanziiert werden (unvollständig, wie ein Interface) Einziger Zweck: Ableiten Abgeleitete Klassen müssen die fehlenden (abstrakten) Methoden der ABC implementieren Wenn nicht oder nicht vollzählig: abgeleitete Klasse selbst ABC, muss noch weiter abgeleitet werden Abstrakte Basisklassen 5/18

Ableiten einer ABC (2/2) Beispiel: OpenCounter abgeleitet von ABC Counter: class OpenCounter extends Counter { void step() { count ; OpenCounter ist konkret, keine ABC: Liefert Definition der einzigen abstrakten Methode der ABC Abstrakte Basisklassen 6/18

Vorteile einer ABC ABCs flexibler als Interfaces: Interface ABC Signaturen nur public ohne Einschränkung Methoden keine ohne Einschränkung Objektvariablen keine ohne Einschränkung Klassenvariablen nur public static final ohne Einschränkung Konstruktoren keine für abgeleitete Klassen (super), oft protected Ableitung von Interfaces ohne Einschränkung Abstrakte Basisklassen 7/18

Einfache und mehrfache Vererbung ABCs mit ausschließlich abstrakten Methoden = rein abstrakte Basisklasse (pure ABC) Konzeptionell ähnlich zu Interfaces Aber: kein Ersatz für Interfaces Eine Klasse kann von einer Basisklasse erben (konkret, abstrakt oder pure abstract) beliebig viele Interfaces implementieren Einfache Vererbung = maximal eine Basisklasse Keine mehrfache Vererbung = zwei oder mehr Basisklassen Abstrakte Basisklassen 8/18

Implementieren mehrerer Interfaces (1/3) Einfache Vererbung betrifft Basisklassen, nicht Interfaces Implementierung mehrerer Interfaces zulässig interface Numbered { int getnumber(); interface Counted { int getcount(); class Thing implements Numbered, Counted { public int getnumber() { // für Numbered public int getcount() { // für Counted Abstrakte Basisklassen 9/18

Implementieren mehrerer Interfaces (2/3) Klasse ist kompatibel zu allen implementierten Interfaces Thing t = new Thing; Numbered n = t; Counted c = t; // ok, kompatibel // ok, kompatibel Gleiche Methoden in mehreren Interfaces: einmal implementieren, alle Interfaces bedient Abstrakte Basisklassen 10/18

Implementieren mehrerer Interfaces (3/3) interface Numbered { int getnumber(); interface Serial { int getnumber(); // wie in Numbered class Thing implements Numbered, Serial { public int getnumber() { // für Numbered und Serial Abstrakte Basisklassen 11/18

Unverträgliche Interfaces Methoden mit widersprüchlichen Ergebnistypen in verschiedenen Interfaces interface IntNumbered { int getnumber(); interface DoubleNumbered { double getnumber(); Können nicht beide implementiert werden: class Thing implements IntNumbered, // verlangt int getnumber() DoubleNumbered // verlangt double getnumber() - Fehler! { Abstrakte Basisklassen 12/18

Ableiten und Implementieren von Interfaces (1/3) Einfache Vererbung kombinierbar mit Implementieren von Interfaces class OpenCounterDeluxe extends OpenCounter implements Numbered, Serial { public int getnumber() // für Numbered, Serial { Klasse ist kompatibel zu allen implementierten Interfaces und zur Basisklasse Abstrakte Basisklassen 13/18

Ableiten und Implementieren von Interfaces (2/3) OpenCounterDeluxe d = new OpenCounterDeluxe(); OpenCounter o = d; // ok, kompatibel Numbered n = d; // ok, kompatibel Serial s = d; // ok, kompatibel Abstrakte Basisklassen 14/18

Ableiten und Implementieren von Interfaces (3/3) Fehler falls Interface und Basisklasse inkompatibel interface Stepper { int step(); class OpenCounterDeluxe extends OpenCounter // vererbt void step() implements Stepper // verlangt int step() - Fehler! { Abstrakte Basisklassen 15/18

Blockieren der Vererbung (1/3) In seltenen Fällen sinnvoll: Aktives Verhindern der Ableitung Modifier final der ganzen Klasse erlaubt keine abgeleiteten Klassen mehr // kann nicht abgeleitet werden final class FinalLastWords { Populäres Beispiel: Klasse String class SuperString extends String { // Fehler! Abstrakte Basisklassen 16/18

Blockieren der Vererbung (2/3) Feinere Dosierung: Modifier final verhindert Redefinition einer einzelnen Methode class Rational { // das letzte Wort zur Addition final Rational add(rational r) { final-klasse beendet Folge von Ableitungen Abstrakte Basisklassen 17/18

Blockieren der Vererbung (3/3) class Base { // ok final class Child extends Base { // Fehler! Ableitung nicht mehr zulässig class GrandChild extends Child { Entsprechend: final-methode beendet Folge von Redefinitionen Abstrakte Basisklassen 18/18