Thema: Delphi Interfaces

Einzelnen Beitrag anzeigen

Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#6

Re: Interfaces

  Alt 1. Nov 2005, 20:06
Zitat:
Also ganz abstrakte Klassen? So wie in Java?
Viel mehr wie Interfaces ganz wie in Java.
Ein Interface ist nah an einer Klasse dran und Grundsätzlich sehr gut geeignet, wenn man OOP benutzen möchte. Ein Interface kapselt in der OOP eine Beschreibung von Methoden, die jedes Objekt, dass das Interface instanziert zur Verfügung stellt. Anders gesagt, du legst ein Interface Form fest, und sagst es hat die Methode berechneFläche.
Nun kannst du Objekte erzeugen (z.B. die Klassen Kreis, Quadrat und Rechteck) und sie so implementieren, dass sie das Interface Form (oder auch viele Interfaces) implementieren. Also weißt du das ein Kreis, ein Quadrat und ein Rechteck eine Methode haben, die berechneFläche heißt. Was sie sonst noch haben ist dir dann vielleicht sogar ganz egal. In diesem sehr einfachen (und stupiden) Beispiel könntest du nun alle Formen nach ihrer Fläche ordnen.

Ok, wenn die Beispiele etwas komplizierter werden, wird der Vorteil auch deutlicher. In Java gibt es zum Beispiel das Interface Comparable. Ein Objekt das Comparable implementiert ist mit einem weiteren (gleichen) Objekt ganz einfach vergleichbar über die Funktion compare, die dir ein int liefert (-1, 0 oder 1, je nachdem was größer ist). Auf dieser Basis kannst du dann eine sehr abstrakte sortierte Liste erzeugen. Die hat dann ein add, dem man ein Comparable übergibt. Sortieren tut die dann, indem sie alle Elemente über compare vergleicht. Das die vergleichbar sind folgt aus der Instanzierung von Comparable.
Hast du nun die Klassen A, B und C, die alle Comparable implementieren, so können die komplett verschieden sein, aber alle haben die Methode compare. Das heißt, deine Liste funktioniert für A's, B's und C's, die gleiche Liste ohne was zu ändern (also eine Liste kann dann nur A's sortiert speichern, oder nur B's oder nur C's, mischen ist da schon schwerer). Aber du hast halt den Vorteil, dass du nicht eine Klasse sortierte Liste für's speichern von A's, eine für B's und eine dritte für C's schreiben musst. Auch das sind noch nicht die wirklich komplexen Beispiele, aber durchaus gute (finde ich). So zahlen sich Interfaces eigentlich schnell aus.

Plug-Ins wurden schon als weiteres Beispiel genannt. Ja, die Basis bei der Idee ist, dass du ein Notify-Listener-Modell implementieren kannst. Das heißt, eine Hauptanwendung verwaltet eine Liste von Listenern (die halt ein best. Interface implementieren). Dazu gibst du dieser Anwendung eine Möglichkeit Listener einzutragen (und auszutragen).
Wenn ein bestimmtes Ereignis auftritt, dann geht die Hauptanwendung diese Liste durch und ruft bei jedem eingetragenen Listener die entsprechende Methode (mit den Parametern des Ereignisses) auf. So kannst du sehr flexibel und einfach auf ein Ereignis reagieren. Und auch sehr leicht dein Programm erweitern. Immerhin musst du kein großartiges Detail der geplanten Funktionalität kennen. Neue Funktionen entstehen (modular) in einer neuen Klasse, die halt als Listener in der Hauptanwendung eingetragen wird und dann auf das (bekannte) Ereignis beliebig reagieren kann.

Hoffe das gibt einen groben Einblick in den Nutzen.

Gruß Der Unwissende
  Mit Zitat antworten Zitat