DE19807191A1 - Programmablaufverfahren und Verfahren zur Erweiterung eines Programmkomponentensystems - Google Patents

Programmablaufverfahren und Verfahren zur Erweiterung eines Programmkomponentensystems

Info

Publication number
DE19807191A1
DE19807191A1 DE19807191A DE19807191A DE19807191A1 DE 19807191 A1 DE19807191 A1 DE 19807191A1 DE 19807191 A DE19807191 A DE 19807191A DE 19807191 A DE19807191 A DE 19807191A DE 19807191 A1 DE19807191 A1 DE 19807191A1
Authority
DE
Germany
Prior art keywords
component
data
program
docking
disposal
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Withdrawn
Application number
DE19807191A
Other languages
English (en)
Inventor
Norbert W Dipl Ing Quast
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ACOS International Ltd
Original Assignee
ACOS International Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by ACOS International Ltd filed Critical ACOS International Ltd
Priority to DE19807191A priority Critical patent/DE19807191A1/de
Priority to DE59804372T priority patent/DE59804372D1/de
Priority to AT98966917T priority patent/ATE218721T1/de
Priority to US09/582,771 priority patent/US7185343B1/en
Priority to AU26143/99A priority patent/AU2614399A/en
Priority to ES98966917T priority patent/ES2180232T3/es
Priority to PCT/EP1998/008507 priority patent/WO1999035571A2/de
Priority to EP98966917A priority patent/EP1044409B1/de
Priority to CA002316952A priority patent/CA2316952A1/en
Priority to JP2000527884A priority patent/JP2002501230A/ja
Publication of DE19807191A1 publication Critical patent/DE19807191A1/de
Priority to US11/500,710 priority patent/US20070113236A1/en
Withdrawn legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code

Description

