Interfaces Definition von Interfaces Verwendung von Interfaces

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

der Universität Oldenburg
DVG Einfache Klassen Einfache Klassen. DVG Einfache Klassen 2 Strukturen Beispiel: Personendaten bestehen aus –String name –String vorname.
Definition von Klassen in Java
Java: Objektorientierte Programmierung
Indirekte Adressierung
Java: Grundlagen der Objektorientierung
Abstrakte Klassen.
Polymorphie (Vielgestaltigkeit)
Einführung in die OOP in Java
Java-Kurs - 7. Übung Besprechung der Hausaufgabe Referenzvariablen
Programmieren mit JAVA
Programmieren mit JAVA
Vererbung Spezialisierung von Klassen in JAVA möglich durch
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm.
DVG Einführung in Java1 Einführung in JAVA.
Abstrakte Klassen, Interface
DVG Klassen und Objekte
DVG Einfache Klassen 1 Einfache Klassen. 2DVG Einfache KlassenStrukturen Beispiel: Personendaten bestehen aus String name String name.
Java in 9 Folien Besser: Online-Buch Go to Java 2.
Vererbung Einfache Vererbung – Erben von abstrakten Klassen – Implementieren eines Interfaces.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Informatik 1 Übung 8. NACHBESPRECHUNG Übung 8 Rekursion Existiert Weg von A nach B?
Programmiervorkurs WS 2014/15 Methoden
Programmiervorkurs WS 2014/15 Instanzmethoden
Polymorphie (Vielgestaltigkeit). Wenn eine Methode, wie z.B. print für verschiedene Programmteile steht (und z.B. einmal Objekte verschiedener Klassen.
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
Java-Kurs - 6. Übung Besprechung der Hausaufgabe
Java-Kurs - 6. Übung Besprechung der Hausaufgabe
Java-Kurs Übung Besprechung der Hausaufgabe Vererbung
Java-Kurs Übung Besprechung der Hausaufgabe
Java-Kurs - 5. Übung Besprechung der Übungsaufgabe Klassen und Objekte
Java-Kurs Übung Besprechung der Hausaufgabe Vererbung
Objektorientierte Programmierung (OOP)
Abstrakte Klassen und das Interface-Konzept
Vererbung. Klassen - Vererbung  Eine Klasse kann von einer Basisklasse abgeleitet werden  Die abgeleitete Klasse erbt die Eigenschaften und Methoden.
Java Programme nur ein bisschen objektorientiert.
Tutorium Software-Engineering SS14 Florian Manghofer.
C++ FÜR cOMPUTERSPIELENTWICKLER
Tutorium Software-Engineering SS14 Florian Manghofer.
Vererbung in Java. public abstract class Form { protected int breite; protected int hoehe; protected String farbe; /** * Erzeuge eine Form der Breite.
Klassen in Java.
Schnittstellen.
Objektorientierung Gliederung von Daten und Funktionen zu Objekten
Vererbung.
„Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen.“
Venusspiegel und Marsschild
OOP II.
Java-Kurs Übung Grafik in Java - das Abstract Windowing Toolkit
Java-Kurs - 5. Übung Das Paradigma der Objektorientierung (OO)
Einführung in die Programmierung mit Java
Java-Kurs Übung Klassen und Objekte: Vererbung (Fortsetzung)
Ein schematischer Kirschbaum in Java
Allgemeine Befehle für die allgemeine Liste
Einführung in die Programmierung mit Java
Raphael Fischer Informatik II - Übung 06 Raphael Fischer
Polymorphie Überladen
Ausnahmen Exceptions Definition Ausnahmen erzeugen Ausnahmen abfangen
2. Vererbung und Kapselung
Objektorientierung Klassen und Objekte Dr. Beatrice Amrhein.
«Delegierter» Methoden Schablone Funktionszeiger
Definition Felder Konstruktor Methoden Beispiel
1. Die rekursive Datenstruktur Liste 1
9. Vererbung und Polymorphie
Implementieren von Klassen
Grundlagen der OO-Programmierung in C#
Statische und Nichtstatische Methoden Properties / Eigenschaften
Polymorphie Überschreiben
Schleifen Datenfelder (Arrays) Verzweigungen
 Präsentation transkript:

Interfaces Definition von Interfaces Verwendung von Interfaces Vordefinierte Interfaces Beispiele Dr. Beatrice Amrhein

Definition: Interface Ein Interface dient dazu, Schnittstellen klar zu definieren (Methoden zu erzwingen). Interfaces dürfen ausschliesslich Deklarationen enthalten, Implementierungen sind nicht erlaubt. Alle Members des Interface sind automatisch public. Ein Interface ist eine Art Vertrag, welcher mit den implementierenden Klassen vereinbart wird. Alle Methoden des Interface müssen in der Klasse, welche das Interface nutzt, implementiert werden

Mehrfach Vererbung Eine Klasse darf jeweils nur genau von einer(!) anderen Klasse abgeleitet werden (keine Mehrfach-Vererbung). Eine Klasse kann aber beliebig viele Interfaces implementieren (und zusätzlich von einer Klasse erben).

Interface: Schreibweise Die Deklaration des Interface enthält alle vorgeschriebenen Methoden public interface IMyInterface { int Methode1(int a); void Methode2(int a, string b); string Methode3(); . . . }

Interface: Schreibweise Die Deklaration der implementierenden Klasse hängt den Namen des Interface mit einem Doppelpunkt an (gleich wie bei der Vererbung). Dadurch wird die Klasse gezwungen, alle Methoden des Interface zu implementieren. public class Klasse : IMyInterface { public int Methode1(int a) { . . . } public void Methode2(int a, string b) { . . . } string Methode3() }

Beispiel: Bibliothek

Das Klassendiagramm

Interface: ILeihObjekt Die Deklaration des Interface ILeihObjekt schreibt vor, welche Methoden implementiert werden müssen. public interface ILeihObjekt { string Info(); string Info(string s); }

Klassse DVD implementiert ILeihObjekt public class DVD : ILeihObjekt { private int laenge; private string titel; public DVD(String t, String r) this.titel = t; Console.Write("--> DVD"); } public DVD(String t, int l) : this(t) { this.laenge = l; } public String Info() { return "\n" + this.titel } public String Info(String s) { return this.Info() + s + this.laenge; } Müssen implementiert werden, um die Bedingungen des Interface zu erfüllen

Klasse PrintMedium implementiert ILeihObjekt public class PrintMedium : ILeihObjekt { private string title; private string verlag; private int seiten; public PrintMedium(string t, string p) this.title = t; verlag = p; Console.Write("--> PrintMedium"); } public PrintMedium(string t, string p, int s) : this(t, p) { seiten = s; } public virtual string Info() { return "\n"+this.title + " des Verlags " + this.verlag; } public virtual string Info(string s) { return this.Info() + s + this.seiten; } Müssen implementiert werden, um die Bedingungen des Interface zu erfüllen

Klassse Buch erbt von PrintMedium Die Klasse Buch erbt von PrintMedium und erfüllt darum automatisch alle Bedingungen des Interfaces ILeihObjekt. public class Buch : PrintMedium { private String autor; public Buch(String t, String p, String a) : base(t, p) this.autor = a; Console.Write("--> Buch"); } public override String Info() { return base.Info() + ", Autor: " + autor; } Die Methode Info() kann überschrieben werden, da Info() bereits in PrintMedium implementiert ist, ist das aber nicht zwingend nötig.

Geometrische Objekte

Das Klassendiagramm

Interface: ILeihObjekt Die Deklaration des Interface IGeomObjekt schreibt vor, dass jedes Geometrische Objekt zwei Zeichne() und eine SetFarbe() Methode haben muss: public interface IGeomFigur { void Zeichne(MainWindow window); void Zeichne(MainWindow window, Brush s); void SetFarbe(Brush b); }

Klasse Polygon implementiert IGeomFigur public class Polygon : IGeomFigur { protected int[] seiten; protected Brush farbe = Brushes.Yellow; public Polygon(int[] s) { this.seiten = s; } public void Zeichne(MainWindow window, Brush b) { window.DrawPolygon(seiten, b); } public void Zeichne(MainWindow window) { this.Zeichne(window, Brushes.Yellow); } public void SetFarbe(Brush b) { farbe = b; } } Müssen implementiert werden, um die Bedingungen des Interface zu erfüllen

Die Klasse Dreieck Die Klasse Dreieck erbt von Polygon und braucht darum die Methoden von IGeomObjekt nicht (nochmals) zu implementieren. public class Dreieck : Polygon { public Dreieck(int[] s) : base(s) }

Klassse Ellipse implementiert IGeomFigur public class Ellipse : IGeomFigur { protected int[] seiten; protected Brush farbe = Brushes.Blue; public Ellipse(int[] s) { this.seiten = s; } public void Zeichne(MainWindow window, Brush s) { window.DrawEllipse(this.seiten[0], this.seiten[1], s); } public virtual void Zeichne(MainWindow window) { this.Zeichne(window, farbe); } public void SetFarbe(Brush b) { farbe = b; } } Müssen implementiert werden, um die Bedingungen des Interface zu erfüllen

Die Klasse Kreis Die Klasse Kreis erbt von Ellipse und braucht darum die Methoden von IGeomObjekt nicht (nochmals) zu implementieren. Wir können aber im Konstruktor eine andere Zeichen-Farbe setzen. public class Kreis : Ellipse { public Kreis(int[] s) : base(s) base.farbe = Brushes.Red; }

Vorteile des Interfaces Da alle diese Geometrischen Objekte die Methoden Zeichne() und SetFarbe implementieren, können wir im Main-Programm folgendes schreiben: public static void Main(MainWindow window) { int[] s1 = { 5, 3, 2 }; int[] s2 = { 4, 4 }; IGeomFigur[] liste = new IGeomFigur[6]; liste[0] = new Rechteck(s1); liste[1] = new Polygon(s1); liste[2] = new Ellipse(s1); liste[3] = new Dreieck(s1); liste[3].SetFarbe(Brushes.Pink); liste[4] = new Kreis(s2); liste[5] = new Rechteck(s2); foreach (IGeomFigur figur in liste) figur.Zeichne(window); }

Vorteile des Interfaces Die Liste der Main()-Funktion IGeomFigur[] liste = new IGeomFigur[6]; besteht aus lauter Geometrischen Figuren, welche alle eine Zeichne() und eine SetFarbe() Funktion haben. Darum kann für ein beliebiges Objekt der Liste der Befehl liste[3].SetFarbe(Brushes.Pink); aufgerufen werden. Die Schleife foreach (IGeomFigur figur in liste) { figur.Zeichne(window); } iteriert über lauter Geometrische Figuren, darum kann für alle die Zeichne()-Funktion aufgerufen werden. Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

In C# definierte Interfaces

Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012 Interfaces von C# Im Namespace System von C# existieren eine Reihe von nützlichen Schnittstellen. IClonable verlangt eine Clone() Methode, welche eine exakte Kopie (ein Clone) eines Objektes herstellt. IComparable<Type> verlangt eine int Compare(Type other) Methode, welche zwei Objekte vom Typ Type vergleicht. IEquatable<Type> verlangt eine bool Equals(Type other) Methode, welche entscheidet, ob zwei Objekte vom Typ Type gleich sind. Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

Mehrfach-Vererbung Da eine Klasse von einer anderen Klasse erben und zusätzlich ein (oder mehrere) Interfaces implementieren kann, ist es möglich die Vorteile dieser Interfaces zu nutzen.

Die Interfaces IFilm und IComparable Das Interface IFilm verlangt für alle Filme eine Ausgabe Funktion: interface IFilm { void Ausgabe(); } Das C# Interface IComparable verlangt eine Vergleichsfunktion, damit die Filme geordnet werden können. int CompareTo(Object obj); Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012 Die Klasse Film Die Klasse Film soll beide Interfaces Implementieren. Also muss sie mindestens eine Funktion Ausgabe und eine Funktion CompareTo haben: public class Film : IFilm, IComparable<Film> { private string titel; private int laenge; protected Film(string t, int l) { this.titel = t; this.laenge = l; } public virtual void Ausgabe() Console.Write(titel + ", Dauer " + laenge + " Minuten"); } public int CompareTo(Film f) return this.titel.CompareTo(f.titel); Wir wollen nur Objekte vom Typ «Film» vergleichen können. Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

Die Klasse Dokumentation Die Klasse Dokumentation erbt von Film und braucht darum die Methoden des Interfaces nicht mehr zu implementieren. Sie kann aber die Ausgabe-Methode überschreiben. public class Dokumentation : Film { private string genre; public Dokumentation(string t, int l, string g) : base(t, l) { this.genre = g; } public override void Ausgabe() base.Ausgabe(); Console.WriteLine(", aus dem Bereich " + this.genre); } Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

Die Klasse Unterhaltung Die Klasse Unterhaltung erbt von Film und braucht darum die darum die Methoden des Interfaces nicht mehr zu implementieren. Sie kann aber die Ausgabe-Methode überschreiben. public class Unterhaltung : Film { private int jahr; public Unterhaltung(string t, int l, int j) : base(t, l) { this.jahr = j; } public override void Ausgabe() base.Ausgabe(); Console.WriteLine(", aus dem Jahr " + this.jahr); } Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012 Die Main Methode static void Main(string[] args) { Film[] liste = new Film[6]; liste[0] = new Dokumentation("Die Erde", 120, "Geographie"); liste[1] = new Dokumentation("Das Römische Reich", 112, "Geschichte"); liste[2] = new Dokumentation("Gesundheit heute", 120, "Medizin"); liste[3] = new Unterhaltung("Der Hobbit", 135, 2014); liste[4] = new Unterhaltung("Der Weg zum Ziel", 105, 2016); liste[5] = new Unterhaltung("Der Verräter", 120, 2018); Array.Sort(liste); foreach (Film f in liste) { f.Ausgabe(); } } Alle Film-Objekte können verglichen werden, darum funktioniert die Sort()-Funktion. Alle Film-Objekte haben eine Ausgabe()-Funktion Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012

Die Ausgabe der Main Methode Die Filme werden durch den Befehl nach den Film-Titeln sortiert und danach durch den Aufruf auf die Console geschrieben. Array.Sort(liste); foreach (Film f in liste) { f.Ausgabe(); } Nach dem Handbuch der .NET 4.0-Programmierung, Rolf Wenger, 2012