Präsentation Interfaces

Ähnliche Dokumente
Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

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

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

Abschnitt 9: Schnittstellen: Interfaces

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

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

Beispiel: Zwischen der Oberklasse und der abgeleiteten Klasse besteht eine ist ein Beziehung. Eine abgeleitete Klasse stellt eine Spezialisierung der

Einstieg in die Informatik mit Java

1 Abstrakte Klassen, finale Klassen und Interfaces

14 Abstrakte Klassen, finale Klassen, Interfaces

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

Vererbung und Polymorphie

Javakurs für Anfänger

Programmierkurs Java

Objektorientierte Programmierung. Kapitel 12: Interfaces

Objektorientierte Programmierung. Kapitel 14: Interfaces

12 Abstrakte Klassen, finale Klassen und Interfaces

Programmieren in Java

Java für Bauingenieure

Einführung in die Programmierung

Vererbung, Polymorphie

Einstieg in die Informatik mit Java

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

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

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

OOP und Angewandte Mathematik. Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik

Inhalt. Informatik B Objektorientierte Programmierung in Java. Vorlesung 04: Objektorientierte Programmierung (Teil 4) Inhalt.

Programmierkurs C++ Abstrakte Klassen und Methoden

HSR Rapperswil 2001 Markus Rigling. Programmieren: Vererbung. 1 Variante 2

Interfaces und Vererbung

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

Programmieren I. Kapitel 8. Vererbung

Programmieren 2 Java Überblick

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

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

Abstrakte Klassen, Interfaces

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

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

Objektorientierte Programmierung Studiengang Medieninformatik

Info B VL 8: Abstrakte Klassen & Interfaces

Java Vererbung. Inhalt

Polymorphie/Späte Bindung Abstrakte Klassen Interfaces. Polymorphie/Späte Bindung Abstrakte Klassen Interfaces

Begriffe 1 (Wiederholung)

Einstieg in die Informatik mit Java

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

Schlussendlich geben wir die Listen aus. Es kommt zu folgender Ausgabe:

Einstieg in die Informatik mit Java

Programmieren in Java

Algorithmen und Datenstrukturen

Java I Vorlesung 6 Referenz-Datentypen

3 Objektorientierte Konzepte in Java

Javakurs für Anfänger

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Einführung in die Programmiersprache Java II

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

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Kapitel 5: Interfaces

Prof. W. Henrich Seite 1

3 Objektorientierte Konzepte in Java

Vererbung. CoMa-Übung XI TU Berlin. CoMa-Übung XI (TU Berlin) Vererbung / 47

Informatik II Übung 06. Benjamin Hepp 5 April 2017

Vererbung & Schnittstellen in C#

Probeklausur: Programmierung WS04/05

II.4.5 Generische Datentypen - 1 -

Geschachtelte Klassen

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

Thema heute: Vererbung und Klassenhierarchien. Abgeleitete Klassen. Vererbung von Daten und Funktionen. Virtuelle Funktionen

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

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

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

Exceptions und Vererbung

Repetitorium Informatik (Java)

7. Übung Informatik II - Objektorientierte Programmierung

Objektorientierte Programmierung Studiengang Medieninformatik

Programmierkurs C/C++

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

Javakurs für Anfänger

Programmierung und Angewandte Mathematik

6. Globalübung (zu Übungsblatt 8)

11 Vererbung und Klassenhierarchie

Rückblick: Benutzerdefinierte Datentypen Definition der Klasse Vektor als Container für 2-dimensionale Vektoren

Thema heute: Vererbung und Klassenhierarchien. Abgeleitete Klassen. Vererbung von Daten und Funktionen. Virtuelle Funktionen

Grundlagen der Informatik

Vererbung. Generalisierung und Spezialisierung Vererbung und Polymorphismus

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Interfaces

Java I Vorlesung Vererbung und Sichtbarkeit

Java Einführung Abstrakte Klassen und Interfaces

Felder - Arrays. Typ feldname[] = new Typ[<ganze Zahl >]; Beispiel: double vektor[] = new double[5]; auch eine Initialisierung ist möglich.

Java Einführung Vererbung und Polymorphie. Kapitel 13

C++ Notnagel. Ziel, Inhalt. Programmieren in C++

Überschreiben von Methoden

Transkript:

Einführung in Java Präsentation Interfaces Nozar Delassaei Marvi