Die Erfindung betrifft den Programmablauf sowie die Erstel­ lung eines Programmkomponentensystems, das auch als "Compo­ nentware" bezeichnet wird. Insbesondere betrifft die Erfin­ dung ein Programmablaufverfahren bei einem Programmkompo­ nentensystem sowie ein Verfahren zur Erweiterung eines sol­ chen Systems.
In dem Artikel "Componentenware - von der Komponente zur Applikation" von Michael Stal, erschienen in der Zeitschrift OBJEKTspektrum, Heft 3, 1997, Seiten 86 bis 89, sind Grund­ lagen von Programmkomponentensystemen beschrieben. Die Ziel­ setzung ist es, die bisher erforderliche, sehr zeitaufwendi­ ge Softwareerstellung durch ein bloßes "Verdrahten" vorgege­ bener Komponenten zu ersetzen. Diese Komponenten sollen in unterschiedlichen Kontexten eingesetzt werden können, ohne daß der Komponentenproduzent Details des einer Komponente zugrundeliegenden Source-Codes bekanntgeben müßte.
Zur Produktion von Componentware sind mehrere sich ergänzen­ de Technologien bekannt, darunter Verteilungsplattformen, Containerplattformen und die Verbunddokumenten-Technologie.
Bei Verteilungsplattformen werden Konventionen und Werkzeuge für die Verteilung von Komponenten über Rechnergrenzen hin­ weg sowie zur Kommunikation zwischen den Komponenten bereit­ gestellt. Als Quasi-Industriestandards haben sich folgende Verteilungsplattformen durchgesetzt: DCOM (Distributed Com­ ponent Object Model) von Microsoft, CORBA (Common Object Request Broker Architecture) von der OMG (Object Management Group), JAVA-RMI (Remote Method Invocation) von JavaSoft.
Containerplattformen beinhalten eine lösungsorientierte Menge von Softwarekomponenten zur zumindest teilweisen Abdeckung eines bestimmten Aufgabenbereichs (zum Beispiel Lagerwesen, Finanzbuchhaltung, . . .) und eine lösungsneutrale Middleware (wie zum Beispiel eine graphische Benutzer­ schnittstelle), um eine Interaktion zwischen den Komponenten und dem Benutzer zu ermöglichen.
Die Verbunddokumenten-Technologie ermöglicht eine Integra­ tion unterschiedlicher Applikationen. Ein Verbunddokument umfaßt mehrere Bestandteile (zum Beispiel Tabellen, Grafi­ ken, Texte, . . .), für die je eine Applikation verantwortlich ist. Bekannte Architekturen für Verbunddokumente sind bei­ spielsweise ActiveX von Microsoft, OpenDoc von CILab und Java Beans von JavaSoft.
Bei den verfügbaren Verfahren besteht jedoch das Problem, daß die Funktionalität einer Komponente ausschließlich über Schnittstellen genutzt werden kann, die von dem Komponenten­ produzenten vordefiniert worden sind. Diese Schnittstellen sind insbesondere die vom Komponentenproduzenten vordefi­ nierten Methoden oder Parameter. Es besteht keine Möglich­ keit, die Funktionalität einer Komponente unabhängig vom Komponentenproduzenten zu erweitern, da der Source-Code der Komponente im allgemeinen nicht verfügbar ist. Eine bloße Parametrisierungsmöglichkeit, wie sie gegebenenfalls vorge­ sehen sein kann, stellt keine Erweiterung der Funktionalität einer Komponente dar, da alle möglichen Funktionen bereits ursprünglich vom Komponentenproduzenten vorgesehen sein müs­ sen.
Die Erfindung hat demgemäß die Aufgabe, bei einem Programm­ komponentensystem eine besonders flexible und weitgehende Erweiterbarkeit zu ermöglichen. Insbesondere soll die Funk­ tionalität einer Komponente verändert und/oder erweitert werden können, ohne daß dazu Kenntnisse des Source-Codes der zu erweiternden Komponente erforderlich sind.
Erfindungsgemäß wird diese Aufgabe durch ein Programmablauf­ verfahren bei einem Programmkomponentensystem mit den Merk­ malen des Anspruchs 1 sowie durch ein Verfahren zur Erweite­ rung des Programmkomponentensystems mit den Merkmalen des Anspruchs 10 gelöst.
Im folgenden wird die zu erweiternde Komponente als "Grund­ komponente" und die neu hinzuzufügende Komponente als "Er­ weiterungskomponente" bezeichnet.
Die Erfindung geht von der Grundüberlegung aus, eine nahezu beliebige Erweiterbarkeit der Grundkomponente dadurch zu erzielen, daß auf das Erfordernis einer vom Programmierer definierten Erweiterungsschnittstelle in der Grundkomponente verzichtet wird. Vielmehr legt der Produzent der Erweite­ rungskomponente fest, wie die Erweiterungskomponente mit der Grundkomponente zusammenwirken soll. Diese Grundidee stellt eine Umkehrung der bisher in der Informatik üblichen Prinzi­ pien (encapsulation, information hiding, . . .) dar. Überra­ schenderweise lassen sich jedoch gerade durch diese Abkehr von etablierten Grundsätzen relativ große Softwaresysteme in erstaunlich kurzer Zeit auch durch Nicht-Programmierer realisieren.
Die erfindungsgemäße Überlegung, die Erweiterungsschnitt­ stellen nicht durch den Programmierer der Grundkomponente, sondern durch den der Erweiterungskomponente festlegen zu lassen, bedingt eine Umkehr von gewohnten Denkweisen während des Programmablaufs sowie während des Einbindens einer Er­ weiterungskomponente in ein bestehendes Programmkomponenten­ system. Diese beiden Fälle sind Gegenstand der nebengeordne­ ten Ansprüche 1 und 10.
Während des Programmablaufs benötigen Komponenten üblicher­ weise Daten voneinander, um sie zu verarbeiten und Ergeb­ nisse zu erzeugen. Es ist bekannt, eine aufgerufene Prozedur von der aufrufenden Stelle mit Daten zu versorgen und die Ergebnisse beim Rücksprung zurückzugeben. Dieses Verfahren setzt jedoch voraus, daß die Aufrufschnittstelle vom Pro­ grammierer der aufrufenden Prozedur vordefiniert ist.
Erfindungsgemäß ist dagegen vorgesehen, daß sich die aufge­ rufene Komponente - über ein geeignetes Laufzeitsystem - die benötigten Daten selbst beschafft. Dieser Vorgang wird im folgenden als "Datenbesorgung" bezeichnet. In der Komponen­ te, von der Daten besorgt werden, müssen keine besonderen Schnittstellen vom Programmierer festgelegt worden sein. Entsprechend ist es eine Aufgabe der aufgerufenen Komponen­ te, die Ergebnisse an geeignete Stellen anderer Komponenten einzuspeichern. Dieser Vorgang wird als "Datenentsorgung" bezeichnet. Auch hier ist es nicht erforderlich, daß der Programmierer besondere Schnittstellen für die Datenentsor­ gung vorgesehen hat. In diesem Zusammenhang soll die bloße Definition oder Deklaration eines Datenfeldes oder einer Variablen (gegebenenfalls einschließlich einer Typangabe und weiterer Parameter) nicht als eine "Schnittstelle" angesehen werden. Eine Schnittstelle wären dagegen zum Beispiel proze­ durale Anweisungen, die vom Programmierer explizit in ein Komponentenskript eingefügt werden müssen, um zur Laufzeit einen Datentransfer zu veranlassen oder zu ermöglichen.
Beim Anbinden einer Erweiterungskomponente an ein bestehen­ des Programmkomponentensystem werden die bekannten Prinzi­ pien in entsprechender Weise umgekehrt. Normalerweise würde man erwarten, daß die bisherigen Komponenten des Programm­ komponentensystems durch die Erweiterung unverändert blei­ ben. Erfindungsgemäß ist dagegen vorgesehen, im Programm­ komponentensystem nach Andockpunkten für die Erweiterungs­ komponente zu suchen, und diejenigen Komponenten des Pro­ grammkomponentensystems, in denen mindestens ein Andockpunkt gefunden wurde, zu ändern, indem an jedem gefundenen Andock­ punkt eine Aufrufinformation auf die neue Komponente einge­ tragen wird. Es wird also potentiell jede Komponente des gesamten Programmkomponentensystems verändert.
Durch die erfindungsgemäße Lösung wird es möglich, weitge­ hende Erweiterungen der Funktionalität eines Programmkompo­ nentensystems durchzuführen, ohne daß solche Möglichkeiten vom Programmierer der bisherigen Komponenten bereits ge­ plant, vorgesehen oder vorgedacht sein müßten. Dies stellt einen wesentlichen Fortschritt gegenüber den bisher bekann­ ten Programmkomponentensystemen dar.
Unter dem Begriff "Laufzeitsystem" werden in der Wortwahl dieser Anmeldung insbesondere alle generischen Routinen verstanden; also solche Routinen, die nicht vom Programmie­ rer einer Komponente explizit vorgegeben werden. Hierbei kann das Laufzeitsystem auch Anteile aufweisen, die in den Komponenten enthalten sind. Beispielsweise kann derjenige Teil des Laufzeitsystems, der den Datentransfer vornimmt, in die einzelnen Komponenten verlagert sein.
Die bei der Datenbe- und -entsorgung übermittelten Daten sind bevorzugt nicht allgemein zugänglich, sondern derjeni­ gen Komponente zugeordnet, von der die Daten besorgt bezie­ hungsweise in die sie entsorgt werden. Diese Daten werden in bevorzugten Ausführungsformen übertragen, während die ge­ nannte Komponente inaktiv ist. Insbesondere kann diese Kom­ ponente zum Zeitpunkt der Datenbe- und -entsorgung aus dem regulären Arbeitsspeicher ausgelagert sein. Bevorzugt werden bei der Datenbe- und/oder -entsorgung lokale und/oder nicht-per­ sistente Daten übermittelt, also insbesondere keine global verfügbaren Daten.
Bevorzugte erfolgt die Datenbe- und/oder -entsorgung ohne Mitwirkung der Komponente, von der die Daten besorgt bezie­ hungsweise in die sie entsorgt werden. Beispielsweise kann vorgesehen sein, bei einer Datenentsorgung lediglich die entsorgende Komponente sowie das Laufzeitsystem zu beteili­ gen. Diejenigen Komponente, in die die Daten abgelegt wer­ den, hat in bevorzugten Ausführungsformen keine Einflußmög­ lichkeit.
Vorzugsweise werden beim Ausführen einer Komponente diejeni­ gen Datenfelder vorgemerkt, für die eine Datenentsorgung erforderlich ist. Dies können insbesondere Datenfelder sein, deren Inhalte durch eine Datenbesorgung ermittelt wurden und auf die ein Schreibzugriff erfolgt ist.
Bevorzugt ist ferner vorgesehen, daß eine aufgerufene Kompo­ nente unmittelbar auf in der aufrufenden Komponente defi­ nierte und/oder verfügbare Datenfelder lesend und schreibend zuzugreifen vermag. Dies ermöglicht einen quasi schnittstel­ lenfreien Datenaustausch zwischen den beiden genannten Kom­ ponenten. Der Aufruf einer Komponente wird vorzugsweise durch eine in einem Andockpunkt der aufrufenden Komponente enthaltene Aufrufinformation oder -nachricht ausgelöst. Die Verwendung von Andockpunkten, die Aufrufinformationen auf­ nehmen können, ermöglicht eine besonders flexible Funktio­ nalitätserweiterung.
Als potentielle Andockpunkte sind bevorzugt alle Interak­ tionsschnittstellen einer Komponente vordefiniert. Solche Interaktionsschnittstellen können Interaktions-Bildschirm­ felder sein, zum Beispiel Eingabefelder oder Schaltflächen. Ferner können alle Ausgabefelder einer Druckmaske und/oder alle Zugriffsoperationen auf persistente Daten (zum Beispiel Öffnen, Lesen und Schreiben einer Datei oder einer Daten­ bank) also Interaktionsschnittstellen vorgesehen sein. Inter­ aktionsschnittstellen können in bevorzugten Ausführungsfor­ men auch vom Programmierer einer Komponente vorgegeben sein.
Vorzugsweise werden bei dem Einbinden einer weiteren Kompo­ nente in das Programmkomponentensystem alle möglichen An­ dockpunkte automatisch (und ohne Kenntnis des Source-Codes der bereits vorhandenen Komponenten) identifiziert. Damit ist eine Erweiterung mit geringem Programmieraufwand mög­ lich. Ferner werden bevorzugt geeignete Aufrufinformationen in mindestens einen Andockpunkt eingetragen.
In bevorzugten Ausgestaltungen enthält das Verfahren zur Komponentenerweiterung den weiteren Schritt, mindestens eine Komponente als Binärobjekt zu erzeugen. Insbesondere kann für jeden gefundenen Andockpunkt genau oder höchstens ein Binärobjekt generiert werden. In diesem Binärobjekt kann die Speicherzuteilung des Programmkomponentensystems zur späte­ ren Laufzeit berücksichtigt werden.
Weitere bevorzugte Ausführungsformen sind Gegenstand der Unteransprüche.
Ein Ausführungsbeispiel der Erfindung und mehrere Ausfüh­ rungsvarianten werden im folgenden anhand der schematischen Zeichnungen genauer erläutert.
Fig. 1 zeigt eine Prinzipdarstellung des Programmkomponen­ tensystems während der Laufzeit,
Fig. 2 zeigt eine Prinzipdarstellung eines Binärobjekts,
Fig. 3 zeigt ein Flußdiagramm der Instantiierung von Kompo­ nenten,
Fig. 4a bis Fig. 4c zeigen ein Flußdiagramm des Berechnungs­ ablaufs zur Laufzeit einschließlich eines Komponentenwech­ sels.
In Fig. 1 ist dies Struktur des Programmkomponentensystems während der Laufzeit veranschaulicht. Ein Betriebssystem 10, beispielsweise ein übliches Fensterbetriebssystem, ist um eine Verteilerplattformschicht 12, zum Beispiel DCOM oder CORBA, erweitert. Auf die Verteilerplattformschicht 12 setzt ein Laufzeitsystem 14 auf, das auch als "Middleware" be­ zeichnet wird. Das Betriebssystem 10 stellt einen Arbeits­ speicherbereich 16 bereit, der von dem Laufzeitsystem 14 verwaltet und genutzt wird. In einer Ausführungsvariante ist die Verteilerplattformschicht 12 weggelassen, und das Lauf­ zeitsystem 14 setzt unmittelbar auf das Betriebssystem 10 auf. Das Programmkomponentensystem wird von einem handels­ üblichen Computer, beispielsweise von einem PC-kompatiblen Rechner, ausgeführt.
Neben dem Laufzeitsystem 14 weist das Programmkomponenten­ system eine Containerumgebung 18 auf, die mehrere Komponen­ ten 20, 20', 20'', 20''' in Form von Binärobjekten enthält. Die Komponenten 20, 20', 20'', 20''' bestimmen das Verhalten des Programmkomponentensystems. Sie werden - beispielsweise in Abhängigkeit von Ereignissen, die der Benutzer auslöst - von dem Laufzeitsystem 14 aufgerufen.
Eine Komponente 20 im Binärobjektformat weist, wie in Fig. 2 dargestellt, mehrere Abschnitte auf, und zwar einen Pro­ grammabschnitt 22, einen Tabellenabschnitt 24, einen Ver­ zeichnisabschnitt 26 und einen Speicherbildabschnitt 28.
Der Programmabschnitt 22 enthält interpretierbaren Code, der zur Laufzeit von dem Laufzeitsystem 14 interpretiert wird und das Verhalten der Komponente 20 bestimmt. Der im Pro­ grammabschnitt 22 enthaltene Code ist in einem Zwischenfor­ mat, das eine effiziente Ausführung zur Programmlaufzeit er­ laubt. In Ausführungsalternativen ist eine geeignete Kompi­ lierung des Codes zur unmittelbaren Ausführung unter Kon­ trolle des Betriebssystems 10 vorgesehen.
Im Tabellenabschnitt 24 sind Laufzeittabellen für konfigu­ rierbare Eigenschaften und Parameter des Codes gespeichert. Dies sind beispielsweise Informationen über Fenstergrößen und Farben für die Bildschirmdarstellung oder Informationen für die Druckdarstellung. Außerdem enthalten die Laufzeit­ tabellen Verwaltungsinformationen für die Speicherzuteilung. Der Verzeichnisabschnitt 26 beinhaltet ein Verzeichnis der Andockreferenzen, ein Speicherverzeichnis, ein Datentrans­ ferverzeichnis und ein Methodenverzeichnis.
Das Speicherverzeichnis enthält die in der Komponente ver­ fügbaren Bezeichnungen für Speicherfelder, Informationen zu den Speicherfeldern sowie Verweise (genauer gesagt, Offset- oder Displacementwerte) darauf. Das Methodenverzeichnis enthält eine Liste der von der Komponente bereitgestellten Methoden. Diese beiden Verzeichnisse sind im Binärobjekt enthalten, damit auch ohne Kenntnis des Source-Codes einer Komponente (Komponentenskript) eine Erweiterung der Funktio­ nalität einer Komponente möglich ist. Alle im Speicherver­ zeichnis enthaltenen Speicherfelder sind durch die Operatio­ nen der Datenbe- und -entsorgung von beliebigen anderen Kom­ ponenten aus zugänglich und können gelesen, verändert und beschrieben werden. Der Programmierer hat im hier beschrie­ benen Ausführungsbeispiel keine Möglichkeit, einzelne Spei­ cherfelder vor fremdem Zugriff zu schützen. Informationen, die bei der Laufzeit zur Datenbe- und -entsorgung benötigt werden, sind im Datentransferverzeichnis enthalten.
Im Speicherbildabschnitt 28 sind drei zusammenhängende Da­ tenbereiche 30, 32, 34 vorgesehen, deren Grenzen durch die Verwaltungsinformationen in den Laufzeittabellen angegeben werden. Der erste Datenbereich wird im folgenden als Zu­ griffsdatenbereich 30 bezeichnet. Er ist für diejenigen Da­ ten reserviert, die von einer innerhalb der Aufrufhierarchie übergeordneten Komponente stammen. Diese Daten kann die auf­ gerufene Komponente unmittelbar lesen, verarbeiten und schreiben, ohne daß ein programmierter Datentransfer notwen­ dig wäre. Übertragen auf eine prozedurale Programmiersprache entspricht dies ungefähr der Möglichkeit, unmittelbar auf Variablen zuzugreifen, die in einer statisch übergeordneten Prozedur definiert sind. Die Größe des Zugriffsdatenbereichs 30 wird bei der Instantiierung einer Komponente 20 festge­ legt. Dies ist möglich, weil jede Komponente 20 im Binärob­ jektformat nur genau einer möglichen Aufrufstelle (einem An­ dockpunkt) zugeordnet ist. Die Größe des Zugriffsdatenbe­ reichs 30 einer Komponente 20 ist die Summe der Größen des Zugriffsdatenbereichs und des (noch zu beschreibenden) Lo­ kaldatenbereichs der aufrufenden Komponente.
Als zweiter Datenbereich im Speicherbildabschnitt 28 einer Komponente 20 ist der Lokaldatenbereich 32 vorgesehen. Die­ ser Datenbereich schließt unmittelbar an den Zugriffsdaten­ bereich 30 an. Er enthält diejenigen Daten, die in der Komponente 20 neu definiert werden. Eine solche Definition kann unmittelbar in der Komponente oder indirekt - zum Bei­ spiel durch eine Referenz auf eine Bildschirmmaske oder ein Druckformat - erfolgen. Übertragen auf eine prozedurale Pro­ grammiersprache enthält der Lokaldatenbereich 32 ungefähr die lokalen Variablen einer Prozedur.
Schließlich ist als dritter Datenbereich im Speicherbild­ abschnitt 28 ein Transferdatenbereich 34 vorgesehen. Der Transferdatenbereich ist zur Zwischenspeicherung von Daten reserviert, die während der Programmlaufzeit von einer an­ deren Komponente nach dem Datenbesorgungsprinzip besorgt und nach dem Datenentsorgungsprinzip in diese entsorgt werden.
Wenn eine Komponente 20 instantiiert, also aus einem Kompo­ nentenskript in mindestens ein Binärobjekt übersetzt wird, brauchen der Zugriffsdatenbereich 30 und der Transferdaten­ bereich 34 nicht mit definierten Werten belegt zu werden, weil diese Bereiche zur Laufzeit sowieso überschrieben wer­ den. Der Lokaldatenbereich 32 wird mit vorgegebenen Stan­ dardwerten für die einzelnen Datentypen gefüllt. Während der Laufzeit eines Programmkomponentensystems dienen die drei Datenbereiche 30, 32 und 34 einer Komponente 20 zur Zwi­ schenspeicherung des jeweils aktuellen Systemzustandes bei jedem Aufruf einer weiteren Komponente und zum teilweisen Wiederherstellen dieses Zustandes (hinsichtlich des Lokal­ datenbereichs 32 und des Transferdatenbereichs 34) bei einem Rücksprung.
Zur Erzeugung einer Komponente erstellt der Programmierer ein Komponentenskript, das zur automatischen Übersetzung mittels eines Generatorsystems geeignet ist. Dieser auch als Instantiierung einer Komponente bezeichnete Übersetzungsvor­ gang wird unten genauer beschrieben. Das Komponentenskript stellt die Definition der zu generierenden Komponente dar. Es enthält Anweisungszeilen, die als interpretierbarer Code der Komponente übersetzt werden. Die verwendete Programmier­ sprache ist an sich bekannt und beruht auf objektorientier­ ten Prinzipien. Außerdem kann das Komponentenskript Anwei­ sungszeilen enthalten, die vom Programmierer vorgedachte An­ dockpunkte für Erweiterungen bestimmen. Optional können auch Daten und Parameter in einem Komponentenskript enthalten sein, zum Beispiel Parameter für die visuelle Darstellung von Daten oder eine Aufzählung zulässiger Eingabewerte. Weiter können im Komponentenskript Anweisungen zum Aufruf von "Fremdprogrammen" enthalten sein. Während der Laufzeit wird dann das entsprechende Programm, beispielsweise ein COBOL-Programm, gestartet. Dieses Programm kann nun sei­ nerseits Schnittstellen des Programmkomponentensystems nut­ zen und beispielsweise weitere Komponenten starten.
Ferner kann das Komponentenskript Referenzen auf zu verwen­ dende Bildschirmmasken und -formate sowie auf Druckformate enthalten. Solche Bildschirmmasken oder Druckformate werden vorab mittels eines geeigneten graphischen Werkzeugs ent­ wickelt. Das Werkzeug ("GUI-Builder") erzeugt mehrere globa­ le Verzeichnisse, auf die während jedes Instantiierungsvor­ gangs einer Komponente zugegriffen wird. Dies sind erstens ein globales Verzeichnis der verfügbaren Bildschirmmasken und Druckformate, zweitens ein Verzeichnis der durch diese Masken und Formate vorgegebenen Andockpunkte und drittens ein Verzeichnis der Bezeichner und Typen der in den defi­ nierten Eingabefeldern beziehungsweise Druckfeldern erwar­ teten Daten.
Falls es sich bei dem Komponentenskript um die Definition einer Erweiterungskomponente handelt, also einer Komponente, die eine bereits bestehende Komponente (Grundkomponente) er­ weitern soll, enthält das Komponentenskript ferner einen Vererbungsparameter, der die gewünschten Andockpunkte für die Komponentenerweiterung spezifiziert. Der Vererbungspara­ meter kann, wie noch erläutert wird, mehr als eine Grundkom­ ponente und mehr als einen Andockpunkt definieren.
Als Andockpunkte dienen generische oder vom Programmierer angegebene Stellen der Grundkomponente, an denen eine Auf­ rufinformation für eine Erweiterungskomponente eingefügt werden kann. Die Andockpunkte einer Komponente im Binär­ objektformat können automatisch identifiziert werden, so daß eine Komponentenerweiterung ohne Kenntnis des Source-Codes der Grundkomponente möglich ist.
Im hier beschriebenen Ausführungsbeispiel sind vier Arten von Andockpunkten vorgesehen. Erstens sind als Andockpunkte alle Eingabefelder und sonstige Bedienelemente (Knöpfe, Schaltflächen, . . .) in den Bildschirmmasken vorgesehen, auf die die Grundkomponente zugreift. Damit ist es zum Beispiel möglich, Komponentenerweiterungen immer dann aufzurufen, wenn der Benutzer eine Interaktion mit einem Eingabefeld der Grundkomponente durchführt, beispielsweise einen Wert ein­ gibt oder das Eingabefeld aktiviert oder mit dem Mauszeiger überfährt. Der Programmierer der Grundkomponente braucht diese Möglichkeit nicht explizit vorzusehen. Ebenso dienen alle Druckmasken-Ausgabefelder als Andockpunkte, so daß bei­ spielsweise durch eine Komponentenerweiterung die Ausgabe­ werte einer auszudruckenden Tabelle verändert werden können.
Als Andockpunkte sind ferner alle Operationen der Grundkom­ ponente auf persistente Daten (beispielsweise Datei- oder Datenbankzugriffe) vorgesehen. Auch hier können Erweite­ rungskomponenten "zwischengeschaltet" werden, ohne daß dies der Programmierer der Grundkomponente ausdrücklich angeben müßte. Schließlich kann, wie bereits erwähnt, eine Komponen­ te auch vom Programmierer bestimmte Andockpunkte an beliebi­ gen Stellen des Programmablaufs enthalten. In Ausführungs­ alternativen sind weitere oder andere Andockpunkte möglich.
Jeder Andockpunkt weist in dem hier beschriebenen Ausfüh­ rungsbeispiel mehrere Andockstellen ("slots") auf. Dadurch können mehrere Komponentenerweiterungen an einen einzigen Andockpunkt angeschlossen werden. Bei einem Andockpunkt, der einem Eingabefeld zugeordnet ist, sind beispielsweise eine Haupt-Andockstelle und fünf Neben-Andockstellen vorgesehen. Eine eventuell in der Haupt-Andockstelle eingetragene Kompo­ nentenerweiterung wird immer dann aufgerufen, wenn der Be­ nutzer das Eingabefeld aktiviert. Wahlweise kann diese Kom­ ponente auch bei jedem Anzeigen des Eingabefeldes, also schon vor einer Benutzeraktion, aufgerufen werden. Die Neben-Andockstellen können dagegen zum Beispiel dem Betäti­ gen bestimmter Funktionstasten oder anderen Aktionen des Benutzers zugeordnet werden. Bei Druckmasken-Ausgabefeldern kann die Ansteuerung der Andockstellen eines Andockpunktes zum Beispiel durch eine Bedienereingabe zum Startzeitpunkt des Druckvorgangs bestimmt werden. In Ausführungsalternati­ ven sind andere Aufrufstrategien oder andere Anzahlen von Andockstellen (beispielsweise nur eine pro Andockpunkt) möglich.
Im folgenden wird die Instantiierung von Komponenten unter Hinweis auf Fig. 3 genauer beschrieben. Wie bereits erwähnt, bedeutet Instantiierung die Übersetzung eines Komponenten­ skripts in mindestens ein Binärobjekt. Im hier beschriebenen Ausführungsbeispiel wird bei der Instantiierung für jeden gefundenen Andockpunkt genau eine Komponente als Binärobjekt erzeugt.
Der Instantiierungsvorgang, der automatisch von dem Genera­ torsystem durchgeführt wird, beginnt mit dem Einlesen des Komponentenskripts (Schritt 40). In Schritt 42 wird nun ein­ erster Andockpunkt gesucht. Wenn das zu übersetzende Kompo­ nentenskript nur die Containeridentifizierung als Verer­ bungsparameter enthält, wird ein generischer Andockpunkt in der Containerumgebung 18 (Fig. 1) angenommen. Dies ermög­ licht eine Instantiierung von "Wurzelkomponenten", also Kom­ ponenten, die keine Komponentenerweiterungen darstellen.
Enthält dagegen das zu übersetzende Komponentenskript einen "echten" Vererbungsparameter, so definiert dieser die für die Komponentenerweiterung vorgesehenen Andockpunkte. Hier­ für bestehen mehrere Möglichkeiten. Wenn zum Beispiel ein Eingabefeld einer Bildschirmmaske als Andockpunkt dienen soll, so kann der Vererbungsparameter sowohl den Feldnamen und die gewünschte Andockstelle innerhalb des Andockpunktes (Nummer des "slots") angeben als auch die Grundkomponente spezifizieren. Alternativ ist es auch möglich, im Verer­ bungsparameter nur den Feldnamen und gegebenenfalls die Num­ mer des "slots" einzutragen. Als Andockpunkte dienen dann alle Stellen in den gegenwärtig im Programmkomponentensystem vorhandenen Binärobjekten, an denen ein Bildschirmformat re­ ferenziert wird, das das genannte Feld als Eingabefeld ver­ wendet.
Wenn ein erster Andockpunkt gefunden wurde (Abfrage 44), so wird zunächst eine geeignete Aufrufinformation, beispiels­ weise eine zum Aufruf der Erweiterungskomponente dienende Nachricht ("message"), in die den Andockpunkt enthaltende Grundkomponente eingetragen (Schritt 46). Die Grundkomponen­ te wird dazu im Binärobjektformat gelesen, der Verweis auf die Erweiterungskomponente wird in die Grundkomponente ein­ getragen, und das so veränderte Binärobjekt wird in das Pro­ grammkomponentensystem zurückgeschrieben. Der Vererbungs­ parameter legt dabei fest, an welcher Andockstelle ("slot") innerhalb eines Andockpunktes die Aufrufinformation einge­ tragen werden soll und welche Benutzeraktion zu einem Aufruf der Erweiterungskomponente führen soll.
Nach der Modifikation der den gefundenen Andockpunkt ent­ haltenden Grundkomponente, wird die diesem Andockpunkt zuge­ ordnete Erweiterungskomponente als Binärobjekt aufgebaut (Kasten 48). Zunächst werden die Andockpunkte der Erweite­ rungskomponente bestimmt und in das entsprechende Verzeich­ nis im Verzeichnisabschnitt 26 der Komponente 20 eingetragen (Schritt 50). Dazu werden alle Bildschirmmasken und Druck­ formate untersucht, auf die das Skript der Erweiterungskom­ ponente verweist. Ferner erfolgt ein Zugriff auf das globale Verzeichnis der durch diese Masken und Formate definierten Andockpunkte. Die dort enthaltenen Informationen werden als Andockreferenzen in den Verzeichnisabschnitt 26 übernommen. Neben dem Namen eines eingebundenen Bildschirm- oder Druck­ feldes sind dies beispielsweise Informationen über den Feld­ typ, den Speicherplatzbedarf des zugeordneten Datenwertes und so weiter.
Ferner wird das Komponentenskript nach Andockreferenzen durchsucht, die vom Programmierer angegeben wurden (Kon­ strukt INTERFACE-IS <Name<). Auch diese Andockreferenzen werden in den Verzeichnisabschnitt 26 übernommen. Schließ­ lich werden auch für alle im Komponentenskript gefundenen Zugriffsoperationen auf persistente Daten (Konstrukt zum Beispiel READ <Entitätsname<) entsprechende Andockreferenzen in den Verzeichnisabschnitt 26 aufgenommen.
In einem nächsten Schritt 52 wird die Laufzeit-Speicherorga­ nisation instantiiert. Hierzu werden zunächst diejenigen Feldbezeichnungen in den von der Erweiterungskomponente re­ ferenzierten Bildschirmmasken und Druckformaten bestimmt, die nicht bereits in der Grundkomponente definiert sind. Diese Feldbezeichnungen werden - sofern sie nicht mit Ein­ trägen im Zugriffsdatenbereich 30 übereinstimmen - als loka­ le Variablen der Erweiterungskomponente angesehen. Alle Feldbezeichnungen werden in das Speicherverzeichnis im Ver­ zeichnisabschnitt 26 eingetragen. Ferner wird eine Transfer­ liste angelegt, um während der Laufzeit die Bildschirm- und Druckdaten aus einem Pufferspeicher in den Speicherbereich der Erweiterungskomponente (Zugriffsdatenbereich 30 oder Lokaldatenbereich 32 oder Transferdatenbereich 34) zu über­ tragen. Diese Funktion wird zur Laufzeit automatisch aus­ geführt, ohne daß eine explizite Programmierung erforderlich wäre.
Als weiterer Teil des Schritts 52 werden nun die statischen Speicherdefinitionen im Komponentenskript verarbeitet. Da die Grundkomponente eindeutig feststeht, können schon zur Instantiierungszeit die Größen der drei Datenbereiche 30, 32, 34 des Binärobjekts 20 ermittelt werden. Ferner kann das Speicherverzeichnis im Verzeichnisabschnitt 26 vollständig erstellt werden.
Zunächst werden alle diejenigen statischen Speicherdefini­ tionen (Konstrukt INHERIT-DATA <Name<) im Komponentenskript gesucht, die bereits in der Grundkomponente definiert sind. Die entsprechenden Datenwerte finden sich zur Laufzeit im Zugriffsdatenbereich 30 an der gleichen Stelle (dem gleichen Versatz- oder Displacementwert) wie bei der Grundkomponente, da der Arbeitsspeicherbereich 16, der vom Zugriffsdatenbe­ reich 30 der Grundkomponente belegt wird, beim Aufruf der Erweiterungskomponente weiterverwendet wird. In das Spei­ cherverzeichnis der Erweiterungskomponente werden daher Ein­ träge aufgenommen, die denen der Grundkomponente entspre­ chen. Diese Einträge enthalten den Namen und Typ des Daten­ wertes sowie die Feldlänge und den Displacementwert.
Schließlich werden solche statische Speicherdefinitionen des Komponentenskripts verarbeitet, die dem Lokaldatenbereich 32 zugeordnet sind. Dies sind erstens Definitionen von Spei­ cherfeldern, die in der Grundkomponente nicht definiert sind, und zweitens Speicherdefinitionen, bei denen ausdrück­ lich eine lokale Speicherung angegeben wurde (Konstrukt INHERIT-DATA-LOCAL <Name<). Für derartige Speicherdefini­ tionen wird eine freie Adresse im Lokalspeicherbereich 32 ermittelt und reserviert. Genauer gesagt, wird die nächste freie Adresse hinsichtlich des aktuellen Speicherpegels (der von der Speicherbelegung der Grundkomponente und eventuell schon zugewiesenen lokalen Feldern der Erweiterungskomponen­ te abhängt) verwendet. Auch für diese Speicherdefinitionen werden entsprechende Einträge in das Speicherverzeichnis der Erweiterungskomponente aufgenommen.
Als nächster Schritt 54 wird die zur Laufzeit stattfindende Datenbe- und -entsorgung der Erweiterungskomponente instan­ tiiert, indem das Datentransferverzeichnis im Verzeichnis­ abschnitt 26 angelegt wird. Hierzu werden zunächst die Datenbe- und -entsorgungsdefinitionen im Komponentenskript gesucht. Diese Definitionen haben die folgende Form, wobei INH für "inherit" und "TME" für "Import/Export" steht:
Beim Auffinden einer derartigen Definition wird das Spei­ cherverzeichnis der adressierten Komponente ausgewertet. In­ formationen über die auszutauschenden Datenfelder (Feldtyp, Feldlänge, Adresse oder Displacement) im Arbeitsspeicherbe­ reich 16 zur Laufzeit werden eingelesen. Ferner wird ein entsprechendes Speicherfeld im Transferdatenbereich 34 re­ serviert, sofern das adressierte Feld nicht im Zugriffsda­ tenbereich 30 enthalten ist. Aus diesen Informationen wird ein entsprechender Eintrag im Datentransferverzeichnis des Verzeichnisabschnitts 26 der Erweiterungskomponente erzeugt. Dieser Eintrag enthält somit die Zuordnung des Speicherfel­ des der adressierten Komponente zu dem Speicherfeld im Transferdatenbereich 34 der gegenwärtig instantiierten Kom­ ponente. Die adressierte Komponente braucht nicht die Grund­ komponente zu sein, und das adressierte Speicherfeld in die­ ser Komponente kann in einem der drei Bereiche 30, 32 und 34 liegen. Demgemäß ist eine Datenbe- und -entsorgung von allen Daten möglich, die in einer beliebigen anderen Komponente verfügbar sind.
Nun erfolgt die Codegenerierung (Schritt 56), in der die An­ weisungszeilen im Komponentenskript in einen geeigneten, von dem Laufzeitsystem 14 interpretierbaren Zwischencode umge­ setzt werden. Die Codegenerierung wird nach an sich bekann­ ten Grundsätzen ausgeführt. Die Komponente wird nun im Bi­ närobjektformat aus den Bestandteilen zusammengebunden, die bei den bisher beschriebenen Schritten erzeugt worden sind. Das resultierende Binärobjekt hat die in Fig. 2 gezeigte und oben bereits beschriebene Struktur. Es wird in einem weite­ ren Schritt gespeichert (Schritt 58).
Damit ist die Erzeugung eines Binärobjekts für einen Andock­ punkt abgeschlossen. Im Instantiierungsverfahren wird nun ein nächster Andockpunkt gesucht (Schritt 60). Falls ein solcher im Programmkomponentensystem vorhanden ist, wird ein weiteres Binärobjekt erzeugt; andernfalls ist die Instanti­ ierung beendet. Die aus einem Komponentenskript erzeugten Binärobjekte unterscheiden sich höchstens hinsichtlich der in dem Speicherverzeichnis definierten Speicherbelegung. Wenn in einer Grundkomponente mehrere Andockpunkte gefunden werden, ist diese Speicherbelegung jedoch im Regelfall iden­ tisch. Dieser Fall kann auch eintreten, wenn mehrere Andock­ punkte in verschiedenen Grundkomponenten gefunden werden. In einer Ausführungsalternative ist daher zur Optimierung vor­ gesehen, identische Binärobjekte nur je einmal zu erzeugen.
Zum Ausführen des Programmkomponentensystems wird die in Fig. 1 dargestellte Struktur aufgebaut. Dazu werden zunächst das Laufzeitsystem 14 und die Containerumgebung 18 geladen und gestartet. Die Containerumgebung 18 enthält einen Kata­ log der beim Starten sichtbaren Menüeinträge. Dieser Katalog wird durch die Komponenten 18 definiert. Nun wird eine Wur­ zelkomponente gestartet, die bei dem oben beschriebenen In­ stantiierungsvorgang von dem Generatorsystem eigenständig erzeugt wurde. Das Laufzeitsystem wartet nun auf ein vom Benutzer ausgelöstes Ereignis, beispielsweise eine Menüaus­ wahl, durch das der Aufruf einer "eigentlichen" Komponente des Programmkomponentensystems angezeigt wird.
In Fig. 4a bis Fig. 4c ist das Programmablaufverfahren ge­ zeigt, das beim Komponentenaufruf sowie beim Ausführen der aufgerufenen Komponente durchgeführt wird. Zur Laufzeit ist in dem hier betrachteten Ausführungsbeispiel stets genau eine Komponente aktiv. Unmittelbar nach dem Systemstart ist dies die oben beschriebene Wurzelkomponente. Nur die jeweils aktive Komponente befindet sich im Arbeitsspeicherbereich 16. Die Komponente hat hierbei die in Fig. 2 gezeigte Binär­ objektstruktur. In Ausführungsalternativen ist auch ein quasi-paralleler Ablauf mehrerer Komponenten (z. B. über "multi-threading") möglich. Die Steuerung erfolgt dann durch das zugrundeliegende Betriebssystem 10.
Wenn eine neue Komponente aufgerufen werden soll, zum Bei­ spiel in Reaktion auf eine Eingabe oder Aktion des Benut­ zers, wird zunächst der Zustand der gerade aktiven Komponen­ te gesichert (Schritt 70). Dies bedeutet zumindest, daß der­ jenige Teil des Arbeitsspeicherbereichs 16 in eine Datei oder einen sonstigen Sicherungsbereich übertragen wird, in dem sich der Speicherbildabschnitt 28 der Komponente befin­ det. Im hier beschriebenen-Ausführungsbeispiel wird sogar das gesamte Binärobjekt gesichert, weil dessen übrige Ab­ schnitte hinsichtlich des Speicherbedarfs nicht ins Gewicht fallen.
Ferner werden alle Datenentsorgungsvorgänge durchgeführt, die während des Ablaufs der bisher aktiven Komponente vorge­ merkt worden sind (Schritt 72). Zur Effizienzsteigerung ist in dem hier beschriebenen Ausführungsbeispiel nämlich vorge­ sehen, nur diejenigen Speicherfelder des Transferdatenbe­ reichs 34, auf die ein schreibender Zugriff stattgefunden hat, wieder von der aktuellen Komponente in die durch die Datenentsorgung referenzierte Komponente zu übertragen. In Ausführungsalternativen erfolgt keine Vormerkung der verän­ derten Daten, sondern es werden bei jedem Komponentenwechsel alle Datenfelder im Transferdatenbereich 34 an die jeweils referenzierten Komponenten übertragen.
Bei jedem Datenentsorgungsvorgang wird das Datentransferver­ zeichnis der aktuellen Komponente herangezogen, um die refe­ renzierte(n) Komponente(n) und das entsprechende Datenfeld (die entsprechenden Datenfelder) in deren Speicherbildab­ schnitt(en) 28 zu bestimmen und die Daten dorthin zu über­ tragen. Durch jede Datenentsorgung wird somit ein Binärob­ jekt einer gegenwärtig nicht aktiven Komponente verändert. Während der Laufzeit kann eine Komponente mehrmals aufgeru­ fen und teilweise ausgeführt worden sein. In diesem Fall sind mehrere Versionen der Komponente gesichert. Die Daten­ entsorgung findet in diesem Fall in diejenige gesicherte Komponentenversion statt, die innerhalb der zur gegenwärtig aktiven Komponente führenden Aufrufkette dieser Komponente am nächsten steht. In Ausführungsalternativen wird eine an­ dere oder vom Programmierer bestimmte Auswahl der zu verwen­ denden Komponentenversion getroffen.
Als nächster Schritt 74 wird nun die neu aufgerufene Kompo­ nente als Binärobjekt in den Arbeitsspeicherbereich 16 gela­ den. Dabei wird auf jeden Fall der Teil des Arbeitsspeicher­ bereichs 16, der für die Programm-, Tabellen- und Verzeich­ nisabschnitte 22, 24, 26 der alten Komponente benutzt wurde, überschrieben.
Auch der Lokaldatenbereich 32 des Speicherbildabschnitts 28 der neuen Komponente wird in den Arbeitsspeicherbereich 16 geladen. Damit sind beim Start der neuen Komponente alle lokalen Daten mit definierten Standardwerten vorbesetzt. Derjenige Abschnitt des Arbeitsspeicherbereichs 16, der dem Zugriffsdatenbereich 30 der aufgerufenen Komponente ent­ spricht, wird jedoch nicht überschrieben. Damit gehen die dort gespeicherten Datenwerte beim Komponentenwechsel nicht verloren. Die neue Komponente kann vielmehr über den Zu­ griffsdatenbereich 30 unmittelbar auf Speicherfelder zugrei­ fen, die in der aufrufenden Komponente definiert sind. Die Größe das Zugriffsdatenbereichs 30 bestimmt sich nach der in der Instantiierungsphase ermittelten Speicherverteilung. Falls die aufrufende Komponente auf völlig andere Werte zugreift wie die aufgerufene Komponente, hat der Zugriffs­ datenbereich 30 die Größe Null.
Nachdem die aufgerufene Komponente als Binärobjekt geladen wurde, wird der im Programmabschnitt 22 enthaltene Code Befehl für Befehl interpretiert. Bei der Ausführung eines Befehls (Schritt 76) sind einige Sonderfälle zu beachten.
Falls es sich bei dem Befehl um eine Speicheroperation han­ delt, deren Ziel der Transferdatenbereich 34 ist (Abfrage 78), dann wird das betroffene Speicherfeld für eine spätere Datenentsorgung vorgemerkt (Schritt 80). Ein solches Vormer­ ken ist auch durch einen ausdrücklichen Befehl möglich.
Handelt es sich bei dem aktuellen Befehl um eine Anweisung, die eine Datenbesorgung aus einer referenzierten Komponente veranlaßt (Abfrage 82), so werden die in Fig. 4b gezeigten Schritte ausgeführt. Ein derartiger Befehl ist zum Beispiel das oben bereits beschriebene Konstrukt INH-DATA-IME, das im hier beschriebenen Ausführungsbeispiel sowohl als Deklara­ tion einer Datenbe- und -entsorgungsbeziehung als auch als Anweisung zur Datenbesorgung aufgefaßt wird. In Ausführungs­ alternativen werden schon beim Start einer Komponente alle von dieser referenzierten Daten besorgt.
Bei dem Datenbesorgungsverfahren nach Fig. 4b wird zunächst geprüft, ob die referenzierte Komponente bereits (zumindest teilweise) ausgeführt wurde (Abfrage 84). Ist dies nicht der Fall, so können keine gültigen Daten besorgt werden, und ein Laufzeitfehler wird ausgelöst. Falls dagegen eine gesicherte Version der referenzierten Komponente vorhanden ist, werden die benötigten Daten daraus geladen und in den Transfer­ datenbereich 34 der gegenwärtig aktiven Komponente geschrie­ ben. Die jeweiligen Speicherplätze in der referenzierten und der aktiven Komponente sind aus dem Datentransferverzeichnis der aktiven Komponente ersichtlich. Auch hier kann es (ähn­ lich wie in Schritt 72) vorkommen, daß mehrere Versionen der referenzierten Komponente gespeichert sind. Es wird dann diejenige Version zur Datenbesorgung herangezogen, die in der zur aktiven Komponente führenden Aufrufkette zuletzt ausgeführt wurde. In Ausführungsalternativen sind andere vorgegebene oder programmierbare Auswahlstrategien möglich. Nach dem Ende der Datenbesorgung wird der Programmablauf bei Schritt 76 (Fig. 4a) fortgesetzt.
In Abfrage 88 (Fig. 4a) wird überprüft, ob es sich bei dem aktuell interpretierten Befehl um einen Befehl zum Komponen­ tenwechsel, also zum Aufruf einer neuen Komponente, handelt. Ein solcher Befehl kann insbesondere eine in einem Andock­ punkt gespeicherte Aufrufinformation (message) sein. Wie bereits beschrieben, führt eine solche Aufrufinformation je nach der Art des Andockpunktes entweder durch ihr bloßes Vorhandensein oder bei einer vorbestimmten Aktion des Benut­ zers zum Aufruf der in der Aufrufinformation angegebenen Komponente. Wenn ein solcher Aufruf stattfindet, wird der aktuelle Befehlszählerstand in einem Stapelspeicher gesi­ chert und eine neue Instanz des in Fig. 4a dargestellten Verfahrens wird begonnen.
Abfrage 90 betrifft schließlich den Fall, daß die Ausführung der aktuellen Komponente regulär beendet wird. Ist dies nicht der Fall, so wird die Programmausführung mit Schritt 76 fortgesetzt. Falls dagegen das Programmende erreicht ist, wird das in Fig. 4c dargestellte Verfahren ausgeführt. Es werden zunächst, ähnlich wie in Schritt 72, alle vorgemerk­ ten Datenentsorgungen ausgeführt (Schritt 92). Daraufhin wird der Zustand derjenigen Komponente im Arbeitsspeicher­ bereich 16 wiederhergestellt, die die aktuelle Komponente aufgerufen hat (Schritt 94). Dies betrifft die Abschnitte 22, 24 und 26 sowie den Lokaldatenbereich 32. Der Abschnitt des Arbeitsspeicherbereichs 16, der dem Zugriffsdatenbereich 30 der aufrufenden Komponente entspricht, wird dagegen nicht wiederhergestellt, so daß eine Rückgabe von Werten im Zu­ griffsdatenbereich 30 von der aktuellen Komponente zur auf­ rufenden Komponente möglich ist.
Nach dem Wiederherstellen der aufrufenden Komponente ist die gegenwärtige Instanz des in Fig. 4a bis Fig. 4c gezeigten Verfahrens beendet. Die Programmausführung wird in der frü­ heren Instanz an der Stelle fortgesetzt, an der der ur­ sprüngliche Komponentenaufruf ausgelöst wurde (Schritt 76).
Durch die hier geschilderten Verfahren ist eine Funktionali­ tätserweiterung von Komponenten auf relativ einfache Weise möglich. Beispielsweise sei eine Grundkomponente gegeben, die ein Preisfindungsverfahren realisiert, das auf einem vom Benutzer (über ein Eingabefeld) einzugebenden Einzelpreis basiert. Mittels einer geeigneten Erweiterungskomponente kann diese Grundkomponente um ein anwendungsbezogenes Preis­ findungsverfahren für den Einzelpreis erweitert werden. Die Aufrufinformation für die Erweiterungskomponente wird dazu in einen Andockpunkt geschrieben, der dem Eingabefeld für den Einzelpreis zugeordnet ist. Der von der Erweiterungs­ komponente ermittelte Einzelpreis wird durch das Datenent­ sorgungsverfahren in die Grundkomponente eingeschrieben. Weitere Datenwerte, die die Erweiterungskomponente zur Preisfindung benötigt, werden durch das Datenbesorgungs­ verfahren aus anderen Komponenten abgerufen. Es ist nicht erforderlich, daß bei der Programmierung der Grundkomponente oder der anderen Komponenten die Möglichkeit einer solchen Funktionalitätserweiterung berücksichtigt wurde.
Die Programmierung von größeren Softwaresystemen läßt sich auf unterschiedliche Weise vereinfachen. Zum Beispiel ist es möglich, sogenannte "Adapterkomponenten" zu definieren. Eine Adapterkomponente ist eine Erweiterungskomponente, die unmittelbar eine andere Komponente referenziert. Dadurch kann die andere Komponente mehrfach unter verschiedenen Namen verwendet werden.

