Verfahren zur Adaption einer objektorieπtierten Applikation
Die Erfindung betrifft ein Verfahren zur Adaption einer objektorientierten Applikation, so daß diese auf mehrere Betriebssystemprozesse verteilbar ist.
Objektorientierte Applikationen sind mittels einer objekt¬ orientierten Programmierung realisierbar. Ein objektorien¬ tiertes System besteht nicht nur aus Funktionen oder Pro¬ zeduren, welche einander aufrufen, etwa bei einer Program¬ mierung mit den Programmiersprachen Fortran, Pascal, C, sondern es sind auch Objekte vorgesehen, die durch den
Austausch von Nachrichten miteinander kommunizieren. Ein Beispiel für eine objektorientierte Programmiersprache ist die Programmiersprache C++, welche durch eine Erweiterung der weit verbreiteten Programmiersprache C entstanden ist. In der Pro- grammiersprache C++ werden Klassen von Objekten durch Typde¬ finitionen vereinbart. Die Objekte gelten als Variablen eines Klassentyps und werden als Instanzen, der Klasse bezeichnet. Jedes Objekt hat Instanzvariable als einen Satz von Daten. Auf die Instanzvariablen kann nur mittels bestimmter Funk- tionen zugegriffen werden, die in der jeweiligen Klassendefi¬ nition festgelegt werden. Diese der Klasse zugeordneten Zu¬ griffsfunktionen heißen Methoden der Klasse. In der Program¬ miersprache C++ ist das Senden einer Nachricht an ein Objekt gleichbedeutend mit dem Aufruf einer Methode für dieses Objket. Die Programmiersprache C++ unterstützt die Vererbung von Klas¬ sen. Die Instanzvariablen uno die Methoden einer Klasse können von einer abgeleiteten Klasse durch Vererbung übernommen wer¬ den. Es können Methoden der Basisklasse mit dem Schlüsselwort Virtual deklariert werden, sodaß diese Methoden in einer abge- leiteten KLasse redefinierbar sind. Objekte sind durch Zeiger
referenzierbar, sowie dynamisch erzeugbar, sodaß erst zur Lauf¬ zeit entscheidbar ist, welche Implementierung einer Methode tatsächlich ausgeführt wird. In der Programmiersprache C++ sind Applikationen auf genau einen Prozeß im Sinne des Be- triebssystems begrenzt. Bei einer realen Anwendung kann es zu Problemen führen, wenn die Applikation eine bestimmte Größe überschreitet, da Betriebssystemprozesse nur eine begrenzte Größe annehmen können. Somit ist ohne zusätzliche Maßnahmen auch die Größe einer C++ Applikatation begrenzt. Aus einigen Anwendungsbereichen, insbesondere der Automatisierungstechnik sowie der Telekommunikation, bestehen Anforderungen, welche eine Aufteilung der Applikation auf mehrere unabhängige, ge¬ trennt ausführbare und ladbare Betriebssystemprozesse ver¬ langen. Eine derartige Aufteilung auf mehrere Betriebs- Systemprozesse, also keine light-weight Prozesse, ist mit den Sprachmitteln von C++ alleine nicht formulierbar. Eine derar¬ tige Aufteilung einer Applikation auf mehrere Betriebssystem¬ prozesse bedingt eine wesentliche Erweiterung der Funktionali¬ tät, indem Mechanismen des Betriebssystems genutzt weroen sol- len, die die Kommunikation zwischen den Betriebssystemprozessen herstellen. Es ist denkbar, daß explizit vom Programmierer in die Applikation Aufrufe für eine Interprozeßkommunikation (IPC) eingefügt werden, sowie daß eigene IPC-Klassen verwendet werden. Der Softwareersteller hat in diesem Fall die Progra - mierung der IPC-Mechanismen selbst vorzunehmen. Die Auftei¬ lung der Applikation auf die einzelnen Betriebssystemprozesse ist fest im Sourceprogramm eincodiert. Bei einer erforderli¬ chen "Änderung der Prozeßaufteilung sind vom Programmierer die Sourceprogamme zu modifizieren und erneut zu compilieren.
Es ist Aufgabe der Erfindung, ein Verfahren anzugeben, zur Adaption einer objektorientierten Applikation, welche auf mehrere Betriebssystemprozesse verteilbar ist, sodaß insbesondere der Programmierer die zu compilierenden Sourcen der Applikation nicht selbst modifizieren muß.
Diese Aufgabe ist gelöst bei einem Verfahren zur Adaption einer objektorientierten Applikation, welche auf mehrere
Betriebssystemprozesse verteilbar ist, a) mit einem Aufbereitungsverfahren zur Codesubstitution von zu compilierenden Sourcen der Applikation gemäß einem Stub-
Konzept, b) mit einem Konfigurationsverfahren zur Verteilung von In¬ stanzen der Applikation als Objekte oder Stub-Objekte für zu bindende Module aus compilierten Sourcen der Applikation, c) mit einem beim Ablauf vorgesehenen Kommunikationsverfahren zum Aufrufen von Methoden für Objekte der Applikation mit Hilfe einer Stub-Methode.
Ausführbar ist ein bevorzugtes Verfahren mit zumindest einem von folgenden Verfahrensschritten des Aufbereitüngsverfahrens: d) es wird eine Klassendeklaration der Sourcen analysiert für eine Vergabe von Methoden-Identifikationen, sodaß Methoden von verwendeten Klassen der Applikation eindeutig mittels der Methoden-Identifikation identifizierbar sind, e) es werden die Klassen der Applikation mit einer generi- schen Methode ergänzt, mittels welcher jene Methode beim Ablauf lokal aufrufbar ist, welche durch einen Parameter der generischen Methode in Form der Methoden-Identifikation identifiziert wird, f) es werden Basisklassen der Applikation um eine redifinier- bar deklarierte Stub-Methode ergänzt, g) es wird jeder von bei einem Ablauf vorgesehenen Aufru¬ fen von einer Methode für ein Objekt der Klassen ersetzt durch einen beim Ablauf vorgesehenen Aufruf der Stub- Methode für das Objekt,
- sodaß bei einem positiven Ergebnis des Aufrufs der Stub- Methode für das Objekt beim Ablauf ein Aufruf vorgesehen ist zu einem prozeßübergreifenden Versenden von einer Nach- rieht, durch welche in einem Remote-Prozeß der Aufruf der Methode des Objektes veranlaßt wird, indem die Methoden- Identifikation in der Nachricht enthalten ist,
- sowie daß bei einem negativen Ergebnis des Aufrufs der
Stub-Methode für das Objekt beim Ablauf im Lokal-Prozeß der
Aufruf der Methode des Objektes erfolgt, h) es werden Hilfsdefinitionen für Methoden generiert, sodaß zu jeder Methode der Applikation zumindest
- ihr Klassenname,
- ihr Methodenname,
- ihre Parametertypen,
- ihr Parameterstring für ein Einpacken sowie Auspacken von Parametern, sowie
- ihre Methoden-Identifikation definiert sind.
Ausführbar ist ein weiteres bevorzugtes Verfahren mit zumin¬ dest einem von folgenden Verfahrensschritten des Konfigura- tionsverfahrens: k) es wird eine bestimmte Systemkonfiguration der Applikation analysiert für eine Verteilung der Objekte als die Instanzen der Applikation auf die Betriebssystemprozesse der Applikation, ) es wird eine generische Instanzierungsfunktion generiert, mittels welcher beim Ablauf ein neues Objekt der Applikation instanzierbar ist,
- mit einer lokalen Instanzierung im Lokal-Prozeß bei einem gemäß der Systemkonfiguration lokal zu instanzierenden Objekt, sodaß das negative Ergebnis beim Aufruf der Stub-Methode im Lokal-Prozeß für dieses lokal-instanzierte Objekt vorgesehen ist,
- sowie mit einer re oten Instanzierung bei einem gemäß der Systemkonfiguration remote zu instanzierenden Objekt, indem im Lokal-Prozeß ein prozeßübergreifender Anstoß vorgesehen ist zur Instanzierung dieses remote zu instanzierenden Objektes im Remote-Prozeß, sowie mit einer lokalen Instanzierur.y für ein zu diesem Objekt vorgesehenes lokales Stub-Objekt, dessen Stub-Methode im Lokal-Prozeß redefiniert wird, sodaß das posi¬ tive Ergebnis beim Aufruf der Stub-Methode für dieses als Stub- Objekt lokal instanzierte Objekt im Lokal-Prozeß vorgesehen ist,
n) es wird eine generische Löschfunktion generiert, mittels welcher beim Ablauf die Instanzierung von einem der Objekte der Applikation löschbar ist,
- mit einem lokalen Löschen im Lokal-Prozeß bei einem gemäß der Systemkonfiguration lokal-instanzierten Objekt,
- sowie mit einem remoten Löschen bei einem gemäß der System¬ konfiguration remote instanzierten Objekt, indem im Lokal- Prozeß ein prozeßübergreifender Anstoß vorgesehen ist zum Löschen dieses remote-instanzierten Objektes im Remote-Pro- zeß, sowie ein lokales Löschen von dem zu diesem Objekt vor¬ gesehenen lokalen Stub-Objekt, p) es werden Runfiles erzeugt, indem zu den Modulen bei jeder ladbaren Einheit Module
- für die Instanzierungsfunktion, - für die LÖschfunktion, sowie
- für die Hilfsdefinitioneπ für die Methoden der Applikation dazugebunden werden.
Ausführbar ist ein weiteres bevorzugtes Verfahren mit zumindest einem von folgenden Verfahrensschritten des Kommunikationsver¬ fahrens: r) es wird die Stub-Methode für eines der Objekte lokal auf¬ gerufen, sowie im Falle des negativen Ergebnisses erfolgt ein lokaler Methodenaufruf für das Objekt, s) es wird im Falle des positiven Ergebnisses für den lokalen Aufruf der Stub-Methode für das Objekt, aus den gebundenen Hilfsdefinitionen
- die Methoden-Identifikation,
- das remote-instanzierte Objekt, sowie - Methodenparameter ermittelt, t) es wird anhand des Parameterstrings eine Nachricht verpackt im Lokal-Prozeß, u) es wird die Nachricht im Remote-Prozeß empfangen, v) es wird im Remote-Prozeß nach dem Auspacken der Parameter das lokal instanzierte Objekt ermittelt, w) es wird mittels der generischen Methode anhand der
Methoden-Identifikation der Aufruf der dadurch identifizierten Methode ausgeführt.
Der Erfindung liegt die Idee zugrunde, daß die zu compilie- renden Sourcen der Applikation in einem Aufbereitungsverfah¬ ren insbesondere mittels eines Präprozessors modifizierbar sind, sodaß durch Codesubstitution Methodenaufrufe ersetzbar sind durch Codesequenzen, mittels derer beim Ablauf entscheid¬ bar ist, ob ein prozeßübergreifendes Versenden einer Nach- rieht erforderlich ist, oder ob ein lokaler Aufruf erfolgen soll. Dies ist realisierbar, indem Hilfsdefinitionen für die Methoden generiert werden, sodaß durch den Einsatz dieser speziellen Dateien eine Sicherung der Konsistenz des Systems bei der Applikation gewährleistet ist. Dies ist weiters er- zielbar, indem ein Stub-Konzept angewendet wird, bei welchem Stub-Methoden und Stub-Objekte verwendet werden. Weiters ist dies erzielbar, indem eine Instanzierungsfunktion sowie eine Löschfunktion in einem Runtime-System eingeetzt wird. Dies ist weiters erzielbar, indem bei einem prozeßübergreifenden Kom- munikationsverfahren beim Ablauf insbesondere eine generische Methode eingesetzt wird, von welcher anhand einer Methoden -Identifikation der dadurch identifizierte Methodenaufruf ausführbar ist.
In einer vorteilhaften Weise braucht der Programmierer die Sourcen nicht selbst modifizieren.
In einer vorteilhaften Weise kann der Programmierer die Sourcen der Applikation beispielsweise mit den Sprachmitteln der Programmiersprache C++ erstellen.
In einer vorteilhaften Weise ist mittels der Codesubstitu¬ tion beim Aufbereitungsverfahren nur eine einmalige Modifi¬ kation der Sourcen mit deren anschließender Compilierung ausreichend. Bei einer Änderung der Systemkonfiguration, also bei einer Änderung der Verteilung der Applikation auf mehrere
Betriebssystemprozesse, ist eine Änderung der Sourcen der Applikation nicht erforderlich, sodaß auch eine neue Compilierung nicht erforderlich ist.
In einer vorteilhaften Weise wird mittels der Hilfsdefini¬ tionen für eine bestimmte Systemkonfiguration die Konsistenz des Gesamtsystems der objektorientierten Applikation sicher¬ gestellt.
Die Erfindung wird anhand der Figuren, in welchen Ausführungs¬ beispiele enthalten sind, näher erläutert.
Die Figur 1 zeigt ein erfindungsgemäßes Verfahren zur Adaption einer objektorientierten Applikation, welche auf mehrere Be- triebssystemprozesse verteilbar ist.
Die Figur 2 zeigt ein anderes Verfahren zur Adaption einer objektorientierten Applikation, welche auf mehrere Betriebs¬ prozesse verteilbar ist.
Die Figur 3 zeigt ein Aufbereitungsverfahren für das erfin¬ dungsgemäße Verfahren zur Adaption einer objektorientierten Applikation, welche auf mehrere Betriebssystemprozesse ver¬ teilbar ist.
Die Figur 4 zeigt ein Konfigurationsverfahren für oas erfindungsgemäße Verfahren zur Adaption einer objektorien¬ tierten Applikation, welche auf mehrere Betriebssystempro¬ zesse verteilbar ist.
Die Figur 5 zeigt ein prozeßübergreifendes Kommunikations¬ verfahren für das erfindungsgemäße Verfahren zur Adaption einer objektorientierten Applikation, welche auf mehrere Betriebssystemprozesse verteilbar ist.
Die Figur 6 zeigt einen Methodeπaufruf.
Die Figur 7 zeigt eine Codesequenz nach einer Codesubstitu¬ tion des Methodenaufrufs.
Die Figur 8 zeigt einen prozeßübergreifenden Sendeaufruf für eine Nachricht als einen Teil der Codesequenz.
Die Figur 9 zeigt einen Aufruf einer Stub-Methode als ein Teil der Codesequenz.
Wie die Figur 1 zeigt, besteht ein Ausführungsbeispiel für das erfindungsgemäße Verfahren zur Adaption einer objektorientier¬ ten Applikation, welche auf mehrere Betriebssystemprozesse verteilbar ist, aus den Verfahrensschritten V100, V200, V300, V400, V500, V600, sowie V700.
Es wird der Verfahrensschritt V100 ausgeführt. Vom Program¬ mierer werden die zu compilierenden Sourcen der Applikation erstellt.
Es wird der Verfahrensschritt V200 ausgeführt. Für die zu compilierenden erstellten Sourcen der Applikation wird ein Aufbereitungsverfahren durchgeführt. Dabei kann ein Präpro¬ zessor vorgesehen sein zur Durchführung des Aufbereitungs¬ verfahrens. Es werden Klassendeklarationen der Sourcen der Applikation analysiert. Es werden Methoden-Identifikationen aufbereitet. Die Klassen der Applikation werden um die gene¬ rische Methode ergänzt. Es werden die Methodenaufrufe in den Sourcen der Applikation modifiziert, indem mittels Codesub- stution Codesequenzen eingesetzt werden anstelle der Metho- denaufrufe. Es werden Hilfsdefinitionen für die Methoden der Applikation generiert.
Es wird der Verfahrεnsschritt V300 ausgeführt. Die vom Aufbe¬ reitungsverfahren modifizierten Sourcen werden compiliert.
Es folgt der Verfahrensschritt V400. Es wird ein Konfigura-
tionsverfahren ausgeführt. Es wird eine Konfigurationsdatei analysiert. Es wird eine Iπstanzierungsfunktion generiert. Es wird eine Löschfunktioπ generiert. Es werden Hilfsdefini¬ tionen für die Methoden der Applikation mitgebundeπ. Es wer¬ den Runfiles erzeugt.
Es folgt der Verfahrensschritt V500. Es wird ein Linkverfah¬ ren ausgeführt. Es werden ablauffähige Phasen der Betriebs¬ systemprozesse gebunden.
Es folgt der Verfahrensschritt V600. Es wird ein Ablauf der Betriebssystemprozesse der Applikation ausgeführt.
Es folgt der Verfahrensschritt V700. Es wird untersucht, ob eine Konfigurationsänderung erforderlich ist. Falls dies der Fall ist, folgt der Verfahrensschritt V400. Gemäß der geänderten Systemkonfiguration wird das Konfigurationsverfahren erneut durchgeführt. Danach folgt der Verfahrensschritt V500, bei welchem das Linkverfahren erneut durchgeführt wird. Danach folgt der Verfahrensschritt V600, bei welchem der Ablauf der Applikation gemäß der geänderten Systemkonfiguration erfolgt.
Wie die Figur 2 zeigt, besteht ein Ausführungsbeispiel für ein anderes Verfahren zur Adaption einer objektorientierten
Applikation aus den Verfahrensschritteπ VlOl, V301, V501, V601 , V701, sowie V801.
Es wird der Verfahrensschritt VlOl ausgeführt. Von einem Programmierer werden die Sourcen der Applikation erstellt. Je nach Aufteilung der Applikation auf mehrere Betriebε- systemprozesse werden vom Programmierer explizit die Auf¬ rufe für eine prozeßübergreifende Kommunikation in den Sourcen der Applikation eingetragen.
Es folgt der Verfahrensschritt V301. Die vom Programmierer
erstellten Sourcen werden compiliert.
Es folgt der Verfahrensschritt V501. Für die compilierten Sourcen der Applikation wird das Linkverfahren durchgeführt.
Es folgt der Verfahrensschritt V601. Es erfolgt der Ablauf der Applikation.
Es folgt der Verfahrensschritt V701. Es wird geprüft, ob eine Konfigurationsänderung erforderlich ist. Falls dies der Fall ist, folgt der Verfahrensschritt V801. Gemäß einer neuen Systemkonfiguration werden vom Programmierer die Sourcen der Applikation modifiziert, indem gemäß der neuen Verteilung der Applikation auf einzelne Betriebssystemprozesse in den Sourcen explizit Aufrufe für eine prozeßübergreifende Kommunikation eingefügt werden. Danach folgt erneut der Verfahrensschritt V301, bei welchem die soeben modifizierte Sourcen compiliert werden.
Danach folgt der Verfahrensschritt V501, bei welchem das Linkverfahren erneut durchgeführt wird.
Danach folgt der Verfahrensschritt-V601, bei welchem der Ablauf der Applikation gemäß der neuen Systemkoπfiguration erfolgt.
Wie die Figur 3 zeigt, besteht ein Ausführungsbeispiel für das Aufbereitungsverfahren des Verfahrensschrittes V200 aus den Verfahrensschritten V210, V220, V230, V235, V240, sowie
V250.
Es wird der Verfahrensschritt V210 ausgeführt. Es wird eine Klassendeklaration der Sourcen der Applikation analysiert für eine Vergabe von Methoden-Identifikationen, sodaß die Methoden von den verwendeten Klassen der Applikation system- weit eindeutig mittels der Methoden-Idenifikation identifi¬ zierbar sind.
Es folgt der Verfahrensschritt V220. Es wird eine Protokoll- Informations-Datei aufbereitet, in welcher Hilfsdefinitionen für die Methoden der Applikation enthalten sind, sodaß zu je¬ der Methode der Applikation zumindest ihr Klassenname, ihr Methodenname, ihre Parametertypen, ihr Parameterstring für ein Einpacken sowie Auspacken von Parametern, sowie ihre Metho¬ den-Identifikation definiert sind.
Es folgt der Verfahrensschritt V230. Es werden die Klassen der Applikation um die generische Methode ergänzt. Mittels der generischen Methode ist anhand der Methoden-Identifika¬ tion ein Aufruf der dadurch identifizierten Methode ausführbar.
Es folgt der Verfahrensschritt V235. Es werden die Basisklassen der Applikation um eine redefinierbar deklarierte Stub-Methode ergänzt.
Es folgt der Verfahrensschritt V240. Es werden in den Sourcen die Methodenaufrufe modifiziert mittels einer Codesubsti- tution.
Es folgt der Verfahrensschritt V250. In einer Hilfsdefini- tionsdatei werden die Hilfsdefinitionen für die Methoden generiert und aufbereitet.
Wie die Figur 4 zeigt, besteht ein Ausführungsbeispiel für das Konfigurationsverfahren des Verfahrensschrittes V400 aus den Verfahrensschritteπ V410, V420, V430, V440, sowie V450.
Es wird der Verfahrensschritt V410 ausgeführt. Es wird eine bestimmte Systemkonfiguration der Applikation anhand einer Konfigurationsdatei analysiert, mittels welcher eine Verteilung der Objekte der Applikation auf die Betriebssystemprozesse der Applikation vorgenommen wird.
Es folgt der Verfahrensschritt V420. Es wird eine generische
Instanzierungsfunktion generiert, mittels welcher beim Ablauf die Objekte der Applikation instanzierbar sind.
Es folgt der Verfahrensschritt V430. Es wird eine generische Löschfunktion generiert, mittels welcher beim Ablauf die Instanzierung der Objkete der Applikation löschbar ist.
Es folgt der Verfahrensschritt V440. Es werden Module für die Hilfsdefinitionen für die Methoden der Applikation gebunden.
Es folgt der Verfahrensschritt V450. Es werden Runfiles er¬ zeugt, indem zu den Modulen bei jeder ladbaren Einheit Module für die Instanzierungsfunktion, für die Löschfunktion, sowie für die Hilfsdefinitionen für die Methoden der Applikation da- zugebunden werden.
Wie die Figur 5 zeigt, besteht als ein Teil des Verfahrens¬ schrittes V600 ein Ausführungsbeispiel von einem Verfahrens¬ schritt V605 für einen Ablauf zum Aufrufen einer Methode für ein Objket der Applikation aus den Verfahrensschritten V610 bis V680.
In einem Lokal-Prozeß wird der Verfahrensschritt V610 aus¬ geführt. Es wird ein lokaler Adressat ermittelt. Dieser ist im Falle eines lokalen Objektes die Instanz selbst. Im Falle eines remoten Objektes ist der lokale Adressat das zugehörige Stub-Objekt.
Es folgt der Verfahrensschritt V620. Es wird für den lokalen Adressaten die Stub-Methode aufgerufen.
Es folgt der Verfahrensschritt V621. Es wird überprüft, ob das Ergebnis beim Aufruf der Stub-Methode für den lokalen Adressaten positiv ist.
Falls das Ergebnis negativ ist, folgt der Verfahrensschritt V680, und es erfolgt der Aufruf der Methode für den lokalen Adressaten, welcher in diesem Fall das instanzierte lokale
Obj ekt ist .
Bei einem positiven Ergebnis folgt der Verfahrensschritt V640. Für die aufzurufende Methode wird deren Methoden-Identifika- tion ermittelt.
Es folgt der Verfahrensschritt V641. Es wird der remote Adressat ermittelt, welcher in diesem Fall das remote instan- zierte Objekt ist.
Es folgt der Verfahrensschritt V642. Es werden die Parameter für den remoten Aufruf der Methode verpackt.
Es folgt der Verfahrensschritt V670. Es erfolgt eine Interpro- zeßkommunikation (IPC) zwischen dem Lokal-Prozeß und dem Re¬ mote-Prozeß.
Im Remote-Prozeß folgt der Verfahrensschritt V650. Es werden die Parameter für den Aufruf der Methode ausgepackt.
Es folgt der Verfahrensschritt V651. Es wird der lokale Adressat im Remote-Prozeß ermittelt. Dieser ist in diesem Fall das im Remote-Prozeß instanzierte Objekt.
Es folgt der Verfahrensschritt V652. Es erfolgt ein Aufruf der generischen Methode, bei welcher mittels der Methoden- Identifikation die aufzurufende Methode ermittelt wird.
Es folgt der Verfahrensschritt V660. Es erfolgt der Aufruf der Methode für das im Remote-Prozeß instanzierte Objekt.
Mittels der Interprozeßkommunikation des Verfahrensschrittes V670 wird nach dem Remote-Prozeß der Lokal-Prozeß fortgesetzt.
Wie die Figur 6 zeigt, besteht ein Ausführungsbeispiel für einen lokalen Aufruf einer Methode für ein Objekt aus einem Objektpointer, einem Methodennamen, sowie aus Parametern. Der
Objektpointer bildet dabei eine Referenz auf das Objekt, an welches eine Nachricht gesendet wird. Der Methodenname bildet dabei eine Bezeichnung für die Nachricht. Die Para¬ meter bilden dabei einen Parameterteil für die Nachricht.
Gemäß vereinbarter Notation gilt beispielsweise folgende Schreibweise:
<Objektpointer>-><Methodenname>(<Parameter>) <Objektpointer>: Referenz auf das Objekt, an das die Nachricht gesendet wird.
<Methodenname>: Bezeichnung der Nachricht <Parameter>: Parameterteil für die Nachricht
Beispielsweise bei der Programmiersprache C++ ist deren Nachrichtenmechanismus so ausgelegt, daß nur die Adressie¬ rung von Objekten innerhalb eines Betriebssystemprozesses unterstützt wird. Applikationen, welche auf mehrere unab¬ hängige Betriebssystemprozesse verteilt werden sollen, be¬ nötigen daher einen erweiterten Nachrichtenmechanismus. Diese Erweiterung des Nachrichtenmechanismus soll nicht durch eine Erweiterung der Programmiersprache erfolgen, da . auf diese Weise eine Portabilität eingeschränkt ist. Diese Erweiterung des Nachrichtenmechanismusses soll in einer solchen Weise vorgenommen werden, daß eine Portabilität gewährleistet ist. Zusätzlich zu dem in der Programmiersprache verankerten prozeßlokalen Nachrichtenmechanismus soll noch ein Mechanis¬ mus für einen prozeßübergreifenden Nachrichtenaustausch in Form einer Interprozeßkommunikation (IPC) bereitgestellt wer¬ den. Dabei sollen keine neuen Sprachmittel benötigt werden, sodaß eine Compilererweiterung nicht erforderlich ist. Von einem Präprozessor soll in einem Aufbereitungsverfahren für die zu compilierenden Sourcen der Applikation ein derartiger Methodenaufruf mittels einer Codesubstitution ersetzt wer¬ den durch eine Codesequenz, in welcher zusätzlich implizite Aufrufe für den prozeßübergreifenden Nachrichtenaustausch (IPC) enthalten sind. Mittels dieser Codesequenz soll sowohl der prozeßlokale Nachrichtenaustausch, als auch ein erweiterter Nachrichtenaustausch über Prozeßgrenzen hinweg erlaubt werden.
Wie die Figur 7 zeigt, besteht ein Ausführungsbeispiel für eine derartige Codesequenz aus einem lokalen Aufruf einer Stub-Methode Vstub, sodaß bei einem positiven Ergebnis die¬ ses Aufrufs eine für die Interprozeßkommunikation (IPC) er- weiterte Form des Aufrufs vorgesehen ist, sowie daß bei einem negativen Ergebnis ein lokaler Methodenaufruf vor¬ gesehen ist, welcher gleich ist dem in der Figur 6 darge¬ stellten Methodenaufruf, welcher durch die in der Figur 7 dargestellte Codesequenz bei der Codesubstitution ersetzt wird.
Gemäß vereinbarter Notation gilt beispielsweise folgende Schreibweise:
((<Objektpointer>->Vstub())?(SX_SEND((_CSXobj*) <Objektpointer>,<Methoden-ID>,<Parameterstring>,<Parameter>) : (<Objektpointer>-XMethodenname>(<Parameter>))
<Methoden-ID>: Methoden-Identifikation zur systemweit ein¬ deutigen Identifizierung von Methoden von Klassen der Applikation
<Parameterstring>: Zeichenstring zur Identifizierung von Parametern beim Einpacken sowie Aus¬ packen von Parametern
Dabei dient die Methoden-Identifikation zur systemweit eindeutigen Identifizierung von Methoden für Klassen der Applikation. Es ist ein Parameterstring vorgesehen, welcher in Form eines Zeichensstrings zur Identifizierung von Para¬ metern beim Einpacken sowie Auspacken von Parametern dient.
Wie die Figur 8 zeigt, enthält ein Austuhrungsbeispiel einer derart erweiterten Form des Aufrufs für die Interproze߬ kommunikation (IPC) einen Aufruf zum prozeßübergreifenden Versenden der Nachricht, einen Objektpointer, eine Methoden- Identifikation, einen Parameterstring, sowie Parameter.
Gemäß vereinbarter Notation gilt beispielsweise folgende Schreibweise:
(SX_SEND((_CSXobj*)<Objektpointer>,<Methoden-ID>, <Parameterstring>, <Parameter>)
Ob dieser Aufruf tatsächlich aktiviert wird, wird zur Laufzeit entschieden durch eine Auswertung des Ergebnisses, welches als eine Abfrage mittels des Aufrufs der Stub-Methode er¬ mittelt wird.
Wie die Figur 9 zeigt, besteht ein Ausführungsbeispiel für einen Aufruf der Stub-Methode aus einem Objektpointer, sowie aus dem Methodennamen Vstub.
Gemäß vereinbarter Notation gilt beispielsweise folgende Schreibweise: (<Objektpointer>->VstubO)
Vor dem Versenden der Nachricht gemäß des Methodennamens an das referenzierte Objekt wird jedesmal ermittelt, ob ein prozeßlokaler Methodenaufruf stattfinden soll, oder ob ein mittels der Interprozeßkommunikation (IPC) erweiterter Auf¬ ruf durchgeführt wird. Im Falle eines IPC-Aufrufes kommt die Funktion SX-SEND zum Tragen, welche mit den geeigneten Parametern zu versorgen ist. Diese Parameterversorgung soll bei der Codesubstitution automatisiert vom Präprozessor vor¬ genommen werden.
In einer vorteilhaften Weise erfolgt die Codesubstitution nach einfachen Regeln, sodaß diese automatisierbar ist, und beispielsweise von einem Tool durchgeführt werden kann.
Zusammen mit der Codesubstitution für die Nachrichtenauf- rufe sollen auch noch diejenigen Codeteile substituiert wer¬ den, welche die Instanzierung von Klassen sowie das Entfer¬ nen von Objekten aus dem System betreffen.
Die Entscheidung, welche Form des Nachrichtenmechanismusses jeweils zum Tragen kommt, also ein prozeßlokales Versenden der Nachricht oder ein prozeßübergreifendes Versenden der Nachricht, soll zur Laufzeit des Programmes getroffen werden, und zwar in Abhängigkeit von einer aktuellen Systemkonstel¬ lation, welche bei objektorientierten Softwaresystemen dyna¬ misch veränderbar ist. Um eine hohe Performanz zu gewährlei¬ sten, soll diese Abfrage sehr schnell von statten gehen und deshalb prozeßlokal erfolgen. In jedem Betriebssystemprozeß soll jeweils eine Instanz existieren, welche darüber Auskunft geben kann, ob sich ein adressiertes Objekt gerade im jeweili¬ gen Betriebssystemprozeß des Nachrichtensenders befindet, oder falls es in einem anderen Betriebssystemprozeß existiert, eine Wegeinformation bereitstellen zur Ermöglichung der Adressie- rung. Dies soll mittels eines Stub-Konzeptes erfolgen.
Bei einem derartigen Stub-Konzept sollen in einer verteilten Applikation in denjenigen Betriebssystemprozessen, welche nicht selbst ein reales Objket enthalten, Stellvertreter- Objekte, als Stub-Objekte anstelle der realen Objekte vor¬ handen sein. Diese Stub-Objekte stehen dann im Falle einer Anforderung an das reale Objekt als Ansprechpartner lokal zur Verfügung und können entweder- dessen Aufgaben direkt über¬ nehmen oder die geforderte Dienstleistung an das reale Objekt weitervermitteln. Diese Stub-Objekte sollen sich gegenüber den anderen Objekten exakt wie die realen Objekte verhalten.
Eine derartige Aufgabe oder eine mögliche Dienstleistung ist beispielsweise die Auskunft darüber, ob es sich bei einem bestimmten Objekt um die Instanz selbst handelt oder um das Stub-Objekt. Falls es sich dabei um die Instanz selbst handelt, kann die Nachricht in der beispielsweise bei der Programmiersprache C++ üblichen Form direkt an das adressierte Objekt gesendet werden. Anderenfalls soll das Stub-Objekt alle notwendigen Informationen darüber bereit¬ stellen, um die entsprechende Anforderung an das reale Ob-
jekt weiterzuleiten. Im Bedarfsfall kann jedes Objekt, ein¬ schließlich der Stub-Objekte, darüber Auskunft geben, ob es selbst ein Stub-Objekt ist oder nicht. Zu diesem Zweck wird eine Methode, die Stub-Methode VstubO, als virtuelle Me- thode in der Basisklasse aller Applikationsklassen bereitge¬ stellt. Durch den Vererbungsmechanismus erhalten alle Objekte der Applikation automatisch die Fähigkeit, Auskunft darüber zu geben, ob sie Stub-Objekte sind oder reale Objekte. Es wird in der Basisklasse aller Applikationsklassen die Stub- Methode bereitgestellt, welche im Falle einer Aktivierung ein negatives Ergebnis liefert. Die Stub-Methode ist redefi- nierbar zu deklarieren, indem die Stub-Methode beispielsweise bei der Programmiersprache C++ das Schlüsselwort Virtual ent¬ hält. Für Stub-Klassen wird die Stub-Methode redefiniert, sodaß sie ein positives Ergebnis liefert. Demnach liefern Stub- Objekte auf die Anfrage VstubO gemäß der Stub-Methode ein anderes Ergebnis als die nicht-Stub-Objekte, bei welchen eine Default-Implementierung zum Tragen kommt.
Eine Systemkonfiguration, also eine Aufteilung der Objekte auf Betriebssystemprozesse, braucht erst nach dem Übersetzen der Quellprogramme festgelegt werden. Erst zur Laufzeit soll entschieden werden, welcher Nachrichtenmechanismus jeweils zum Tragen kommt. Dies gilt auch für den Vorgang der Instan- zierung von Klassen sowie das Entfernen von Objekten aus dem laufenden System. Dies kann nicht statisch vom Compiler er¬ ledigt werden, sondern soll vom Laufzeitsystem ausgeführt werden.
Ebenso wie bei der Codesubstitution für die Nachrichten¬ aufrufe werden auch die Aufrufe NEW und DELETE in der Source vom Präprozessor durch die Funktionen SX_NEWobj als Instanzierungsfunktion und SX_DELETE als Löschfunktion ersetzt. Diese Funktionen werden im Laufzeitsystem ausge- führt. Diese Funktionen werden zu jeder ladbaren Einheit dazugebunden. Sie inkorporieren die Informationen darüber,
ob ein Objekt lokal oder remote indistanziert oder gelöscht werden soll. Bei der Instanzierung wird demzufolge entweder der Operator NEW beispielsweise bei der Programmiersprache C++ verwendet, oder es wird über die Interprozeßkommunikation die Instanzierung des Objektes in einem anderen Betriebssystem¬ prozeß angestoßen und lokal wird dabei nur ein Stub-Objekt erzeugt. Die Löschfunktion entscheidet zur Laufzeit, ob das Objekt, auf das sie angewendet wird, ein Stub-Objekt oder ein reales Objket ist. Abhängig davon wird entweder der Opera- tor DELETE beispielsweise bei der Programmiersprache C++ ver¬ wendet oder es wird über die Interprozeßkommunikation das Löschen des Objektes in einem anderen Betriebssystemprozeß angestoßen und lokal wird das Stub-Objket gelöscht. Die Imple¬ mentierung der Instanzierungsfunktion und der Löschfunktion wird aufgrund von Angaben in einer Konfigurationsdatei gene¬ riert.
Beim prozeßübergreifenden Kommunikationsmechanismus gehen Methodenaufrufe, also auch Aufrufe von Konstrukturen und Destruktoren, über Prozeßgrenzen hinweg, sodaß diese Aufrufe in versendbare Daten umzuwandeln sind. Dabei werden die Metho¬ den der verwendeten Klassen durch Methoden-Identifikationen identifiziert. Diese Methoden-Identifikationen werden bei¬ spielsweise mittels einer Protokoll-Informations-Datei system- weit eindeutig vergeben und mittels der generischen Methode ausgewertet, welche jedes Objekt besitzt. Die Protokoll- Informations-Datei bildet eine systemweite Datenbasis über Methoden und ihre Methoden-Identifikationen. Diese wird bei jeder Codesubstitution ausgewertet und soweit erforderlich ver- vollständigt. Die Protokoll-Informations-Partei enthält für jede Methode der Applikation folgende Daten:
- Klassenname
- Methodenname
- Typen der Parameter der Methode (diese Angabe ist notwendig, da beispielsweise in der Programmiersprache C++ Methoden nicht allein aufgrund von KLassennamen und Methodennamen,
sondern erst durch die Parametertypen eindeutig identifiziert werden können) - Parameterstring (beispielsweise verwendet für das Einpacken sowie Auspacken der Parameter) - Methoden-Identifikation.
Bei der Codesubstitution wird die Definition jeder verwende¬ ten Klasse um die generische Methode erweitert. Diese bildet die Methoden-Identifikationen auf lokale Methodenaufrufe ab. Jeder Methoden-Aufruf aus einem anderen Prozeß führt im Em¬ pfängerprozeß zunächst zu einem Aufruf der generischen Methode mit der Methoden-Identifikation als Parameter.
Beim prozeßübergreifenden Versenden der Nachricht werden die Parameter des Methodenaufrufs in einer Datenstruktur verpackt und verschickt. Die Funktionen SX-SEND und die generische Me¬ thode sind für das Einpacken sowie Auspacken der Parameter vorgesehen. Dazu werden der Funktion SX-SEND Informationen über Methodenparameter codiert übergeben, beispielsweise in Form eines Strings. Dieser Informationsstring, also der Parameter¬ string, wird bei der Codesubstitution ebenfalls vom Präpro¬ zessor aufbereitet.
Somit wird bei einer objektorientierten Applikation beim Compilieren der Applikation ein Aufbereituπgsverfahren, beim Binden ein Konfigurationsverfahren, sowie beim Ablauf ein Kommunikationsverfahren angewendet zum Aufrufen von Methcαen für Objekte. Bei einer Änderung einer Systemkonfiguration ist eine Adaption der Sourcen nicht erforderlich. Dies gilt auch bei einer Erweiterung der objektorientierten Applikation.