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

Ähnliche Dokumente
Typumwandlungen bei Referenztypen

Objektorientierte Programmierung. Kapitel 12: Interfaces

3 Objektorientierte Konzepte in Java

Datenstrukturen und Algorithmen

3 Objektorientierte Konzepte in Java

Kapitel 6. Vererbung

Vererbung & Schnittstellen in C#

Kapitel 6. Vererbung

Kapitel 6. Vererbung

Javakurs zu Informatik I. Henning Heitkötter

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

Theorie zu Übung 8 Implementierung in Java

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

1 Polymorphie (Vielgestaltigkeit)

5. Abstrakte Klassen

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

Java für Computerlinguisten

Java, OO und UML Fortsetzung

Einstieg in die Informatik mit Java

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Java Einführung Abstrakte Klassen und Interfaces

Abschnitt 9: Schnittstellen: Interfaces

Java I Vorlesung Vererbung und Sichtbarkeit

Probeklausur: Programmierung WS04/05

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

Algorithmen und Datenstrukturen 07

Repetitorium Informatik (Java)

Teil 2: OOP und JAVA (Vorlesung 11)

5.14 Generics. Xiaoyi Jiang Informatik I Grundlagen der Programmierung

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

Programmieren in Java

Probeklausur: Programmierung WS04/05

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

Innere Klassen in Java

Einführung in die Programmierung

2.4.3 Polymorphie (Wiederholung von Alp2)

Objektorientierte Programmierung

Wiederholung zur Vorlesung Programmieren

4. AuD Tafelübung T-C3

Gebundene Typparameter

Große Übung Praktische Informatik 1

5.6 Vererbung. Vererbung

Überschreiben von Methoden

Type Erasure in Java 5. Helmi Jouini Institut für Theoretische Informatik Universität Karlsruhe

Prinzipien Objektorientierter Programmierung

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Vererbung. Was versteht man unter dem Begriff Vererbung?

5.4 Klassen und Objekte

Höhere Programmierkonzepte Testklausur

Grundkonzepte java.util.list

Datenbankanwendungsprogrammierung Crashkurs Java

Vererbung. Martin Wirsing. Ziele. Vererbung

A(T1) A(T2) A(T1) A(T2)

Themen. Web Service - Clients. Kommunikation zw. Web Services

Objektorientierte Programmierung

Repetitorium Informatik (Java)

Test zu Grundlagen der Programmierung Leitung: Michael Hahsler. 21. November 2003

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

2. Vererbung und Polymorphie. Vererbung (1/2) Beispiel (1/2) Vererbung (2/2) Eine Unterklasse wird folgendermaßen definiert

Java Einführung Klassendefinitionen

5.5.8 Öffentliche und private Eigenschaften

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

Vorlesung Programmieren. Bisher: Klassen und Objekte. Was ist mit ähnlichen Klassen? Vererbung und Polymorphismus

1.2 Attribute und Methoden Aufbau einer Java-Klasse:

Java-Schulung Grundlagen

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 14/15. Kapitel 11. Fehler und Ausnahmen 1

Einführung in die. objektorientierte Programmierung

Einführung in die Java- Programmierung

C# im Vergleich zu Java

Java - Vererbung. Personen. Leibniz Universität IT Services Anja Aue

Java Einführung Methoden in Klassen

Algorithmen und Datenstrukturen

Teil 1: Grundeigenschaften von Rechnern und Software

3. Exceptions. Hintergrund: Programmieren auf der Basis von Verträgen. Kundenklasse. Lieferantenklasse

Exceptions. Prof. Dr. Margarita Esponda SS M. Esponda-Argüero

Factory Method (Virtual Constructor)

11.3 Virtuelle Methoden

Objekt-Orientierte Programmierung

3. Konzepte der objektorientierten Programmierung

Programmierkurs Java. Vererbung. Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Prüfungszeuch im Fach Objektorientierte Programmierung WS 2000

Objektorientierte Programmierung. Kapitel 16: Pakete, Zugriffsschutz

Klassenbeziehungen & Vererbung

Spec# Einführung. Formale Software-Entwicklung Seminar SS 07 Universität Karlsruhe Hilal Akbaba

Remote Method Invocation

1. Der Einstieg in Java. Was heißt Programmieren?

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

Klassen und Objekte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

Exception. 6. Exceptions. Die Klasse java.lang.exception. Fehlermeldung. Klassenname. Ort des Auftretens

Übersicht. Vorstellung des OO-Paradigmas

Abschnitt 12: Strukturierung von Java-Programmen: Packages

Java Einführung Collections

C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung. Eltern

PIWIN I. Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I. Vorlesung 3 SWS WS 2008/2009

Inhaltsüberblick. I. Grundbegriffe - Objekte und Klassen. Organisatorisches. I. Grundbegriffe - Objektorientierte Konzepte

1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)

Interaktionen zwischen Objekten durch Senden von Nachrichten und Reagieren auf empfangene Nachrichten

