Sonntag, 27. Januar 2013

Das Interface Segregation Prinzip

Als vorletztes der S.O.L.I.D.-Prinzipien folgt hier das Interface Segregation Prinzip.

Name, Kurzform Interface Segregation Prinzip
Synonyme
Schnittstellenaufteilungsprinzip,
Interface-Aufteilungsprinzip,
Prinzip der Abtrennung von Schnittstellen,
ISP
Beschreibung Software-Elemente („Clients“) sollten nicht von Schnittstellen abhängen, die sie nicht benötigen.
Erläuterung
Das ISP ist ein leicht nachvollziehbares, an eine Tautologie grenzendes Prinzip, scheint es doch kaum vorstellbar, dass man je Abhängigkeiten in Kauf nehmen möchte, die gar nicht erforderlich sind.
Die überflüssige Abhängigkeit muss allerdings nicht immer offensichtlich sein: Sie kann sich über mehrere Ebenen einer Typhierarchie ergeben und erst im Lauf der Zeit entstehen.
Die von Robert C. Martin verwendeten Begriffe Interface Pollution und Fat Interface machen das Prinzip anschaulich.
Folgt man dem ISP konsequent, so mündet dies in einem Interface-Entwurf, der auf den jeweiligen Rollen der Clients basiert. In [Steimann 2001] wird dieser Ansatz zugespitzt, indem die beiden Konzepte „Rolle“ und „Interface“ gleichgesetzt werden.
Beispiele
  • Die Implementierung von Leermethoden, die aus rein syntaktischen Gründen definiert werden müssen, ist ein sicheres Zeichen für einen Verstoß gegen das ISP.
  • Das Interface java.util.Iterator fordert die Implementierung der Methode remove(), obwohl es nicht plausibel erscheint, dass jede Iterator-Klasse diese Methode tatsächlich benötigt.
Historie
  • Zunächst veröffentlicht als Blog-Artikel von Robert C. Martin.
  • Populär geworden durch das Buch [Martin 2002]
Art des Prinzips
  • Grundlegende Einteilung: Produktprinzip.
  • Technologiebezug: Übergreifend.
  • Entwurfsgüte: Strukturprinzip.
  • Handlungsbezug: Erleichterung von Änderung, Wiederverwendung und Verstehen.
  • Kognitionsbezug: Komplexitätsreduktion.
(Siehe Kategorisierung der Prinzipien.)
Grad der formalen Spezifikation
Hoch.
  • Elementare Verstöße wie Leermethoden oder Methoden, die ausschließlich Exceptions werfen, können rein syntaktisch erkannt werden.
  • Es stehen Refactoring-Werkzeuge wie „Extract Interface“ zur Verfügung, die bei der Aufteilung von Schnittstellen behilflich sein können.
Vorteile
Liefert für Interfaces eine Operationalisierung des Prinzips der hohen Kohäsion.
Nachteile -
Übergeordnete Prinzipien
  • Prinzip der hohen Kohäsion
  • Prinzip der losen Koppelung
  • Forderung nach schlanken Interfaces
  • Prinzip der minimalen Verwunderung
Abgleitete Prinzipien -
Qualitätsmerkmale Einfachheit (+), Änderbarkeit (+), Korrektheit (+)

Quellen:

Robert C. Martins Blog Principles of OOD
[Steimann 2001] – Role = Interface: A Merger of Concepts, Friedrich Steimann, Journal of Objekt-Oriented Programming (2001)
[Martin 2002] – Agile Software Development. Principles, Patterns, and Practices, Robert C. Martin (2002)