Der Stellenwert von Prinzipien bei Bertrand Meyer
Ich habe mir einmal das Vergnügen gemacht, das Vorkommen des Wortes "principle" im letztgenannten Buch zu zählen, und wenn ich mich nicht verzählt habe, dass kommt dieses Wort insgesamt 556 Mal auf den fast 1300 Seiten vor. Das Buch trägt eine Fülle von Definitionen, Konzepten, Regeln und Prinzipien zur Objektorientierung zusammen, beginnend mit den elementaren Grundlagen zu Objekten und Klassen bis hin zu fortgeschrittenen Fragen des Entwurfsprozesses. Bei einem Autor, der Prinzipien in seinem Denken über Software einen so großen Stellenwert einräumt, dürfte es interessant sein zu verfolgen, wie er solche Prinzipien überhaupt ableitet. Unter den abgeleiteten Prinzipien findet sich dabei auch das Open-Closed Prinzip, das ich bereits in einem früheren Blogeintrag behandelt habe.Ein deduktiver Weg zu fünf Modulprinzipien
Prinzipien scheinen oft aus Erfahrungen entstehen. Sie erscheinen wie auskristallisierte, zu Weisheit gewordene Best Practices. Umso interessanter ist es da, wenn Bertrand Meyer seine insgesamt fünf Modulprinzipien deduktiv ableitet:- Er stellt zunächst fünf Kriterien auf, die eine Design-Methode nach seiner Ansicht erfüllen muss, um gute Modulbildung zu fördern.
- Zerlegbarkeit: Die Methode ermöglicht überhaupt die Zerlegung von Software in modulare Einheiten.
- Zusammensetzbarkeit: Die Methode fördert die Konstruktion von Software-Elementen, die möglichst frei miteinander kombiniert werden können.
- Verständlichkeit: Die Methode fördert die Verständlichkeit einzelner Module weitgehend ohne Kenntnis sonstiger Software-Elemente des betreffenden Systems.
- Kontinuität: Die Methode führt dazu, dass eine kleine Änderung der Anforderungen nur eine (möglichst auf ein Modul) begrenzte Änderung des Software-Systems bewirkt.
- Schutz: Die Methode fördert die Abkapselung von Ausnahmebedingungen zur Laufzeit, so dass von diesen Bedingungen möglichst nur ein Modul oder schlimmstenfalls einige Nachbarn des Moduls betroffen sind.
- Aus diesen Kriterien leitet Meyer fünf Regeln ab, die aus seiner Sicht ein modular aufgebautes Software-System erfüllen muss.
- Direktes Mapping: Die Struktur eines Problems (der Domäne) sollte sich möglichst leicht in der Struktur der Software wiederfinden lassen. Diese von Meyer so bezeichnete "Regel" tritt bei anderen Autoren auch gelegentlich als vollwertiges Prinzip auf, nämlich als das "Prinzip der minimalen intellektuellen Distanz". Die Regel folgt aus den Kriterien der Kontinuität und der Zerlegbarkeit.
- Wenige Interfaces: Ein Modul sollte mit so wenigen anderen Modulen wie möglich kommunizieren. Folgt aus den Kriterien Kontinuität und Schutz.
- Schlanke Interfaces: Wenn Module kommunizieren, sollten sie so wenig Information wie möglich austauschen. Folgt aus den Kriterien Kontinuität und Schutz.
- Explizite Interfaces: Wenn Module A und B kommunizieren, sollte dies aus dem Programmtext von A oder B oder beiden hervorgehen. Folgt aus den Kriterien Zerlegbarkeit, Zusammensetzbarkeit, Kontinuität und Verständlichkeit.
- Information Hiding: Folgt aus dem Kontinuitäts-Kriterium.
- Aus den beschriebenen Kriterien und Regeln leitet er schließlich fünf "principles of software construction" ab, die alle (ausgenommen OCP, da bereits erfolgt) in späteren Blog-Einträgen noch ausführlich zu behandeln sein werden.
- Linguistic Modular Units Prinzip: Module müssen mit syntaktischen Einheiten der verwendeten Sprache korrespondieren. Abgeleitet aus den Kriterien Kontinuität, Zerlegbarkeit, Zusammensetzbarkeit und Schutz sowie aus der Regel Direct Mapping.
- Self-Documentation Prinzip: Der Entwerfer eines Moduls sollte danach streben, die gesamte Information über das Modul innerhalb des Moduls selbst auszudrücken. Abgeleitet aus den Kriterien Verständlichkeit und Kontinuität.
- Uniform Access Prinzip: Alle Dienste eines Moduls sollten in einer gleichartigen Notation angeboten werden, die nicht preisgibt, ob es sich um Datenzugriffe oder Berechnungen handelt. Abgleitet aus dem Kontinuitäts-Kriterium und der Regel Information Hiding.
- Open-Closed Prinzip: Module sollten offen (für Erweiterungen) und geschlossen (für Änderungen) sein. Keine expliziten Angaben zur Ableitung dieses Prinzips (aus Kriterien oder Regeln) durch Meyer.
- Single Choice Prinzip: Immer wenn ein Software-System eine Anzahl von Alternativen anbietet, sollte nur genau ein Modul die vollständige Menge der Wahlmöglichkeiten kennen. Abgeleitet aus der Information Hiding Regel und dem Open-Closed Prinzip.
Bewertung
Wie ist Meyers Vorgehensweise bei der Ableitung von Prinzipien zu bewerten? Es fallen zunächst einige Mängel auf:- Es ist nicht unmittelbar nachvollziehbar, warum einige Aussagen als Kriterium, einige als Regel und einige als Prinzip bezeichnet werden.
- Für das Open-Closed Prinzip werden weder Kriterien noch Regeln zur Ableitung angegeben.
- Die Interface-bezogenen Regeln dienen nicht zur Ableitung irgendeines Prinzips.
- Es ist auch nicht im Einzelnen nachvollziehbar, warum sich Meyer für diese und genau diese Kriterien, Regeln und Prinzipien entscheidet. Die Aufstellung und Ableitung wirkt insgesamt zwar plausibel, ihr haftet jedoch auch etwas Willkürliches an.
Quellen
Objektorientierte Softwareentwicklung, Bertrand Meyer (1988)Objekt-oriented Software Construction 2nd Edition, Bertrand Meyer (1998)