Ein wichtiger Grundsatz der Software Entwicklung ist die Programmierung gegen ein Interface. Ohne in die Tiefe zu gehen heißt das, dass man nie eine spezifische Implementation einer Klasse als Grundlage für seinen Code verwendet. An Stelle dessen verwendet man ein Interface und versteckt auf diese Weise die eigentliche Implementierung. Hintergrund ist das einfache Austauschen der Implementierung gegen eine andere Klasse. Ein zweiter Grundsatz, welcher sich aus dem obigen ableitet, ist das verstecken der Implementierung. Der Anwender in Form eines Programmierers soll sich keine Gedanken darüber machen, wie eine Klasse ihre Arbeit erfüllt, er soll nur Wissen, dass sie es tut. Oder mit anderen Worten: Er muss nur ihre Schnittstelle, sprich API, sprich ihr Interface kennen. Dieser zweite Grundsatz impliziert aber noch mehr. Er sagt nämlich auch, der Anwender einer bestehenden Klasse soll nicht wissen, wie die Klasse oder besser das Objekt diesen Grundsatz umsetzt. Das heißt den Programmierer muss es eigentlich nicht interessieren, ob er gegen ein Interface oder eine konkrete Klasse programmiert, solang er und das Objekt die öffentliche Schnittstelle einhalten. Diese zweite Implikation wird aber leider von vielen verletzt. Ich selbst habe lange Zeit zu dieser Gruppe gehört. Und zwar gibt es einen Quasi-Standard bei vielen Software Entwicklern den Namen eines Interface mit einem I zu beginnen. Man erhält dann beispielsweise ein Interface IEvent und die Implementierungen KeyBoardEvent, welche von IEvent ableitet. Ursprung für diese Konvention ist die ungarische Notation, welche lange Zeit Anwendung fand, inzwischen aber eher als verpönt gilt. Besonders bei Windows Entwicklern ist sie allerdings nach wie vor beliebt und zumindest das I für Interface Teil des offiziellen Code-Styles.  Dadurch ist die Verwendung des Präfix I auch in anderen Sprachen häufig anzutreffen. Neben dem Verletzen des zweiten Grundsatz gibt es noch weitere praktische Gründe, die gegen die Verwendung eines Präfx für Interface sprechen.

  1. Nicht alles was mit I beginnt, muss auch ein Interface sein. Ist die “Schnittstelle” ID3Info  ein Interface oder eine konkrete Klasse?
  2. Entgegen dem ersten Grundsatz und teils in (unbewusster) Favorisierung des KISS-Prinzips werden Klassen zunächst ohne Interface entworfen. Ein Nachteil von zusätzlichen Interfacen ist immer die größere Anzahl an Klassen-/Interface-Dateien und solange es nicht mehrere Implementierungen gibt, spricht auch nichts dagegen. Aber was wenn sich diese Annahme später als falsch herausstellt? Im Fall der Präfix-Konvention müsste man jetzt ein Interface erstellen und sämtliche Objekte gegen das Interface austauschen (und nicht nur die konkrete Objekt Erzeugung). Ohne Präfix wird einfach der alte Klassenname zum Namen des neuen Interface und die Implementierung erhält einen konkreten Namen, der die Art der Implementierung widerspiegelt. Das hat auch zur Folge das ein dritter Grundsatz der Software Entwicklung eingehalten wird. Und zwar besagt er, dass in einem guten Design bestehender Code nicht mehr angefasst werden muss.

Eine noch detailliertere Erklärung dieser Thematik findet sich hinter folgenden Links:

Advertisements