Javakurs 2013 Objektorientierung

Einführung in die Informatik II

Transkript:

Weitere Beispiele Beispiel CD-Spieler: Exemplare eines abstrakten Konzepts public interface Funktion { boolean istimdefbereich(double x); double wert(double x); String gibbeschreibung(); public interface Woerterbuch { void put(string key, String info); String get(string key); void remove(string key); Spezifikation einheitliche Signatur vereinbartes Verhalten Datenabstraktion Trennung von Verhalten und Implementierung Verstecken der Implementierung Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 184 Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 182 Schnittstelle: Syntax 7. Schnittstellen Definition einer öffentlichen Schnittstelle: public interface InterfaceName { Konstantendeklarationen Methodenköpfe Beispiel: public interface BewegbaresDing { void bewegedich(); Eine Schnittstelle (Interface) ist eine Spezifikation eines Typs in Form eines Typnamens und einer Menge von Methoden, die keine Implementierungen für die Methoden definiert. Wir können Schnittstellen anschaulich zunächst als rein abstrakte Klassen auffassen, d.h. alle Methoden dieser Klasse sind abstrakt. Was bringt uns das? Vollständige Trennung von Spezifikation und Implementierung Verschiedene Implementierungen der gleichen Spezifikation Austauschbarkeit Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 183 Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 181

Implementierung mehrerer Interfaces Schnittstellen und Datentypen (1) Wenn wir extends zusammen mit implements nutzen, muss extends vor implements stehen. Es ist möglich, dass eine Klasse mehr als eine Schnittstelle implementiert. In diesem Fall geben wir alle implementierten Schnittstellen als Kommaliste hinter implements an. public class Klasse extends Oberklasse implements Schnittstelle1, Schnittstelle2,... {... Wenn die Schnittstellendefinition in einer Datei mit der Endung.java liegt, können wir die Schnittstellendefinition wie eine Klasse übersetzen. Analog zu einer Klasse entsteht durch die Kompilierung auch eine.class-datei. Ebenso wie bei Klassen ist mit jeder Schnittstelle auch ein Datentyp verbunden. Da Schnittstellen aber abstrakt sind, können zu Schnittstellen nicht direkt Objekte erzeugt werden, d.h. new Schnittstelle(...); ist nicht möglich. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 188 Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 186 Implementierung von Interfaces Eigenschaften von Schnittstellendefinitionen Klassen können Interfaces implementieren. Hierzu müssen unsere Klassen folgendes leisten: 1. Für jede Methode des Interfaces muss die Klasse eine Methode mit passender Signatur anbieten. 2. Im Kopf der Klasse müssen wir explizit angegeben, dass unsere Klasse das Interface implementiert. Hierzu nutzen wir das Schlüsselwort implements. Syntax: public class Klasse extends Oberklasse implements Schnittstelle {... Beispiele: Funktionen Im Kopf wird statt class das Schlüsselwort interface verwendet. Alle Methoden in einem Interface sind abstrakt: es sind keine Methodenrümpfe zugelassen, das Schlüsselwort abstract wird nicht angegeben. Interfaces enthalten keine Konstruktoren. Alle Methoden sind implizit public: die Sichtbarkeit muss nicht angegeben werden. Als Datenfelder können nur öffentliche Konstanten deklariert werden: die Festlegung als Konstante durch public, static und final muss nicht erfolgen. Sichtbarkeit für Interfaces: nur public oder default ist möglich Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 187 Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 185

Mehrfachvererbung bei Schnittstellen Schnittstellen und Vererbung Im Gegensatz zur Einfachvererbung von Klassen ist in Java bei Schnittstellen eine Mehrfachvererbung erlaubt. Damit kann eine Schnittstelle gleichzeitig mehrere andere Schnittstellen erweitern. public interface Schnittstelle extends Oberschnittstelle1, Oberschnittstelle2,... {... Die Mehrfachvererbung bei Schnittstellen hat allerdings keine große Bedeutung. Die Möglichkeit, dass eine Klasse mehrere Schnittstellen implementiert, ist von erheblich größerer Bedeutung. Schnittstellen besitzen analog zu Klassen die Möglichkeit, mit dem Schlüsselwort extends eine schon vorhandene Schnittstelle zu erweitern. public interface NachrichtenQuelle { public int SPORT = 0; public int POLITIK = 1; public int KULTUR = 2; public int ANZEIGEN = 3; public int GESAMT = 4; public void anmelden(nachrichtenempfaenger empf, int typ); public void sendenachricht(string nachricht); Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 192 Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 190 public interface Vermittler extends NachrichtenQuelle { public void empfangenachricht(string nachricht); Wirkungsweise: Die Definition der Unterschnittstelle erbt die Definitionen der Oberschnittstelle. Hierbei muss wieder das Prinzip der Ersetzbarkeit gewährleistet bleiben. Schnittstellen und Datentypen (2) Ein Interface definiert genau wie eine Klasse einen Datentyp. Klassen, die ein Interface implementieren, definieren Subtypen des Interface-Typs. Somit können Variablen von einem Interface-Typ deklariert werden, obwohl keine Objekte dieses Typs existieren können, sondern nur Objekte der Subtypen. Wenn die Klasse Parabel die Schnittstelle Funktion implementiert: Funktion f = new Parabel( 1.0, 0.0, 0.0 ); Auch möglich: Funktion[] f = new Funktion[10]; Damit haben wir wieder Variablen- und Methodenpolymorphie. Beispiel: Funktionen Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 191 Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 189

Typumwandlungen (Downcasting) Die Verwendung von instanceof ist auch mit Schnittstellentypen möglich. Downcasting ist nur explizit möglich. Wird zur Laufzeit auf Korrektheit geprüft. ClassCastException falls Downcasting fehlerhaft Konstanten werden vererbt: Allefarben.ROT Konstanten dürfen überschrieben werden: Allefarben.BRAUN Bei der Nutzung der Konstanten dürfen keine Mehrdeutigkeiten auftreten: Allefarben.SCHWARZ Auch keine potentiellen Mehrdeutigkeiten: Allefarben.LILA Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 196 Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 194 Typumwandlungen (Upcasting) Mehrdeutigkeiten bei Mehrfachvererbung Implizite Upcasts finden in folgenden Fällen statt: Von Klasse U nach Klasse O, wenn U Unterklasse von O ist. Von Klasse K nach Schnittstelle S, wenn die Klasse K die Schnittstelle S implementiert. Von null zu jeder Klasse, Schnittstelle oder Feld. Von Schnittstelle U nach Schnittstelle S, wenn U Unterschnittstelle von S ist. Von Schnittstelle oder Feld zu Object. Von Feld S[ ] mit Schnittstelle S als Komponententyp nach Feld T[ ] mit Typ T als Komponententyp, wenn es einen Upcast von S nach T gibt. public interface Grundfarben { int ROT = 1; int GRUEN = 2; int BLAU = 3; public interface Sockenfarben extends Grundfarben { int SCHWARZ = 10; int LILA = 11; public interface Hosenfarben extends Grundfarben { int LILA = 11; int SCHWARZ = 20; int BRAUN = 21; public interface Allefarben extends Sockenfarben, Hosenfarben { int BRAUN = 30; Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 195 Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 193

Interfaces als Spezifikation Interfaces erlauben es, die Funktionalität (Schnittstelle) vollständig von der Implementierung zu trennen. Gute Beispiele hierfür findet man im Java SDK. Im Paket java.util findet man beispielsweise das Interface List sowie die Klassen ArrayList und LinkedList. Das Interface List definiert die volle Funktionalität einer Liste, ohne eine Implementierung festzulegen. Die Klassen ArrayList und LinkedList stellen verschiedene Implementierungen dieser Schnittstelle dar. Die beiden Implementierungen unterscheiden sich erheblich in der Effizienz einiger Methoden. Welche Implementierung für eine gegebene Anwendung besser ist, ist im voraus oft schwer festzulegen. Lösung: Die Exception muss in der Schnittstelle deklariert werden! interface Schnittstelle { void methode() throws Exception; Damit dürfte die Implementierung von methode() Exception oder eine beliebige Unterklasse von Exception auslösen. Nicht gestattet: allgemeinere Exceptions oder weitere Exceptions Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 200 Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 198 Beispiel: CharSequence Schnittstellen und Exceptions Zur Schnittstellendefinition gehört auch die Deklaration von möglichen Exceptions. Folgende Konstruktion ist nicht erlaubt: interface Schnittstelle { void methode(); public class Klasse implements Schnittstelle { public void methode() throws Exception {... Siehe: C. Ullenboom, Java ist auch eine Insel, Abschnitt 6.10.7 Widerspruch zum Prinzip der Ersetzbarkeit. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 199 Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 197

Markierungsschnittstelle (Marker Interface) Eine Markierungsschnittstelle enthält in Ihrer Definition keine Methoden. Implementierende Klassen geben über eine Markierungsschnittstelle an, dass sie eine bestimmte Funktionalität unterstützen. Beispiel: java.lang.cloneable Objekte aus Klassen, die Cloneable nicht implementieren, können nicht kopiert werden. CloneNotSupportedException Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 202 Das Interface List macht aber solch eine Listenanwendung flexibel. Wenn wir stets List für Datentypen bei den entsprechenden Variablen und Parametern verwenden, funktioniert die Anwendung unabhängig von der aktuell gewählten Implementierung für Listen. Lediglich bei der Erzeugung einer Liste müssen wir eine Implementierung festlegen. Beispiel: private Liste meineliste = new ArrayList(); So könnten wir in der Anwendung eine LinkedList verwenden, indem wir einfach an dieser einen Stelle ArrayList durch LinkedList ersetzen. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 08 201