Im allgemeinen, in der objekt-orientierten Programmierung, ist eine Klasse eine abstrakte Definition von (1.) Daten-Typen und (2.) Aktionen, die auf diese Daten angewendet werden können. Die letzteren sind auch als Objekt-Methoden bekannt.
Während Klassen den Objekt-Typ nur auf eine abstrakte Art beschreiben, werden die Objekte, die wirklich in einem Programm existieren, Instanzen einer bestimmten Klasse genannt.
Nehmen wir beispielsweise ein WPS Programm-Objekt: Jedes Programm ist eine Instanz der Klasse WPProgram, die von der WPS definiert wurde. Die (1.) Daten des Programm-Objekts würden, neben anderen, die mit ihm verbundene ausführbare Datei sein (z.B. "CMD.EXE"), während (2.) Methoden (die auf diese Daten angewendet werden könnten) das Starten des Programms (durch Doppelklick oder den Menüpunkt "Öffnen") oder das Ändern der Einstellungen im entsprechenden Menüpunkt wären. Obwohl man die Methoden nicht "sehen" kann, werden sie trotzdem intern immer verwendet, wenn die WPS irgendetwas tut. Wenn Sie Erfahrung mit dem Begriff haben, kann man Methoden mehr oder weniger als "Application Programmer's Interface" (API, auf deutsch etwa: Programmentwicklerschnittstelle) für ein Objekt beschreiben. Falls Sie in REXX programmieren: Jedes Mal, wenn Sie eines dieser Objekt-Einstellungs-Strings verwenden, um die Daten eines Objektes zu verändern, wenden Sie eine Methode auf ein Objekt an.
Da Methoden für jede Klasse einzeln definiert werden, hängt die Anzahl der Methoden, die auf ein Objekt angewendet werden können, von der Klasse des Objekts ab. Ich habe sie nicht gezählt, aber schon WPObject, die fundamentalste WPS-Klasse, definiert mehr als 100 Methoden.
Was die objekt-orientierte Programmierung so flexibel (und populär) macht, ist die Möglichkeit der Definition von Verwandschaften zwischen Objekten. Um dies zu verstehen, sind folgende zwei Konzepte hilfreich:
Die Desktop-Klasse ("WPDesktop" genannt) wird von der Ordner-Klasse abgeleitet. D.h. daß die Arbeitsoberfläche nur eine spezielle Sorte Ordner ist.
Grundsätzlich gesehen hat der Desktop alle Möglichkeiten eines normalen Ordners: Man kann andere Objekte hineintun, seinen Inhalt sortieren, eine Baum- oder Detail-Ansicht öffnen usw. Aber zusätzlich bietet WPDesktop einige Dinge mehr: Das Kontextmenü enthält mehr Einträge (wie "Systemabschluß" und "Systemkonfiguration"), sein Eigenschaftennotizbuch hat ein paar Reiter mehr etc. Offensichtlich besitzt die Arbeitsoberfläche Ordner-Charakteristiken, aber fügt auch neue Eigenschaften hinzu. Auf der anderen Seite sind einige Ordner- Eigenschaften nicht vorhanden: Beispielsweise kann man den aktiven Desktop nicht schließen, und er hat auch keine Titelzeile.
Die WPS stellt eine Ableitungsstruktur zur Verfügung, so daß alle Objekte logisch gruppiert und abhängig voneinander sind. Auf einer weit abstrakteren Ebene sind alle Objekt-Klassen der WPS Ableitungen einer EINZIGEN KLASSE mit Namen "WPObject", die bestimmte Funktionen bietet, die alle WPS-Objekte brauchen: hauptsächlich die Möglichkeit, Kontextmenüs, Einstellungsnotizbücher und derartige Dinge anzuzeigen. Dies ist typisch für objekt-orientierte Programmierung; solch eine globale Ursprungsklasse wird auch "Wurzel-Klasse" einer "Klassen-Hierarchie" genannt.
Auf WPObject baut die WPS einen kompletten Baum von Klassen auf, der als WPS Klassen-Hierarchie bekannt ist. Sie können unter dem Reiter "WPS-Klassen" in XFolders "Workplace Shell"-Objekt einen Blick darauf werfen.
Eine solche Klassen-Hierarchie hat den Vorteil, daß man nur die
Eigenschaften der Wurzel-Klasse ändern muß, um alle davon abgeleiteten
Klassen ebenfalls zu ändern. (Der Nachteil aus Sicht eines
Programmierers ist, daß man sehr genau die Zusammenhänge der
verschiedenen Klassen und Methoden analysieren muss, um eine solche
Klassen-Hierarchie aufzubauen. Häufig passiert es, daß die Planung
nicht ganz optimal war. Aber wenn die Hierarchie erst einmal gut
durchdacht ist -- Dank an IBM, daß es im Falle der WPS so ist --, sind
die Vorteile überragend.)
Nur als ein Beispiel möchte ich den Punkt "Hilfe" erwähnen, der im Kontextmenü von jedem Objekt vorhanden ist. Durch Auswahl von "Erweiterte Hilfe" wird die wpDisplayHelp-Methode des Objekts aufgerufen. Diese Methode wird von der WPS Wurzel-Klasse ("WPObject") bereitgestellt, so daß alle WPS-Objekte die Hilfe anzeigen können: Der OS/2-Hilfemanager wird initialisiert, das Hilfefenster wird dargestellt usw. Die anzuzeigende Hilfeseite wird aber aber von beinahe jeder WPS-Klasse geändert (dem Konzept der Polymorphie folgend). Also bringt die "Hilfe" bei einem Ordner etwas anderes zum Vorschein als bei einem Programm-Objekt.
Während die Konzepte von Vererbung und Veränderlichkeit Teil jeder objekt-orientierten Programmierumgebung (und also auch jeder objekt-orientierten Sprache, wie z.B. C++) sind, ist es der Workplace Shell sogar möglich, ihre Vorteile für verschiedene Applikationen zur Verfügung zu stellen. Die WPS besteht aus vielen DLLs, die zum Teil unabhängig voneinander sind, und auch Nicht-IBM-Programmierer können die WPS mit diesen Möglichkeiten erweitern, ohne den Quellcode der WPS zu besitzen. Mit "normalen" objekt-orientierten Sprachen wäre dies nicht möglich.
Dieses System funktioniert nur, weil die WPS IBMs eigenes System Object Model (SOM) benutzt, ein komplexes System, das objekt-orientierte Programmierschnittstellen sogar zwischen verschiedenen Codemodulen und sprachenunabhängig bietet. SOM ist so mächtig, da Klassen zur Laufzeit anstatt zur Kompilierzeit instantiiert und aufrechterhalten werden.
Hier kommt übrigens die WPS-Klassenliste ins Spiel: Wenn die WPS hochgefahren wird, erzeugt sie alle Klassen (die, in SOM, auch Objekte sind, aber das ist eine sehr komplexe Angelegenheit) und richtet die Verwandtschaften erst zu diesem Zeitpunkt ein. Nur deswegen ist es möglich, Klassen ohne IBM, die die Orginale erschaffen hat, zu modifizieren.
Meiner Meinung nach ist dies immer noch etwas, das OS/2 in der
heutigen Computer-Welt einzigartig macht. Mit der Zeit sind alle
anderen Vorteile als Alleinstellungsmerkmale verschwunden, wie
z.B. das verläßliche Multitasking (Linux ist darin auch wirklich gut),
aber die Benutzerschnittstelle wurde bisher noch von keinem
anderen Betriebssystem, das ich kenne, erreicht. Besonders nicht von
Windows 95.