Inhalt 1. Erinnerung Klasse Objekte Beispiel Klasse Abstrakte Klasse Beispiel Abstrakte Klasse Mehrfachvererbung-1 Mehrfachvererbung-2 2. Interfaces Definition, Implementierung und Verwendung von Interfaces Das Interface Comparable Implementierung mehrerer Interfaces Vererbung von Interfaces Ableiten von Interfaces Konstanten in Interfaces und static imports Flag-Interfaces Methode clone Nachbildung von Funktionszeigern Die Default-Implementierung eines Interface Delegation an eine Default-Implementierung Nozar Delassaei Marvi / HAW Hamburg 2

Klasse // Klasse: Eine Klasse beinhaltet Datenmember und Methoden, wie diese zu bearbeiten sind. // Die Datei muss dann den Namen der öffentlichen Klasse zuzüglich der Extension.java tragen. // Nach der Übersetzung durch den Compiler hat das Ergebnis die Extension.class. Nozar Delassaei Marvi / HAW Hamburg 3

Was ist ein Objekt? Objekte // Klassen dienen als Vorlage für viele einzelne Exemplare (Objekte). // Objekte sind Referenzdatentypen. Nozar Delassaei Marvi / HAW Hamburg 4

Beispiel Klasse public class Auto { public String name; private int PS; public int getps() { return PS; } } Nozar Delassaei Marvi / HAW Hamburg 5

Abstrakte Klasse // Was ist ein abstrakte Klasse? // Eine abstrakte Klasse ist in Java eine Klassendefinition, die ausschließlich der Vererbung ihres Inhaltes dient. //Eine abstrakte Klasse kann keine privaten Methoden haben. // Ein abstrakte Klasse kann als Basisklasse verwendet werden. Nozar Delassaei Marvi / HAW Hamburg 6

Syntax // Allgemeiner Aufbau lautet: abstract class Klassenname { public abstract void abstraktemethode() { } public void konkrete Methode() { }... } Nozar Delassaei Marvi / HAW Hamburg 7

Mehrfachvererbung-1 Ein Objekt kann die Eigenschaften aus mehreren Klassen beziehen, ein Objekt kann mehrere Schnittstellen besitzen. Autos und Schiffe sind Unterklassen von Fahrzeugen, Amphibienfahrzeug ist sowohl Auto als auch Schiff. Mehrfachvererbung Nozar Delassaei Marvi / HAW Hamburg 8

Mehrfachvererbung-2 // Mit Mehrfachvererbung kann eine Klasse ohne großen Aufwand aus bestehenden Klassen zusammengesetzt werden. // Die beerbende Klasse enthält alle Datenfelder und alle Methoden aus allen beerbten Klassen. Nozar Delassaei Marvi / HAW Hamburg 9

Es gibt ein Problem! keine Mehrfachvererbung von Klassen in Java!!! // Eine grundsätzlich Designentscheidung der Java-Erfinder war, keine Mehrfachvererbung zu unterstützen. Die Gründe: a) möglichen Schwierigkeiten beim Umgang mit mehrfacher Vererbung b) Das Erben nichttrivialer Methoden aus mehr als einer Klasse in der Praxis ist selten zu realisieren. Die Lösung... Nozar Delassaei Marvi / HAW Hamburg 10

Interfaces (Schnittstelle) Mit der Hilfe von Interfaces bietet Java eine Konstruktion an, solche Anforderungen zu lösen. Nozar Delassaei Marvi / HAW Hamburg 11

Definition // Ein Interface ist eine besondere Form einer Klasse, die ausschließlich abstrakte Methoden und Konstanten enthält. // Anstelle des Schlüsselwortes class wird ein Interface mit dem Schlüsselwort interface deklariert. // Eine Interface-Variable ist kompatibel zu allen Objekten, deren Klassen dieses Interface implementieren. Nozar Delassaei Marvi / HAW Hamburg 12

Syntax // Syntax [Modifikator] interface Interface { [final] [Modifikator[ Modifikator] ] Typ Variable = Wert; [abstract[ abstract] [Modifikator]] Typ Methode(); } //Quellcode: interface MyInterface { public int i = 0; public void print(); } Nozar Delassaei Marvi / HAW Hamburg 13

// Durch die Definition wird die Schnittstelle (interface)) nur beschrieben, die gewünschte Funktionalität wird noch nicht zur Verfügung gestellt. // Das folgende Listing definiert ein Interface Groesse, das die drei Methoden laenge, hoehe und breite enthält. Nozar Delassaei Marvi / HAW Hamburg 14

