Montag, 21. Januar 2013

Bertrand Meyers Ableitung von Modul-Prinzipien

Wer im Rahmen eines Informatik-Studiums nicht mit Thesen von Bertrand Meyer konfrontiert wurde, dem dürfte es gelungen sein, einen großen Bogen um das Thema Objektorientierung gemacht zu haben. Sein erstes umfassendes Buch zu diesem Thema, "Objektorientierte Softwareentwicklung", stammt aus dem Jahr 1988 und füllt mit seinen leuchtend roten, abgegriffenen Einbänden bis heute mitunter meterweise die Informatik-Regale der Universitätsbibliotheken. Nocheinmal mehr als doppelt so umfangreich, zumindest in Seiten, ist das Nachfolgewerk "Objekt-oriented Software Construction 2nd Edition" aus dem Jahr 1998, das bislang nicht ins Deutsche übertragen wurde und daher im deutschen Sprachraum bislang weniger verbreitet ist.

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.
Positiv ist der Versuch einer Strukturierung: Missachten wir einmal die terminologische Unterscheidung von Kriterien, Regeln und Prinzipien, so leitet Meyer aus übergeordneten Prinzipien weitere Prinzipien ab. Der eigentliche Wert seiner Darstellung liegt in dem Versuch einer systematischen Ableitung von Prinzipien aus grundlegenden Moduleigenschaften. Eine umfassende Darstellung von Prinzipien der Softwaretechnologie wird in gewissem Sinne eine erweiterte Fassung dieses Versuchs sein.

Quellen

Objektorientierte Softwareentwicklung, Bertrand Meyer (1988)
Objekt-oriented Software Construction 2nd Edition, Bertrand Meyer (1998)