Richard: Extend, Implement, Abstract

Beitrag lesen

Hallo Michilee,

Kontekt sei ein Interface

Entwurfsmuster sind auf objektorientierte Programmierung gemünzt, was mehr einschließt als nur die Sprache Java. Es ist auch vorstellbar, Entwurfsmuster in Sprachen zu realisieren, die das Konzept „Interface” gar nicht kennen. Dementsprechend schreibt ein Entwurfsmuster grundsätzlich nicht vor, welche Klasse abstrakt oder gar nur ein Interface ist. Prinzipiell könnten auch alle Interfaces normale Klassen sein.

Die Klasse Kontext enthält allerdings ein Strategieobjekt, auf dem sie arbeitet (d.h. auf dem sie die Methode Algorithmus() aufruft). Dieser Sachverhalt ist so in Java nicht abbildbar, wenn Kontext keine „normale” Klasse ist. Kontext ist also bis auf weiteres kein Interface.

Strategie sei eine Klasse "(Die Wiki fängt auch so an: Die Klasse Strategie definiert ....)"

Was daran liegt, dass Entwurfsmuster nicht Java-spezifisch sind (siehe oben). „Die Klasse definiert eine Schnittstelle” heißt auf Java-Deutsch soviel wie: „Die Klasse ist eine Schnittstelle”.

KonkreteKlasseA und B seien nur Imports.

Imports haben mit dieser Thematik sowieso nichts zu tun. KonkreteStrategieA und KonkreteStrategieB sind Implementierungen des Interfaces Strategie (oder, allgemeiner gesprochen, irgendeine Form von Ableitungen der Klasse Strategie).

Man könne bei einem Interface auch viel mehr machen, anstatt nur Methodennamen ohne Rumpf, um das Interface in einer anderen Klasse zu implementieren.

Ohne zu wissen, was mit „viel mehr machen” gemeint ist, kann ich dir versichern: nein, kann man nicht. Du kannst gerne versuchen, dem Compiler ein Interface zu überreichen, das mehr als unimplementierte Methodenrümpfe enthält; er wird es dir mit Ablehnung strafen. Interfaces sind in dieser Hinsicht ziemlich langweilig. Erst wenn man sie implementiert, wird's spannend.

:(

Wir haben innerhalb dieses Threads bereits ausführlich genug erörtert, wann welches Objekt welche(n) Typ(en) hat, um dir zu ermöglichen, was mit „konkrete Implementierung eines Interfaces” gemeint ist. (Erinnere dich an die Code-Beispiel zum Interface Serializable)

Grüße
Richard