Implementierung eines Interface // Soll die gewünschte Funktionalität von Klassen realisiert werden, muss diese zuerst implementiert werden. Die neue gewünschte Funktionalität erweitert die class class-anweisung um eine implements implements- Klausel. Hinter der Klausel wird der Name der zu implementierenden Interface angegeben. Jetzt ist die Aufgabe der Compiler, um alle im Interface geforderten Methoden definitionsgemäß zu implementieren. (Beispiele: Auto2 und Fußballplatz ) // Die Art der Realisierung der vereinbarten Methoden spielt für das Implementieren eines Interface keine Rolle. Tatsächlich kommt es ausgesprochen häufig vor, dass Interfaces von sehr unterschiedlichen Klassen implementiert und die erforderlichen Methoden auf sehr unterschiedliche Weise realisiert werden. Nozar Delassaei Marvi / HAW Hamburg 15

Verwenden eines Interface // Ein einfaches Beispiel für die Anwendung des Interfaces: Dazu soll eine Methode grundflaeche grundflaeche entwickelt werden, die zu jedem Objekt, das das Interface Groesse Groesse implementiert, dessen Grundfläche (Länge mal Breite) berechnet. (Beispiel 0905) Nozar Delassaei Marvi / HAW Hamburg 16

Das Interface Comparable Dieses Interface kann von Klassen implementiert werden, deren Objekte paarweise vergleichbar sind. Die Methode compareto liefert genau dann einen Wert kleiner 0, wenn das Objekt»kleiner«; größer 0, wenn es»größer«, und gleich 0, wenn es»gleich«dem als Argument übergebenen Objekt o ist. (Beispiel Listing 0907) Mit Hilfe von Comparable kann die Reihenfolge der Objekte einer Klasse ermittelt werden. Aus dem Paarweisen Vergleich lässt sich eine implizite Ordnung der Elemente ableiten, denn für alle aufeinander folgenden Objekte a und b muss a.compareto(b) <= 0 gelten. Nozar Delassaei Marvi / HAW Hamburg 17

Mehrfachimplementierung und Vererbung 1. Mehrfachimplementierung // Es ist durchaus möglich, dass eine Klasse mehrere Interfaces implementiert. Sie muss dann zu jedem Interface alle darin definierten Methoden implementieren. // Mit jedem implementierten Interface wird sie zu dem dadurch definierten Datentyp kompatibel. Eine Klasse, die n Interfaces implementiert, ist demnach zu n + 1 Datentypen (plus ihren jeweiligen Oberklassen) kompatibel. (Beispiel Auto3) Nozar Delassaei Marvi / HAW Hamburg 18

Mehrfachimplementierung und Vererbung 2. Vererbung von Interfaces // Wenn eine Klasse die Interfaces seiner Basisklasse erbt: Auto4 erbt von Auto2 nicht nur die Implementierung, sondern auch die Klausel implements Groesse und erweitert sie um die Implementierung von Comparable. Damit ist Auto4 gleichwertig zu Auto3 Nozar Delassaei Marvi / HAW Hamburg 19

Mehrfachimplementierung und Vererbung 3. Ableiten von Interfaces // Auch Interfaces selbst können abgeleitet werden. Ähnlich einer Klasse erbt das abgeleitete Interface alle Methodendefinitionen des BasisInterfaces. // Die implementierende Klasse muss also auch alle Methoden von allen übergeordneten Interfaces implementieren. Nozar Delassaei Marvi / HAW Hamburg 20

Weitere Anwendungen von Interfaces 1.Konstanten in Interfaces // Interfaces können auch Konstanten, also Membervariablen mit den Attributen static und final, enthalten. Wenn eine Klasse ein Interface implementiert, erbt es auch alle seine Konstanten. Es ist auch erlaubt, dass ein Interface ausschließlich Konstanten enthält. // Dieses Feature kann zum Beispiel nützlich sein, wenn ein Programm sehr viele Konstanten definiert. Anstatt sie in ihren eigenen Klassen zu belassen und bei jedem Gebrauch durch den qualifizierten Ausdruck Klasse.Name aufzurufen, könnte ein Interface definiert werden, das alle Konstantendefinitionen vereinigt. Wenn nun jede Klasse, in der diese Konstanten benötigt werden, dieses Interface implementiert, stehen alle darin definierten Konstanten direkt zur Verfügung und können ohne qualifizierten Klassennamen aufgerufen werden. Nozar Delassaei Marvi / HAW Hamburg 21