Claims (16)

1. Programmablaufverfahren bei einem Programmkomponenten­ system, das ein Laufzeitsystem (14) und mehrere Komponenten (20, 20', . . .) mit je einem Programmabschnitt (22) aufweist, mit den folgenden Schritten beim Ausführen des Programmab­ schnitts (22) einer ersten Komponente (20):
  • a) durch das Laufzeitsystem (14) vermittelte Datenbesor­ gung von Daten einer zweiten Komponente (20') in die erste Komponente (20) unabhängig von programmiererdefinierten Schnittstellen in der zweiten Komponente (20'), und
  • b) durch das Laufzeitsystem (14) vermittelte Datenentsor­ gung von Daten der ersten Komponente (20) in die zweite Komponente (20') unabhängig von programmiererdefinierten Schnittstellen in der zweiten Komponente (20').
2. Verfahren nach Anspruch 1, dadurch gekennzeichnet, daß die bei der Datenbesorgung über­ mittelten Daten von einem Speicherbildabschnitt (28) der zweiten Komponente (20') in einen Transferdatenbereich (34) der ersten Komponente (20) übertragen werden, und/oder daß die bei der Datenentsorgung übermittelten Daten von einem Transferdatenbereich (34) der ersten Komponente (20) in einen Speicherbildabschnitt (28) der zweiten Komponente (20') übertragen werden.
3. Verfahren nach Anspruch 1 oder Anspruch 2, dadurch gekennzeichnet, daß die Datenbe- und/oder -entsor­ gung ohne Mitwirkung der zweiten Komponente (20') erfolgt.
4. Verfahren nach einem der Ansprüche 1 bis 3, dadurch gekennzeichnet, daß die zweite Komponente (20') bei der Datenbe- und/oder -entsorgung inaktiv ist.
5. Verfahren nach einem der Ansprüche 1 bis 4, dadurch gekennzeichnet, daß sich der Transferdatenbereich (34) der zweiten Komponente (20') bei der Datenbe- und/oder -entsorgung in einem Sicherungsbereich befindet.
6. Verfahren nach einem der Ansprüche 1 bis 5, dadurch gekennzeichnet, daß bei der Datenbe- und/oder -entsorgung lokale und/oder nicht-persistente Daten der zweiten Komponente (20') übermittelt werden.
7. Verfahren nach einem der Ansprüche 1 bis 6, dadurch gekennzeichnet, daß beim Ausführen des Programmab­ schnitts (22) der ersten Komponente (20) vorgemerkt wird, für welche Daten der ersten Komponente (20) eine Daten­ entsorgung erforderlich ist.
8. Verfahren nach einem der Ansprüche 1 bis 7, dadurch gekennzeichnet, daß eine aufgerufene Komponente (20, 20', . . .) unmittelbar auf einen Zugriffsdatenbereich (30) zuzugreifen vermag, der die in der aufrufenden Komponente (20, 20', . . .) definierten und/oder verfügbaren Datenfelder enthält.
9. Verfahren nach einem der Ansprüche 1 bis 8, dadurch gekennzeichnet, daß der Aufruf einer Komponente (20, 20', . . .) durch eine Aufrufinformation ausgelöst wird, die in einem Andockpunkt der aufrufenden Komponente enthalten ist.
10. Verfahren zur Erweiterung eines mehrere Komponenten (20, 20', . . .) aufweisenden Programmkomponentensystems um eine weitere Komponente, mit den Schritten:
  • a) Suchen von Andockpunkten für die weitere Komponente, die einem durch eine Definition der weiteren Komponente be­ stimmten Vererbungsparameter entsprechen, in dem Programm­ komponentensystem, und
  • b) Ändern derjenigen Komponenten (20, 20', . . .) des Pro­ grammkomponentensystems, in denen mindestens ein Andockpunkt gefunden wurde, indem an jedem gefundenen Andockpunkt eine Aufrufinformation auf die weitere Komponente eingetragen wird.
11. Verfahren nach Anspruch 10, dadurch gekennzeichnet, daß alle Interaktionsschnittstellen der bisherigen Komponenten (20, 20', . . .) als potentielle Andockpunkte vordefiniert sind.
12. Verfahren nach Anspruch 10, dadurch gekennzeichnet, daß alle von den bisherigen Kompo­ nenten (20, 20', . . .) referenzierten Interaktions-Bild­ schirmfelder und/oder alle Druckmasken-Ausgabefelder und/oder alle Zugriffsoperationen auf persistente Daten als potentielle Andockpunkte vordefiniert sind.
13. Verfahren nach einem der Ansprüche 10 bis 12, dadurch gekennzeichnet, daß durch das Eintragen der Aufruf­ information in einen Andockpunkt ein Aufruf der weiteren Komponente aus der Komponente, in die die Aufrufinformation eingetragen wurde, vorbereitet wird.
14. Verfahren nach einem der Ansprüche 10 bis 13, gekennzeichnet durch den weiteren Schritt:
  • c) Erzeugen mindestens eines Binärobjekts aus der Defini­ tion der weiteren Komponente.
15. Verfahren nach Anspruch 14, dadurch gekennzeichnet, daß für jeden gefundenen Andockpunkt höchstens ein Binärobjekt erzeugt wird.
16. Verfahren nach Anspruch 15, dadurch gekennzeichnet, daß bei der Erzeugung jedes Binär­ objekts die Speicherzuteilung in derjenigen Komponente (20, 20', . . .) des Programmkomponentensystems berücksichtigt wird, die den zugrundeliegenden Andockpunkt enthält.
DE19807191A 1998-01-02 1998-02-20 Programmablaufverfahren und Verfahren zur Erweiterung eines Programmkomponentensystems Withdrawn DE19807191A1 (de)

Priority Applications (11)

Application Number Priority Date Filing Date Title
DE19807191A DE19807191A1 (de) 1998-01-02 1998-02-20 Programmablaufverfahren und Verfahren zur Erweiterung eines Programmkomponentensystems
ES98966917T ES2180232T3 (es) 1998-01-02 1998-12-29 Procedimiento de secuencias de programas y procedimiento para la ampliacion de un sistema de componentes del programa.
AT98966917T ATE218721T1 (de) 1998-01-02 1998-12-29 Programmablaufverfahren und verfahren zur erweiterung eines programmkomponentensystems
US09/582,771 US7185343B1 (en) 1998-01-02 1998-12-29 Program flow method and method for expanding a program component system
AU26143/99A AU2614399A (en) 1998-01-02 1998-12-29 Program flow method and method for expanding a program component system
DE59804372T DE59804372D1 (de) 1998-01-02 1998-12-29 Programmablaufverfahren und verfahren zur erweiterung eines programmkomponentensystems
PCT/EP1998/008507 WO1999035571A2 (de) 1998-01-02 1998-12-29 Programmablaufverfahren und verfahren zur erweiterung eines programmkomponentensystems
EP98966917A EP1044409B1 (de) 1998-01-02 1998-12-29 Programmablaufverfahren und verfahren zur erweiterung eines programmkomponentensystems
CA002316952A CA2316952A1 (en) 1998-01-02 1998-12-29 Program flow method and method for expanding a program component system
JP2000527884A JP2002501230A (ja) 1998-01-02 1998-12-29 プログラム・フロー方法及びプログラム・コンポーネント・システム拡張方法
US11/500,710 US20070113236A1 (en) 1998-01-02 2006-08-08 Program flow method and method for expanding a program component system

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
DE19800102 1998-01-02
DE19807191A DE19807191A1 (de) 1998-01-02 1998-02-20 Programmablaufverfahren und Verfahren zur Erweiterung eines Programmkomponentensystems

Publications (1)

Publication Number Publication Date
DE19807191A1 true DE19807191A1 (de) 1999-07-08

Family

ID=7853977

Family Applications (2)

Application Number Title Priority Date Filing Date
DE19807191A Withdrawn DE19807191A1 (de) 1998-01-02 1998-02-20 Programmablaufverfahren und Verfahren zur Erweiterung eines Programmkomponentensystems
DE59804372T Expired - Fee Related DE59804372D1 (de) 1998-01-02 1998-12-29 Programmablaufverfahren und verfahren zur erweiterung eines programmkomponentensystems

Family Applications After (1)

Application Number Title Priority Date Filing Date
DE59804372T Expired - Fee Related DE59804372D1 (de) 1998-01-02 1998-12-29 Programmablaufverfahren und verfahren zur erweiterung eines programmkomponentensystems

Country Status (1)

Country Link
DE (2) DE19807191A1 (de)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE19909715A1 (de) * 1999-03-05 2000-09-14 Siemens Ag Softwarekomponente und dynamisches Laufzeit-Erweiterungsverfahren für eine Softwarekomponente
DE19909717A1 (de) * 1999-03-05 2000-09-21 Siemens Ag Softwarekomponente und Ausführungsverfahren für eine Softwarekomponente

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE19909715A1 (de) * 1999-03-05 2000-09-14 Siemens Ag Softwarekomponente und dynamisches Laufzeit-Erweiterungsverfahren für eine Softwarekomponente
DE19909717A1 (de) * 1999-03-05 2000-09-21 Siemens Ag Softwarekomponente und Ausführungsverfahren für eine Softwarekomponente
DE19909717C2 (de) * 1999-03-05 2001-01-11 Siemens Ag Ausführungsverfahren für eine Softwarekomponente
DE19909715C2 (de) * 1999-03-05 2001-01-11 Siemens Ag Dynamisches Laufzeit-Erweiterungsverfahren für eine Softwarekomponente
US6836880B1 (en) 1999-03-05 2004-12-28 Siemens Aktiengesellschaft Software component and execution method for software component

Also Published As

Publication number Publication date
DE59804372D1 (de) 2002-07-11

Similar Documents

Publication Publication Date Title
DE10048942B4 (de) Verfahren und System zur Wartung von Software über ein Netz
DE69907919T2 (de) Mehrsprachige benutzeroberfläche für ein betriebssystem
DE10121790B4 (de) Softwarekonfigurationsverfahren zur Verwendung in einem Computersystem
DE19681256C2 (de) Ausführung von Anwendungen am Platz vom Speicher
DE60006410T2 (de) Verfahren und system zum verteilen von objektorientierten rechnerprogrammen
DE19705955A1 (de) Verfahren zum Generieren einer Implementierung eines Workflow-Prozessmodells in einer Objektumgebung
DE10335989B4 (de) Online-Änderungen von CIL-Code-Programmen für die Industrieautomatisierung
DE19844013A1 (de) Strukturierter Arbeitsordner
DE10128883A1 (de) Verfahren und System für die Verteilung von Anwendungsdaten auf verteilte Datenbanken mit verschiedenen Formaten
DE4104568A1 (de) Verfahren und vorrichtung zur programmverarbeitung
EP3364257A1 (de) Verfahren zum betrieb eines engineering-systems für ein industrielles prozessautomatisierungssystem und steuerungsprogramm
EP1044409B1 (de) Programmablaufverfahren und verfahren zur erweiterung eines programmkomponentensystems
DE19807191A1 (de) Programmablaufverfahren und Verfahren zur Erweiterung eines Programmkomponentensystems
EP1623394A1 (de) Speicherverwaltung bei einem tragbaren datentrager
WO2000054188A2 (de) Verfahren zur automatischen wiedergewinnung von engineeringdaten aus anlagen
EP1691275B1 (de) Verfahren und Vorrichtung zum rechnergestützten Erzeugen einer graphischen Benutzeroberfläche
DE19637883B4 (de) Datenverarbeitungsanlage zur Ausführung großer Programmsysteme
EP1343078B1 (de) System zur Modellierung und Generierung von Softwaregenerierungssystemen
EP2093663A1 (de) Engineering-System für die Entwicklung eines Projektes und Verfahren
EP1490762A2 (de) Verfahren, software-produkt und system zur universellen computergestuetzten informationsverarbeitung
EP1691274B1 (de) Verfahren und Vorrichtung zum rechnergestützten Erzeugen einer graphischen Benutzeroberfläche auf einem Anzeigemittel
DE19828611C2 (de) Datenverarbeitungsvorrichtung und zugehöriges Verfahren
EP1621945B1 (de) Konsistenzsicherung in einem Automatisierungssystem
EP0568717A1 (de) Computerprogrammgesteuertes Verfahren (Tracing) zur schrittweisen Protokollierung der Ausführung eines Zielprogrammes bezüglich der Aufrufe des Zielprogrammes durch andere Programme
DE10105729C1 (de) Verfahren und System zur funktionsmäßigen Erweiterung einer Telekommunikationsanlage

Legal Events

Date Code Title Description
OP8 Request for examination as to paragraph 44 patent law
8128 New person/name/address of the agent

Representative=s name: RALF M. KERN UND PARTNER, 80686 MUENCHEN

8139 Disposal/non-payment of the annual fee