Sonntag, 13. Januar 2013

Ist das Liskovsche Substitutionsprinzip ein echtes "Prinzip"?

In meinem Blogeintrag Wie erkenne ich ein Prinzip der Softwaretechnik? habe ich einige Kriterien zusammengetragen, die es ermöglichen sollen, echte "Prinzipien" der Softwaretechnik von anderen Handlungsanweisungen oder Feststellungen zu unterscheiden. In meinem letzten Blogeintrag über das Liskovsche Substitutionsprinzip habe ich bereits die Einordnung als Prinzip in Frage gestellt. Dies umso mehr, als die Autorinnen ihr "Prinzip" selbst lediglich als "Subtype Requirement" bezeichnet haben und es ihnen mehr um die theoretische Fundierung der Bildung von Subtypen ging als um das Aufstellen von prinzipienartigen Handlungsanweisungen.

Gleichen wir also die festgelegten Kriterien mit den Eigenschaften des Liskovschen Substitutionsprinzips ab:


Ein Prinzip zielt darauf hin, angewendet zu werden (es ist kein reines Konzept).
Nein. Das LSP kommt einem Konzept insofern näher, also es Liskov und Wing eher um die Eigenschaften von Subtypen geht als um das Aufstellen von Handlungsanweisungen. Die Vorstellung der Autorinnen geht dahin, eine Erfüllung der formulierten Eigenschaft mit den syntaktischen Mitteln der Programmiersprache zu ermöglichen. Die Anwendung von „Design by Contract“ macht es vollends überflüssig von einem „Prinzip“ zu sprechen.
Die Anwendung eines Prinzips führt zu strukturell anderen Lösungen als seine Missachtung.
Ja. Allerdings stellt das LSP keine positive Handlungsanweisung dar, sondern lediglich eine Einschränkung.
Die Anwendung eines Prinzips dient einer oder mehreren Qualitätseigenschaften.
Ja. Das LSP handelt von der Semantik realisierter Klassen und fördert die semantische Korrektheit von Programmen.
Ein Prinzip ist überprüfbar und hat sich nach Möglichkeit bereits häufig bewährt.
Ja.
Ein Prinzip hat seine Grundlage in der Nichttrivialität der Softwaretechnik.
Ja. Das LSP behandelt Probleme, die sich aus grundlegenden Konzepten der objektorientierten Programmierung ergeben. Die objektorientierte Programmierung kann ihrerseits als Versuch angesehen werden, die Abstraktheit und Komplexität von Software besser zu beherrschen.
Ein Prinzip ist unabhängig von konkreten Technologien und Systemen.
Nein. Das LSP ist eingeschränkt auf einen Teilaspekt der objektorientierten Programmierung.
Ein Prinzip ist kein Qualitätsmerkmal, Entwurfsmuster oder Standard.
Ja.
Ein Prinzip ist keine Entwicklungsphilosophie und kein Programmierparadigma.
Ja.
Ein Prinzip ist keine Tätigkeit.
Ja.

Das LSP kommt also insbesondere einem Konzept näher als einem Prinzip, und es ist eingeschränkt auf objektorientierte Technologien. Die heutige Bezeichnung und Einordung als Prinzip dürfte primär mit der Vermarktung der S.O.L.I.D.-Prinzipien durch Robert C. Martin zusammenhängen.