Weitere Anwendungen von Interfaces 1.1 static import Seit der J2SE 5.0 gibt es eine Möglichkeit, statische Teile aus Klassen und Interfaces unqualifiziert zu benutzen, ohne implements zu verwenden. Nozar Delassaei Marvi / HAW Hamburg 22

Weitere Anwendungen von Interfaces 2. Implementierung von Flags //Einige Interfaces definieren weder Methoden noch Konstanten. Sie stellen statt dessen eine Art Flag, also einen logischen Schalter dar, der zur Compileund Laufzeit abgefragt werden kann. Beispiel: Interface Cloneable //Cloneable ist ein Schalter für die in der Klasse Object implementierte Methode clone. Implementiert eine abgeleitete Klasse dieses Interface nicht, so deutet clone das als fehlende Fähigkeit (oder Bereitschaft) der Klasse, eine Objektkopie herzustellen, und löst beim Aufruf eine CloneNotSupportedException aus. Implementiert die abgeleitete Klasse dagegen Cloneable, erzeugt ein Aufruf von clone eine elementweise Kopie des aktuellen Objekts. Nozar Delassaei Marvi / HAW Hamburg 23

Weitere Anwendungen von Interfaces 3. Nachbildung von Funktionszeigern // Eine wichtige Anwendung von Interfaces besteht darin, eine Funktion als Argument an andere Funktionen zu übergeben. Beispiele für ihre Anwendung sind Funktionsplotter oder Callback- Funktionen bei der Programmierung grafischer Oberflächen. // Funktionszeiger können leicht mit Hilfe von Interfaces nachgebildet werden. Dazu wird zunächst ein Interface definiert, das eine einzelne Methode f des gewünschten Typs deklariert. Es kann dann von unterschiedlichen Klassen so implementiert werden, dass in f jeweils die gewünschte Berechnung ausgeführt wird. Anstelle der Übergabe eines Zeigers wird nun einfach ein Objekt dieser Klasse instanziert und an die zu konfigurierende Methode übergeben. Diese wird vom Typ des Interfaces deklariert und kann so die Methode f aufrufen. (Beispiel 0915) Nozar Delassaei Marvi / HAW Hamburg 24

Interfaces und Hilfsklassen 1. Die Default-Implementierung // Es gibt viele Gemeinsamkeiten zwischen (abstrakten) Klassen und Interfaces. Für die Verwendung des Interfaces spricht die größere Flexibilität durch die Möglichkeit, in unterschiedlichen Klassenhierarchien verwendet zu werden. Für die Verwendung einer Klasse spricht die Möglichkeit, bereits ausformulierbare Teile der Implementation zu realisieren und die Fähigkeit, statische Bestandteile und Konstruktoren unterzubringen. // Wird ein Interface erstellt, das voraussichtlich häufig implementiert werden muss und/oder viele Methoden definiert, ist es sinnvoll, eine Default-Implementierung zur Verfügung zu stellen. // Damit ist eine Basisklasse gemeint, die das Interface und alle sinnvoll realisierbaren Methoden implementiert. Besitzt eine Klasse, die das Interface implementieren muss, keine andere Vaterklasse, so kann sie von der Default-Implementierung abgeleitet werden und erbt so bereits einen Teil der sonst manuell zu implementierenden Funktionalität. Nozar Delassaei Marvi / HAW Hamburg 25

Interfaces und Hilfsklassen 2. Delegation an die Default-Implementierung // Läßt sich eine potentielle SimpleTreeNode-Klasse nicht von DefaultTreeNode ableiten, muss sie das Interface selbst implementieren. Besitzt die Default-Implementierung bereits nennenswerte Funktionalitäten, wäre es schlechter Stil, diese ein zweites Mal zu implementieren. Statt dessen ist es eventuell möglich, die Implementierung an die bereits vorhandene DefaultTreeNode zu delegieren. // Dazu muss die zu implementierende Klasse eine Membervariable vom Typ DefaultTreeNode anlegen und alle Aufrufe der Interface- Methoden an dieses Objekt weiterleiten. Nozar Delassaei Marvi / HAW Hamburg 26

Vielen Dank für Ihre Aufmerksamkeit! Nozar Delassaei Marvi / HAW Hamburg 27