003
01.03.2009, 05:13 Uhr
Lensflare
|
also ein interface ist ähnlich einer Klasse. Es kann von anderen Klassen implementiert werden (vergleichbar mit Ableitung) und es enthält ausschließlich abstrakte Methoden (es steht also nicht fest, was diese Methoden machen).
Um mal zu veranschaulichen, wozu sie gut sind, hier mal ein Beispiel:
Angenommen du hast eine Collection (zB Array), die Instanzen von Klassen enthält. Es sind instanzen unterschiedlicher Klassen, aber alle haben eine Gemeinsamkeit: Sie können alle in float konvertiert werden.
Diese Gemeinsamkeit beschreibst du, in dem du dafür ein Interface schreibst:
C++: |
interface ConvertableToFloat { float convertToFloat(); }
|
Das Interface weiss nicht was die Methode convertToFloat später tun wird. Die umwandlung zu float kann ja von Klasse zu Klasse unterschiedlich aussehen.
Hier einige Klassen, die dieses Interface implementieren:
C++: |
class Bruch implements ConvertableToFloat { public float zaehler; public float nenner; public float convertToFloat() { return zaehler/nenner; } }
class Vektor2D implements ConvertableToFloat { public float x; public float y;
public float convertToFloat() { return wurzel(x*x + y*y); //Die Konvertierung des Vektors in float soll seine Länge zurückgeben. } }
|
Nun das Array:
C++: |
ConvertableToFloat[] a = new ConvertableToFloat[3]; a[0] = new Bruch(); a[1] = new Bruch(); a[2] = new Vektor2D();
|
Es stellt eine Sammlung von Instanzen dar, deren Klassen dieses Interface implementieren. Man kann nun das Array durchgehen und von jeder Klasseninstanz die Methode convertToFloat() aufrufen. Egal was für Klassen drin sind, es ist sichergestellt, dass sie sich mit der Methode convertToFloat() in float umwandeln können.
Ein Interface (deutsch: Schnittstelle) sagt also nur was eine Klasse nach außen für den Zugriff bereistellen muss. In unserem Fall ist es die Möglichkeit sich als float darzustellen.
Was dein Projekt angeht, ich weiss nicht ob dieses Interface von der Library intern verwendet wird und es da schon Klassen gibt, die es implementieren, oder ob es so gedacht ist, dass man es selbst in den eigenen Klassen implementiert.
Gibt es da keine Beispiele oder Tutorials für diese Lib? -- Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten. (Emerson Pugh Trost) Dieser Post wurde am 01.03.2009 um 05:23 Uhr von Lensflare editiert. |