Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Interfaces Definition von Interfaces Verwendung von Interfaces

Ähnliche Präsentationen


Präsentation zum Thema: "Interfaces Definition von Interfaces Verwendung von Interfaces"—  Präsentation transkript:

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

2 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

3 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).

4 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(); . . . }

5 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() }

6 Beispiel: Bibliothek

7 Das Klassendiagramm

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

9 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

10 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

11 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.

12 Geometrische Objekte

13 Das Klassendiagramm

14 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); }

15 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

16 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) }

17 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

18 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; }

19 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); }

20 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

21 In C# definierte Interfaces

22 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

23 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.

24 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

25 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

26 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

27 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

28 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

29 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


Herunterladen ppt "Interfaces Definition von Interfaces Verwendung von Interfaces"

Ähnliche Präsentationen


Google-Anzeigen