1 / 19

Abstrakte Klassen, Interface

Abstrakte Klassen, Interface. Beispiel: Vögel. Definition von Klassen enthält Abstraktion von den konkreten Objekten. Z.B.: Klasse: Vogel Kann ein Objekt der Klasse Vogel instanziiert werden? Nein, es gibt keine Vögel als solche, es gibt nur Spatzen, Enten, Kakadus, Strauße, Pinguine u.s.w.

honora
Télécharger la présentation

Abstrakte Klassen, Interface

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Abstrakte Klassen, Interface DVG2 - 04 - Abstrakte Klassen, Interface

  2. Beispiel: Vögel • Definition von Klassen enthält Abstraktion von den konkreten Objekten. • Z.B.: Klasse: Vogel • Kann ein Objekt der Klasse Vogel instanziiert werden? • Nein, es gibt keine Vögel als solche, es gibt nur Spatzen, Enten, Kakadus, Strauße, Pinguine u.s.w. • Vogel ist eine abstrakte Klasse. Die Klasse Vogel definiert allgemeine Eigenschaften aller Vögel. Um eine spezielle Vogelart zu beschreiben, werden zusätzliche Definitionen benötigt. Z.B.: • Flugfähigkeit • Farben des Gefieders, des Schnabels, der Beine • Größe, Gewicht u.s.w. • Aber: Um eine konkrete Vogelart beschreiben zu können, müssen diese Eigenschaften definiert werden. • Von dieser konkreten Vogelart gibt es dann auch konkrete Realisierungen. DVG2 - 04 - Abstrakte Klassen, Interface

  3. Beispiel: Newton-Verfahren public class Equation { final double eps = 1e-12; public double solve(double x) { double dx; do { dx=-f(x)/fs(x); x+=dx; } while (Math.abs(dx) > eps*Math.abs(x)); return x; } } DVG2 - 04 - Abstrakte Klassen, Interface

  4. Problem: • Bei der Definition der Methode solve werden die Methoden f und fs benötigt. • f und fs sind noch nicht bekannt • Lösung: • Bei der Definition von solve ist nur wichtig, welche Schnittstellen f und fs haben, nicht aber welchen Körper. • f und fs werden als abstrakte Methoden definiert, d.h. es wird nur der Methodenkopf mit dem Schlüsselwort abstract definiert. DVG2 - 04 - Abstrakte Klassen, Interface

  5. publicabstractclass Equation { final double eps = 1e-12; public abstract double f (double x); public abstract double fs (double x); public double solve(double x) { double dx; do { dx=-f(x)/fs(x); x+=dx; } while (Math.abs(dx) > eps*Math.abs(x)); return x; } } DVG2 - 04 - Abstrakte Klassen, Interface

  6. Die Klasse Equation ist noch abstrakt. • Es hat noch keinen Sinn mit der Klasse Equation ein Problem lösen zu wollen, da f und fs, und damit das zu lösende Problem, noch nicht beschrieben sind.==> Abstrakte Klassen sind nicht instanziierbar! • Um ein konkretes Problem lösen zu können muss eine „konkrete“ Klasse abgeleitet werden, die f und fs definiert. DVG2 - 04 - Abstrakte Klassen, Interface

  7. public class ExpEquation extends Equation { final double rhs = Math.exp(Math.PI); public double f (double x) { return Math.exp(x) - rhs; } public double fs (double x) { return Math.exp(x); } } DVG2 - 04 - Abstrakte Klassen, Interface

  8. Die Klasse ExpEquation ist nicht mehr abstrakt. • Von ExpEquation kann ein Objekt instanziiert werden. • Von diesem Objekt kann die Methode solve aufgerufen werden und damit die Gleichung gelöst werden. public class Newton01 { public static void main (String[]args) { ExpEquation ex = new ExpEquation(); System.out.println("Loesung = "+ex.solve(15.0)); } } DVG2 - 04 - Abstrakte Klassen, Interface

  9. Vorteile abstrakter Klassen • Teile der Klassendefinition können von anderen Teilen getrennt und somit vor dem Anwender verborgen werden. • Z.B.: enthält die Klasse Equation unser ganzes know-how darüber, wie nichtlineare Gleichungen gelöst werden können. Dieses können wir vor dem Anwender verbergen. Er fügt nur die fehlenden Teile hinzu und kann sein konkretes Problem lösen. • Es bleibt die Überprüfung aller Schnittstellen durch das System garantiert. • Es sind keine fehlerhaften Aufrufe oder Parameterlisten möglich, da die Schnittstellen in der abstrakten Klasse definiert sind und in der abgeleiteten Klasse nicht verändert werden können (Überladung). DVG2 - 04 - Abstrakte Klassen, Interface

  10. mehrfache Vererbung • Mehrfache Vererbung ist die Ableitung einer Klassen von mehreren anderen Klassen. • farbigerPunkt sollte eine Ableitung sowohl der Klasse Punkt als auch der Klasse Color sein.class farbigerPunkt extends Punkt,Color • Problem: • Elternklassen könnten die gleichen Methoden (Name, Parameterliste) definieren und diese verschieden implementieren. Welche Methode sollte dann verwendet werden?==> mehrfache Vererbung ist in JAVA nicht erlaubt • Interface • abstrakte Klasse • ausschließlich abstrakte Methoden • statische Konstanten DVG2 - 04 - Abstrakte Klassen, Interface

  11. Interfacedefinition • Interfacedefinition besteht aus • Interfacekopf • Name des Interfaces • Modifizierer (public) • Ableitung von anderen Interfaces (extends) • Interfacerumpf • statische Attributealle Attribute bekommen automatisch die Modifiziererfinal public static • abstrakte Methodenalle Methoden bekommen automatisch die Modifizierer abstract public DVG2 - 04 - Abstrakte Klassen, Interface

  12. Interfacekopf [public] interface Bezeichner [extends Interface ,...,Interface] implizit wird abstract angewendet • Interface können von mehreren anderen Interfacen erben.Kein Problem, da keine Implementierungen enthalten sind, sondern nur Schnittstellen. DVG2 - 04 - Abstrakte Klassen, Interface

  13. Attribute Typ [ []...[] ] name = Initialisierer ; • Implizit werden public static final angewendet==> Attribute sind echte Konstanten • Attribute müssen immer initialisiert werden. DVG2 - 04 - Abstrakte Klassen, Interface

  14. Methoden Typ Name ( [formaleParameterliste] ) [ []...[] ] [throws Ausnahme,...,Ausnahme] ; • Methoden sind immer public abstract==> keine Implementation DVG2 - 04 - Abstrakte Klassen, Interface

  15. Newtonverfahren mit Interface public interface Function { double f(double x); double fs(double x); } DVG2 - 04 - Abstrakte Klassen, Interface

  16. public class Equation { final double eps = 1e-12; public double solve(double x, Function func) { double dx; do { dx=-func.f(x)/func.fs(x); x+=dx; } while (Math.abs(dx) > eps*Math.abs(x)); return x; } } DVG2 - 04 - Abstrakte Klassen, Interface

  17. public class ExpEquation implements Function { final double rhs = Math.exp(Math.PI); public double f (double x) { return Math.exp(x) - rhs; } public double fs (double x) { return Math.exp(x); } } DVG2 - 04 - Abstrakte Klassen, Interface

  18. public class Newton01 { public static void main (String[]args) { Equation eq = new Equation(); ExpEquation ex = new ExpEquation(); System.out.println("Loesung = "+eq.solve(15.0, ex)); } } DVG2 - 04 - Abstrakte Klassen, Interface

  19. Vorteile von Interfaces • Interface trennen die Definition der Schnittstellen von der Implementation der Algorithmen und Verfahren. • Änderungen der Implementierung haben daher keine Auswirkung auf andere Klassen. • Mehrfachvererbung von Interfacen ist möglich. DVG2 - 04 - Abstrakte Klassen, Interface

More Related