Um es gleich vorweg zu sagen, objektorientierte Programmierung in LotusScript
ist kein Allheilmittel. Man kann auch mit Hilfe von selbst geschriebenen
Klassen schlecht und unstrukturiert programmieren. So wie man auch mit
der Formelsprache alleine gute Anwendungen realisieren kann. Am Ende des
Tages zählt eigentlich nur eines. Der Anwender muss mit der entwickelten
Anwendung seine Aufgaben gut und effizient erledigen können.
Doch gibt es aus meiner Sicht eine Menge
guter Gründe, die für die objektorientierte Programmierung in LotusScript
sprechen.
Höhere Abstraktionsebene
Der für mich wichtigste Gründ ist die
Konzentration auf das Wesentliche. Durch geschickten Aufbau einer Klassenhierarchie
entwickelt man auf einer höheren Abstraktionsebene. Egal welche Publikation
man zu Softwareentwicklung zu Rate zieht, in einem Punkt sind sie sich
alle einig. Der Entwickler muss den Anwendungsfall verstanden haben und
dann in Software umsetzen. In der objektorientierten Programmierung werden
die Elemente aus der Fachwelt als Objekte mit Eigenschaften und Methoden
realisiert. Statt sich mit dem Setzen von Werten auf Feldebene zu beschäftigen,
liegt der Fokus mehr auf dem Umgang mit den Elementen der Fachwelt. Diese
höhere Abstraktionsebene hilft, sich den Blick auf das Wesentliche zu bewahren.
Umgang mit Komplexität
Die Welt, in der wir leben, ist komplex.
Objektorientierte Programmierung ist eine Möglichkeit, mit dieser Komplexität
umzugehen. Die Kernidee ist dabei, die einzelnen Bestandteile so aufzuteilen,
dass kleine beherrschbare Teile entstehen. (divide et impera / Teile und
herrsche)
Ich will das an einem Beispiel verdeutlichen.
In einer Anwendung für die Verwaltung von Geschäftsreisen muss ein Reiseantrag
zur Genehmigung eingereicht werden. Die Methode "Antrag.ZurGenehmigungEinreichen"
beinhaltet die Überprüfung auf Vollständigkeit der Angaben, die Benachrichtigung
des Vorgesetzten, das Eintragen der Reise in den Kalender, das Setzen des
Status und das Schreiben der Dokumenthistorie. Anstelle eines langen monolithischen
Codeblocks ruft die Methode weitere Methoden auf: "Antrag.IstVollständig",
"Antrag.VorgesetztenBenachrichtigen", "Antrag.InKalenderEintragen",
"Antrag.StatusSetzen" und "Antrag.HistorieSchreiben".
(Wobei unsere Klassen- und Methodennamen in der Realität englisch sind.)
Lesbarkeit des Codes
Auf diese Weise wird zugleich auch die
Lesbarkeit des Codes verbessert, weil man nicht mehr über mehrere Bildschirmseiten
erraten muss, was der Code eigentlich machen soll. Kurze Codeblöcke sind
nun einmal einfacher zu verstehen als längere. Was natürlich unmittelbar
auch der Wartbarkeit zu Gute kommt.
Wiederverwendbarkeit
Die in dem Beispiel beschriebenen Funktionalitäten
wie Generieren einer E-Mail und Erzeugen eines Kalendereintrages sind nicht
nur in der einen Anwendung interessant. Womit wir zu einem weiteren Vorteil
der Objektorientierung kommen: der Wiederverwendbarkeit. Zweifelsohne kann
man auch eine generische Funktion zum Generieren einer E-Mail schreiben.
Allerdings hat eine Funktion nicht die Flexibilität einer eigenen Klasse.
Es ist einfacher, bestimmte Eigenschaften der E-Mail wie z.B. die Priorität
oder das Senden mit Empfangsbestätigung über die Eigenschaften des E-Mail-Objektes
zu steuern. Bei einer Funktion gibt es nur die Möglichkeit für alle Eventualitäten
einen Parameter vorzusehen. Was ab einer gewissen Anzahl der Parameter
die Fehleranfälligkeit stark erhöht, weil man sich nicht mehr erinnern
kann, ob das fünfte "True" in den Parametern nun die Empfangsbestätigung
oder die Verschlüsselung aktiviert.
Erweiterbarkeit und Flexibilität
Ein weiterer Vorteil der Klassen gegenüber
prozeduraler Programmierung ist die Erweiterbarkeit und die damit einhergehende
Flexibilität. Wird bei einer Funktion ein weiterer Parameter aufgenommen,
so muss jede Zeile Code geändert werden, die diese Funktion verwendet.
Wird eine Klasse um eine Eigenschaft oder Methode erweitert, so funktioniert
bestehender Code, der diese Klasse bisher verwendet, weiterhin ohne Probleme.
(Okay, bisweilen kommt man um ein "Recompile All LotusScript"
nicht herum.)
Darüber hinaus bietet die Vererbung
eine Möglichkeit erweiterte Anwendungsfälle in einer Art zu implementieren,
dass ausgehend von einer Basisklasse sehr gezielt nur die speziellen Aspekte
der Erweiterung angepasst werden müssen. Die Basisklasse steht weiterhin
für die einfachen Fälle zur Verfügung und die abgeleitete Klasse für die
Spezialfälle.
Vermeidung von Fehlern
Das als "Information Hiding"
bezeichnete Prinzip in der objektorientierten Programmierung nur die notwendigen
Methoden und Eigenschaften nach außen hin sichtbar zu machen, trägt dazu
bei, Fehler zu vermeiden. Die Ursache dazu liegt zum Einen darin, dass
interne Variablen nicht mehr von außerhalb der Klasse geändert werden können,
es sein denn, durch die dafür vorgesehen Methoden. Ein weiterer Grund besteht
darin, dass der interne Aufbau der Klasse geändert werden kann, ohne das
Seiteneffekte auftreten können. Der Anwendungsentwickler muss lediglich
darauf achten, dass die Klasse sich nach außen verhält wie zuvor.
Beschleunigung der Entwicklung
So richtig kommen die Vorteile der objektorientierten
Programmierung erst zur Geltung, wenn man nicht nur vereinzelt fachspezifische
Klassen schreibt, sondern wenn man sich mit der Zeit ein Framework aufbaut,
dass den Anwendungsentwickler von der Last der immer wiederkehrenden Aufgaben
befreit. Damit wird die Entwicklung der einzelnen Anwendung stark beschleunigt.
Alle Anwendungen, die wir bei assono entwickeln, haben solch ein gemeinsames
Framework. Das heißt, wir können uns bei einer neue Anwendung auf die fachliche
Aspekte konzentrieren. Solche simplen Dinge wie Eingabevalidierung, Dokumentenhistorie,
Aktualisierung von abhängigen Dokumenten sind jeweils nur eine Zeile in
unserer Fachklasse.
Aufbau von Erfahrungen, die in anderen
Programmierumgebungen von Nutzen sind
Ein ebenfalls nicht zu unterschätzender
Aspekt bei der Frage, warum man jetzt mit objektorientierter Programmierung
in LotusScript anfangen sollte, ist das Sammeln von Erfahrungen. Denn bei
allen anderen Programmiersprachen stellt sich die Frage, ob man OO programmiert
oder nicht, nicht mehr. Ob das Java, .Net oder C++ ist, alle sind objektorientiert.
Erfahrungen, die man jetzt in LotusScript sammelt, helfen später beim Umstieg
auf andere Programmiersprachen. Auch wenn man die Welt von Lotus Notes
nicht verlassen möchte, spätestens beim Schreiben von Plugins für Notes
8 kommt man um Java und Objektorientierung nicht herum.
Ohne jetzt pathetisch klingen zu wollen,
so ist Objektorientierung mehr als das Lernen einer neuen Syntax. Objektorientierung
verändert den Blick auf die Anwendungsentwicklung. Es ist ein mehr ganzheitlicher
Ansatz, der sowohl Daten als auch Funktionen der Fachwelt gleichermaßen
im Auge behält.