DE69400873T2 - Dynamisches schnellauswertungssystem - Google Patents
Dynamisches schnellauswertungssystemInfo
- Publication number
- DE69400873T2 DE69400873T2 DE69400873T DE69400873T DE69400873T2 DE 69400873 T2 DE69400873 T2 DE 69400873T2 DE 69400873 T DE69400873 T DE 69400873T DE 69400873 T DE69400873 T DE 69400873T DE 69400873 T2 DE69400873 T2 DE 69400873T2
- Authority
- DE
- Germany
- Prior art keywords
- component
- viewing window
- information
- components
- window portion
- 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.)
- Expired - Fee Related
Links
- 238000011156 evaluation Methods 0.000 title description 2
- 238000000034 method Methods 0.000 claims description 68
- 238000004590 computer program Methods 0.000 claims description 14
- 230000004044 response Effects 0.000 claims description 3
- 230000008859 change Effects 0.000 description 7
- 238000009795 derivation Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 6
- 230000008569 process Effects 0.000 description 5
- 238000013519 translation Methods 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 230000002452 interceptive effect Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 240000005020 Acaciella glauca Species 0.000 description 1
- 238000010923 batch production Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000013499 data model Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 238000000802 evaporation-induced self-assembly Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012805 post-processing Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 235000003499 redwood Nutrition 0.000 description 1
- 241000894007 species Species 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/33—Intelligent editors
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Digital Computer Display Output (AREA)
Description
- Die vorliegende Erfindung betrifft im allgemeinen computerunterstützte Softwareentwicklung (CASE) und insbesondere ein menschenorientiertes Objektprogrammiersystem (HOOPS), welches eine interaktive und dynamische Umgebung für die computerprogrammerstellung bietet. HOOPS ermöglicht es einem Programmierer, eine feinkörnige Quellcodebearbeitung mit einem optimierenden Inkrementalkompilierer in einem Computerprogramm durchzuführen. Bei der vorliegenden Erfindung handelt es sich um ein Navigationssystem, welches einem Programmierer Zugriff auf jede gespeicherte Information über jeden beliebigen Teil eines Programmes bietet, von wo auch immer diese Information im Programm referenziert wird. Diese Information wird mittels einer einzigartigen grafischen Anwenderschnittstelle (GUI) zur Verfügung gestellt, welche dem Programmierer ein intuitives System bietet, mit dessen Hilfe er durch das Programm navigieren kann. Die Erfindung wird mittels einer bevorzugten Ausführungsform offenbart, welche eine populäre objektorientierte Programmiersprache (QOP), nämlich C++, verwendet, wobei aber die Prinzipien ebenso. für andere Computerprogrammiersprachen gelten, und zwar sowohl für objektorientierte als auch für prozedurale Programmiersprachen, und dazu verwendet werden können, Programme mit Hilfe von konventionellen und OOP-Sprachen zu erstellen.
- Die objektorientierte Programmierung (OOP) ist die bevorzugte Umgebung für die Erstellung anwenderfreundlicher, intelligenter Computersoftware. Schlüsselelemente von OOP sind Dateneinkapselung, Vererbung und Polymorphismus. Diese Elemente können verwendet werden, um eine graphische Anwenderschnittstelle (GUI) zu erzeugen, welche typischerweise gekennzeichnet ist durch eine Fensterumgebung mit Icons, Mauscursor und Menüs. Während diese drei Schlüsselelemente den OOP-Sprachen gemeinsam sind, implementieren die meisten OOP-Sprachen die drei Schlüsselelemente unterschiedlich.
- Beispiele für OOP-Sprachen sind Smalltalk, Object Pascal und C++. Smalltalk ist eigentlich mehr als eine Sprache: es könnte präziser als eine Programmierumgebung bezeichnet werden. Smalltalk wurde von der Learning Research-Gruppe im Pab Alto-Forschungszentrum (PARC) von Xerox in den frühen 70er-Jahren entwickelt. In Smalltalk wird eine Mitteilung zu einem Objekt gesandt, um das Objekt selbst zu bestimmen. Mitteilungen führen ähnliche Aufgaben aus wie Funktionsaufrufe in herkömmlichen Programmiersprachen. Der Programmierer muß sich nicht mit dem Datentyp beschäftigen; stattdessen muß sich der Programmierer nur um die Erstellung einer richtigen Mitteilungsreihenfolge kümmern und die richtige Mitteilung verwenden. Object Pascal ist jene Sprache, die für Apple Macintosh -Computer verwendet wird. Apple entwickelte Object Pascal in Zusammenarbeit mit Niklaus Wirth, dem Designer von Pascal. C++ wurde von Bjarne Stroustrup in den AT&T Bell-Laboratorien im Jahr 1983 als Erweiterung von C entwickelt. Das Schlüsselkonzept von C++ ist die Klasse, bei der es sich um einen anwenderdefinierten Typ handelt. Klassen bieten objektorientierte Programmierfunktionen. C++-Module sind kompatibel mit C-Modulen und können frei verknüpft werden, so daß bestehende C- Bibliotheken für C++-Programme verwendet werden können. Die am häufigsten verwendeten objektbasierten und objektorientierten Programmiersprachen leiten ihr Erbe von Simula ab, das in den 60er-Jahren dieses Jahrhunderts von O-J. Dahl, B. Myhrhaug und K. Nygard aus Norwegen entwickelt wurde. Weitere Informationen bezüglich OOP können in Object Oriented Design with Applications (Objektorientiertes Design mit Anwendungen) von Grady Booch, The Benjimin/Cummings Publishing Co., Inc., Redwood City, Calif. (1991), erhalten werden.
- Der vollständige Prozeß des Ausführens eines Computerprogramms umfaßt die Übersetzung des vom Programmierer geschriebenen Quellcodes in maschinenausführbare Form, auch als Objektcode bezeichnet, und die darauffolgende Ausführung des Objektcodes. Der Prozeß der Übersetzung wird von einem Interpreter oder Kompilierer ausgeführt. Im Falle eines Interpreters wird die Übersetzung zu jenem Zeitpunkt durchgeführt, an dem das Programm ausgeführt wird, wohingegen im Falle eines Kompilierers die Übersetzung vor der Ausführung des Programms durchgeführt und als Objektcode gespeichert wird. Das heißt, im herkömmlichen Kompilierungs- und Ausführungssystem laufen die zwei Phasen der Übersetzung und der Ausführung getrennt voneinander ab, wobei die Kompilierung nur einmal erfolgt. In einem interpretierenden System wie dem Smalltalk-Interpreter werden die beiden Phasen hintereinander durchgeführt. Ein Interpreter ist deshalb für Smalltalk erforderlich, weil die Natur der Programmierumgebung nicht die Kennzeichnung spezifischer Register oder Adreßräume erlaubt, solange ein Objekt nicht implementiert ist.
- Ein Kompilierer umfaßt drei Teile: den lexikalischen Analysator, den Syntaxanalysator und den Codegenerator. Bei der Eingabe in den lexikalischen Analysator handelt es sich um eine Buchstaben- und Zahlenfolge, welche ein Programm einer höheren Sprache darstellt. Der lexikalische Analysator unterteilt diese Folge in eine Folge von Zeichen, die in den Syntaxanalysator eingegeben werden. Der Syntaxanalysator unterteilt die Zeichen in Anweisungen und bestimmt mit Hilfe einer Datenbank mit grammatikalischen Regeln, ob eine Anweisung grammatikalisch korrekt ist oder nicht. Wenn nicht, wird eine Fehlermeldung erzeugt. Wenn sie richtig ist, wird die Anweisung in eine Folge von Basisanweisungen zerlegt, die zum Codegenerator übertragen werden, um eine Sprache niedriger Ebene zu ergeben. Der Codegenerator selbst ist typischerweise in drei Teile unterteilt: Zwischencodeerzeugung, Codeoptimierung und Codegenerierung. Grundsätzlich akzeptiert der Codegenerator die Ausgabe vom Syntaxanalysator und erzeugt den Maschinensprachencode.
- Um die Entwicklung von Software zu unterstützen, wurden inkrementelle Kompilierer entwickelt, in denen der Kompilierer in einem Stapelverarbeitungsprozeß Code für eine empfangene Anweisung oder eine Gruppe von empfangenen Anweisungen erzeugt, und zwar unabhängig vom Code, der später für andere Anweisungen erzeugt wird. Der Vorteil der inkrementellen Kompilierung besteht darin, daß Code für Teile eines Programms sofort nach der Erstellung kompiliert und getestet werden kann, und daß es nicht notwendig ist, den Fehlersuchvorgang zu verschieben, bis das gesamte Programm fertig geschrieben wurde. Herkömmliche inkrementelle Kompilierer müssen jedoch jedesmal ein komplettes Modul neu bearbeiten.
- Optimierende Kompilierer erzeugen einen höchst optimierten Objektcode, der in vielen Fällen die Fehlersuche an der Quellebene weit schwieriger macht als bei einem nicht optimierten Kompilierer. Das Problem liegt in der Tatsache begründet, daß, wenngleich eine Routine kompiliert wird, um die richtige Antwort zu geben, der exakte Weg für die Berechnung der Antwort sich wesentlich von jenem unterscheiden kann, der im Quellcode beschrieben ist. Manche Dinge, die der optimierende Kompilierer vielleicht tun kann, umfassen die Eliminierung von Code oder Variablen, von denen bekannt ist, daß sie das Endergebnis beeinflussen, das Verschieben von unveränderlichem Code aus den Schleifen, das Kombinieren von gemeinsamem Code, die Wiederverwendung von Registern, welche Variablen zugewiesen sind, wenn die Variable nicht mehr benötigt wird, usw. Somit kann die Zuordnung vom Quellcode zum Objektcode und umgekehrt bei manchen dieser Optimierungen schwierig sein. Das Überprüfen der Werte von Variablen kann schwierig sein, da der Wert der Variable nicht an allen Stellen innerhalb der Routine verfügbar sein muß. Die Modifizierung der Werte von Variablen in optimiertem Code ist besonders schwierig, wenn nicht überhaupt unmöglich. Wenn sie nicht spezifisch als flüchtig erklärt werden, "erinnert" sich der Kompilierer an Werte, die Variablen zugewiesen sind, und kann vielleicht den "bekannten" Wert später im Code verwenden, ohne die Variable erneut lesen zu müssen. Eine Anderung dieses Wertes könnte daher zu fehlerhaften Programmergebnissen führen.
- Wenngleich es viele Fortschritte im Bereich der Computerprogrammerstellung, des Testens und der Entwicklung gegeben hat, stellen die bekannten Softwareentwicklungswerkzeuge immer noch eine wesentliche Belastung für den Programmierer dar, da sie oftmals eine intuitive Erkenntnis erfordern. Darüberhinaus führen traditionelle stapelorientierte Programmiersysteme zu sehr langen Bearbeitungs- Kompilierungs-Test-Zyklen, was den kreativen Akt des Programmierens sehr behindert.
- Beachtliche Fortschritte wurden in der Entwicklung von graphischen Anwenderschnittstellen (GUIs) für Anwendungsprogramme gemacht, zuallererst mit der PARC Learning Research-Gruppe von Xerox und dem Apple Macintosh , und kürzlich mit der Einführung von Microsofts Windows und IBMs OS/2. Dem Programmentwickler wurden jedoch keine ähnlich intuitiven GUIs angeboten, um ihn bei den grundlegenden Aufgaben der Programmentwicklung zu unterstützen, insbesondere wenn es um komplexe Programme wie zum Beispiel Betriebssysteme geht. Ein Beispiel für ein neueres Werkzeug zur Softwarewartung findet sich in Software Practice & Experience, VIFOR: A Tool for Software Maintenance (Ein Werkzeug für Software-Wartung), Vol. 20, Nr. 1, Seiten 67-77 (1990). Der Artikel diskutiert ein Softwarewerkzeug, welches sich für die Wartung von mittleren bis großen Fortran77-Programmen eignet. Mit VIFOR können Programme auf zwei Arten dargestellt und bearbeitet werden: als Code und als graphische Darstellung. VIFOR enthält auch Umwandlungen in beide Richtungen, d.h. vom Code in die graphische Darstellung und von der graphischen Darstellung in Rohentwürfe in Code. Daher eignet es sich für die Nachbearbeitung und Wartung von bestehendem Code. Speziell gestaltete Durchsucher (Browser) implementieren die graphische Schnittstelle. VIFOR enthält eine Datenbank, welche auf einem einfachen, aber sehr wirkungsvollen Datenmodell von Fortran-Programmen basiert. Das Modell enthält nur vier Einheitenklassen und drei Relationen, wodurch das Werkzeug klein und leicht zu implementieren und anzuwenden ist. Eine einfache Abfragesprache ermöglicht das Durchblättern der Datenbank. Figur zeigt ein Fortran-Programm, welches einem Teil einer Fortran-Subroutine entspricht, wobei die Bezeichnung der Subroutine auch in einer hierarchischen Darstellung gezeigt wird, wobei die anderen bezeichneten Routinen dargestellt werden, aus denen sich das Programm "main" zusammensetzt.
- Es ist daher eine Aufgabe der vorliegenden Erfindung, einen auf Menschen ausgerichteten, interaktiven und dynamischen Prozeß zur Erstellung von Computerprogrammen zu schaffen, der einen besseren Programmiererfokus und eine bessere Konzentration und daher eine größere Produktivität ermöglicht.
- Es ist eine weitere Aufgabe der Erfindung, einem Programmierer Zugriff auf alle gespeicherten Informationen hinsichtlich eines beliebigen Programmteiles zu bieten, von wo auch immer sie im Programm referenziert werden.
- Es ist eine weitere Aufgabe der Erfindung, einem Programmierer eine intuitive graphische Anwenderschnittstelle zu bieten, welche ihn beim interaktiven und dynamischen Prozeß des Erstellens von Computerprogrammen unterstützt.
- Gemäß der Erfindung, wie sie in den angehängten Patentansprüchen definiert ist, wird ein System zum Navigieren innerhalb eines Computerprogramms geschaffen. Dies wird erreicht durch eine erste Modellierung des Computerprogramms als eine Sammlung von Komponenten und durch eine darauffolgende Speicherung der Komponenten im Speicher. Die Navigationsfunktion wird durchgeführt durch den Zugriff auf die gespeicherten Komponenten, basierend auf dem Computerprogramm. Das System reagiert auf eine Anwenderauswahl eines Abschnittes des Programmes durch Darstellung der mit dem Computerprogramm in Verbindung stehenden Information in einem ersten Fensterabschnitt auf einem Anzeigebildschirm. Ein zweiter Fensterabschnitt wird erzeugt, und eine Standardverknüpfung wird zwischen dem ersten Fensterabschnitt und dem zweiten Fensterabschnitt erstellt. Diese Verknüpfung, welche als ein "Schaltplan" dargestellt werden kann, bietet eine intuitive Durchblätterfunktion, welche dem Anwender hilft, die Beziehungen unterschiedlicher Module im Programm zu verstehen.
- Die bevorzugte Ausführungsform der Erfindung ist in C++ geschrieben und wird verwendet, um Programme in C++, C und Assembler zu erstellen, welche die derzeit bekanntesten und am meisten verwendeten Sprachen sind. Die unter Verwendung der Erfindung erstellten Programme verwenden typischerweise alle drei dieser Sprachen. Während somit die Erfindung selbst ein objektorientiertes Programm ist, welches in einer objektorientierten Programmiersprache geschrieben ist, ist es nicht darauf beschränkt, Programme in objektorientierten Programmiersprachen zu erstellen, sondern gleichermaßen von Nutzen bei der Erstellung von Programmen, die in prozeduralen Sprachen geschrieben sind. Darüberhinaus ist die Erfindung nicht auf die C++-Sprache beschränkt, sondern kann auch in andere Programmiersprachen implementiert werden, und die Erfindung ist in ihrer Anwendung nicht auf diese drei Sprachen beschränkt; das heißt, die Lehren der Erfindung können in einem auf den Menschen ausgerichteten objektorientierten Programmiersystem in einer allgemeineren Anwendung verwendet werden.
- Die zuvor erwähnten und andere Aufgaben, Aspekte und Vorteile werden besser mit Hilfe der folgenden detaillierten Beschreibung einer bevorzugten Ausführungsform der Erfindung unter Bezugnahme auf die Zeichnungen verstanden werden, in denen:
- Figur 1 ein bildhaftes Diagramm eines Allzweck- Computersystems ist, welches in der Lage ist, ein hochauflösendes Grafikanzeigegerät und ein Cursorzeigegerät wie zum Beispiel eine Maus zu unterstützen, auf welchem die Erfindung implementiert werden kann;
- Figur 2 ein Blockdiagramm des in Figur 1 dargestellten Allzweck-Computers ist, welches detaillierter die Hauptelemente des Computersystems darstellt;
- Figur 3 eine Datenstruktur gemäß einer bevorzugten Ausführungsform ist; und
- Figur 4-24 bildhafte Darstellungen von Computerbildschirmdarstellungen sind, welche typische Fenster gemäß einer bevorzugten Ausführungsform darstellen.
- Bezugnehmend auf die Zeichnungen und insbesondere auf Figur 1 wird ein Allzweck-Computersystem 10 dargestellt. Der Computer 10 besitzt eine Systemeinheit 12, ein hochauflösendes Anzeigegerät 14, wie zum Beispiel eine Kathodenstrahlröhrenanzeige (CRT), oder alternativ dazu eine Flüssigkristallanzeige (LCD) . Die Art der Anzeige ist nicht wichtig, außer daß es sich dabei um eine Anzeige handeln soll, die in der Lage ist, die für Windowsanwendungen benötigten hohen Auflösungen darzustellen, welche für graphische Anwenderschnittstellen (GUIs) typisch sind. Die Anwendereingabe in den Computer erfolgt durch eine Tastatur 16 und ein Cursorzeigegerät, wie zum Beispiel die Maus 18. Die Maus 18 ist mit der Tastatur 16 verbunden, welche wiederum mit der Systemeinheit 12 verbunden ist. Alternativ dazu kann die Maus 18 an einem dedizierten oder seriellen Port in der Systemeinheit 12 angeschlossen sein. Beispiele für Allzweckcomputer jener Art, wie sie in Figur 1 dargestellt ist, wären der Apple Macintosh (registriertes Warenzeichen von Apple Computer) und der IBM PS/2. Andere Beispiele umfassen verschiedene Workstations, wie zum Beispiel die IBM RISC System/6000 und die Sun Microsystems Computer.
- Figur 2 zeigt in näheren Einzelheiten die wichtigsten Elemente des in Figur 1 dargestellten Allzweck- Computersystems. Die Systemeinheit 12 umfaßt eine Zentralrecheneinheit (CPU) 21, einen Direktzugriffsspeicher (RAM) 22, und einen Nur-Lese-Speicher (ROM) 23, der direkt am Bus 24 angeschlossen ist. Bei der CPU 21 kann es sich um einen der am Markt erhältlichen Mikroprozessoren handeln, wie zum Beispiel die Prozessoren Motorola 68030 und 68040, welche gemeinhin in Apple Macintosh -Computern verwendet werden, oder den Mikroprozessoren 80386 und 80486, die gemeinhin in den IBM PS/2-Computern verwendet werden. Andere Mikroprozessoren, wie zum Beispiel die RISC-Mikroprozessoren (Abk. für "reduced instruction set computer", d.h. Computer mit reduziertem Befehlsvorrat), die typischerweise in Workstations Verwendung finden, können ebenso verwendet werden. Das ROM 24 speichert den grundlegenden Mikrocode, einschließlich des grundlegenden Eingabe-/Ausgabesystems (BIOS) für die CPU 21. Das Betriebssystem (OS) für das Computersystem 10 kann auch im ROM 24 gespeichert werden, oder alternativ dazu wird das OS im RAM 22 als Teil des Initialprogrammladens (IPL) gespeichert. RAM 22 wird auch zum Speichern von Teilen der Anwendungsprogramme und temporärer Daten verwendet, die bei der Ausführung der Programme erzeugt wurden. Bei dem Bus 24 kann es sich um den Apple NU- Bus , den IBM Microchannel oder um einen der Industriestandards handeln, wie zum Beispiel den ISA-Bus (Industriestandardadapter) oder den EISA-Bus (erweiterter Industriestandardadapter).
- Ebenfalls angeschlossen am Bus 24 sind verschiedene Eingabe-/Ausgabeadapter (E/A-Adapter), einschließlich eines Anwenderschnittstellenadapters 25 und eines E/A-Adapters 26. Die Tastatur 26 ist mit dem Anwenderschnittstellenadapter 25 verbunden, und der E/A-Adapter ist mit einem Diskettenlaufwerk 27 und einer Festplatte 28 verbunden. Das Diskettenlaufwerk 27 ermöglicht das Lesen und Schreiben von Daten und Programmen auf auswechselbaren Medien, während die Festplatte 28 typischerweise Daten und Programme speichert, die in das RAM 22 eingelagert und aus diesem ausgelagert werden. Das Anzeigegerät 14 ist mit dem Bus 24 über einen Anzeigeadapter 29 verbunden. Ein Kommunikationsadapter 30 bietet eine Schnittstelle zu einem Netzwerk. Andere unterstützende Schaltungen (nicht dargestellt) in Form von integrierten Schaltungs-(IC)-Chips sind am Bus 24 und/oder der CPU 21 angeschlossen. Diese würden zum Beispiel einen Busmasterchip umfassen, der den Verkehr am Bus 24 regelt. Der Bus 24 kann in manchen Computern aus zwei Bussen bestehen: einem Datenbus und einem Anzeigebus, wodurch eine schnellere Anzeigeoperation ermöglicht wird, was in einer graphischen Anwenderschnittstelle wünschenswert ist.
- Das menschenorientierte Objektprogrammiersystem (HOOPS) gemäß der Erfindung kann am Computer gestartet werden, indem entweder ein Projektname oder ein bereits bestehender Projektname eingegeben wird, was davon abhängt, ob ein neues Programm zu erstellen ist oder ein bestehendes Programm bearbeitet werden soll. Das erste Fenster, welches HOOPS öffnet, zeigt das Elementeneigentum der Projektkomponente und deren unmittelbare Elemente. Obwohl es zuerst nur die unmittelbaren Elemente zeigt, wird das selbe Fenster dazu verwendet, um jede Komponente beginnend an der Projektkomponente darzustellen.
- Das dynamische Schnellauswertungssystem von HOOPS ermöglicht es einem Anwender, auf dynamische Weise Programmdarstellungen zu erstellen. Das System ist auf eine rasche, dynamische Anderung oder Erstellung von Darstellungen ausgerichtet, und diese Darstellungen können für die spätere Wiederverwendung gespeichert werden. Auf diese Art können Anwender ein System maßschneidern.
- Das System basiert auf vier Hauptkomponenten: Betrachter, Fensterabschnitte, Fenster und Drähte. Das System bietet eine erweiterbare Gruppe von Betrachtern für die Darstellung verschiedener Aspekte eines Programms. Um einen Betrachter zu verwenden, muß er in einem Fensterabschnitt angezeigt werden, der in einem Fenster dargestellt wird. Ein Fenster kann einen oder mehrere Fensterabschnitte darstellen (und somit einen oder mehrere Betrachter), und die Fensterabschnitte können über Drähte miteinander verbunden sein, um die Navigationsoperationen zu ermöglichen, so daß eine große Vielfalt an Kombinationen erzeugt werden kann. Da die Gruppe der Betrachter erweiterbar ist, erlegt das System der Vielfalt an Darstellungen, die erzeugt werden können, keine inhärenten Grenzen auf.
- Das System kann auf jeden Bereich angewandt werden, der eine umfangreiche Gruppe an miteinander in Beziehung stehenden Daten aufweist, die insbesondere von hierarchischer oder miteinander vernetzter Natur sind, wie zum Beispiel die Darstellung eines Computerprogramms. Ein Beispiel für einen anderen Bereich wäre eine Schuldatenbank, wo es Studenten, Instruktoren und Klassen sowie verschiedene Beziehungen zwischen diesen gibt.
- Definitionen
- Wie in der Beschreibung der Erfindung verwendet, besteht ein HOOPS-Programm aus einer nichterstellbaren Komponente mit der Bezeichnung Projekt und einer Sammlung von "erstellbaren Komponenten". Es ist auch möglich, nichterstellbare Komponenten zu speichern, aber in dieser Beschreibung wird mit jeder nicht näher bezeichneten Komponente eine "erstellbare Komponente" gemeint. Nichterstellbare Komponenten werden während eines Erstellvorganges nicht kompiliert.
- Eine Komponente verfügt über eine einzigartige Identität und trägt einen Namen. Unterschiedliche Komponenten werden durch eine Art einzigartige Kennzeichnung unterschieden, welche als ID bezeichnet wird. Es gibt eine einzigartige ID mit der Bezeichnung NullID, welche zu keiner Komponente gehört. Die ID wird zugeordnet, wenn eine Komponente erstellt wird, und sie wird niemals geändert, solange diese Komponente existiert. Wenn eine Komponente gelöscht wird, wird deren ID niemals wieder verwendet. In der Praxis sind IDs für gewöhnlich numerisch.
- Eine Komponente verfügt auch über einen Namen, der aus einer Textzeichenfofge besteht, in der kein Leerraum enthalten ist. Es ist nicht erforderlich, daß unterschiedliche Komponenten unterschiedliche Namen haben müssen. Es ist möglich, eine Liste (die möglicherweise leer ist) aller Komponenten zu erhalten, deren Namen mit einer gegebenen Textfolge übereinstimmen. Der Name einer Komponente kann beliebig oft geändert werden, während diese Komponente existiert.
- Komponenten werden verwendet, um semantische Sprachelemente darzustellen. Die Art und Weise, wie dies geschieht, hängt von der jeweils modellierten Computersprache ab. Zum Beispiel umfaßt in C++ eine teilweise Liste von Sprachelementen, die durch Komponenten dargestellt werden, globale Daten, globale Funktionen, Klassen, Datenelemente, Elementfunktionen, Typedefs (Typendefinitionen), Enums, Aufzählungen, Macros, Einheiten und Strukturen. Typischerweise verfügt jedes semantische Element über eine zugehörige unterscheidende Art.
- Eine Komponente besteht aus einer Sammlung benannter Eigentümer. Ein Eigentum repräsentiert einige Daten, die mit der Komponente in Zusammenhang stehen. Es ist möglich, Daten mit der ID einer Komponente und einem Eigentümernamen zu laden oder zu speichern. In der Praxis werden Eigentümernamen für gewöhnlich intern durch Zahlen dargestellt, welche die Namen identifizieren (derartige Zahlen werden manchmal als Token bezeichnet). Es gibt einen einzigartigen Eigentümernamen mit der Bezeichnung Nullproperty, der keinem Eigentum gehört.
- Die mit einem gegebenen Eigentum im Zusammenhang stehenden Daten sind bei unterschiedlichen Komponenten anders. Das Ändern der Daten eines gegebenen Eigentums für eine Komponente impliziert nicht das Andern der Daten für dasselbe Eigentum einer anderen Komponente. Es ist jedoch möglich, daß die Änderung in einem Eigentum einer Komponente eine Änderung in einem anderen Eigentum derselben oder einer anderen Komponente verursacht.
- Alle Komponenten müssen die Eigentümer Name und Container aufweisen. Das Eigentum Name speichert den Namen der Komponente. Das Eigentum Container enthält eine einzelne Referenz, in welcher der Eigentümername NullProperty lautet. Beginnend bei einer beliebigen Komponente führt die aufeinanderfolgende Ersetzung derselben durch die Komponente, auf welche sich ihre Container-ID bezieht, schließlich immer zur Projektkomponente. Die Container-ID des Projekts ist NullID. Somit werden alle Komponenten als im Projekt enthalten beschrieben.
- Ein Paar, bestehend aus einer ID und einem Eigentümernamen, wird als eine Referenz bezeichnet. Eine Referenz identifiziert ein bestimmtes Stück Eigentümerdaten auf einzigartige Weise. Oft wird eine Referenz auf eine lose Art und Weise verwendet, so als ob es die Komponente und/oder das Eigentum wäre, auf das sie sich bezieht. In der Praxis enthält eine Referenz typischerweise andere Informationen, welche nicht direkt bei der Programmerstellung verwendet werden und festlegen, auf welche Version der Daten und auf welchen Unterabschnitt der Daten im Eigentum verwiesen wird. Es gibt hierbei eine einzigartige Referenz, nämlich die Nullreferenz, welche keine Komponente und kein Eigentum festlegt.
- Jede Komponente besitzt eine Art. Eine Art ist eine Textreihe, die verwendet wird, um Komponenten in Gruppen einzuteilen, welche zum Beispiel über dieselben Eigentümer oder dasselbe sprachenspezifische Verhalten verfügen. Die meisten Arten sind für eine bestimmte Computersprache eigentümlich und werden zur Bezeichnung semantisch unterschiedlicher Sprachenelemente verwendet.
- Es gibt jedoch auch einige Arten, die vom System definiert werden. Dies sind die Arten Projekt, Bibliothek und Container. Diese Arten werden nur bei nichterstellbaren Komponenten verwendet. Die Art Projekt ist die Art der Projekt-Komponente. Die Art Bibliothek wird auf Sammlungen von Komponenten angewandt, die in einen einzigen externen Block von Objektcode zu verknüpfen sind, wie zum Beispiel als eine gemeinsam verwendete Bibliothek oder eine Anwendung. Die Art Container wird für Komponenten verwendet, die zum Gruppieren anderer Komponenten für Organisationszwecke gebraucht werden. In der Praxis werden Komponenten intern für gewöhnlich auf numerische Art bezeichnet.
- Ein Betrachter ist eine graphische Darstellung, welche ein bestimmtes Eigentum einer Komponente darstellen soll. Im Zuge der Darstellung dieses Eigentums kann es jedoch notwendig und wünschenswert für den Betrachter sein, ergänzende Informationen darzustellen, einschließlich Daten von anderen Eigentümern. Ein Betrachter besitzt einen Eingang und einen Ausgang, wobei es sich bei beiden um Referenzen handelt. Der Eingang bezeichnet mindestens eine Komponente und ein Eigentum. Er kann zusätzlich einen Unterbereich der Eigentümerinformationen bezeichnen. Der Ausgang bezeichnet mindestens eine Komponente. Er kann auch ein Eigentum bezeichnen sowie einen Unterbereich der Eigentümerinformationen. Der Ausgang ändert sich typischerweise im Laufe der Zeit als Reaktion auf die Anwendermaßnahmen und Statusänderungen innerhalb des Systems.
- Ein Betrachter wird innerhalb eines Fensterabschnitts dargestellt. Ein Fensterabschnitt besitzt einen Eingang und einen Ausgang, bei denen es sich um Referenzen handelt. Der Eingang bezeichnet mindestens eine Komponente. Er kann auch ein Eigentum der Komponente und einen Unterabschnitt der Eigentümerinformationen bezeichnen. Der Ausgang bezeichnet mindestens eine Komponente, und möglicherweise ein Eigentum und einen Unterabschnitt der Eigentümerinformationen. Der Ausgang ändert sich typischerweise im Laufe der Zeit als Reaktion auf die Anwendermaßnahmen und die Statusänderungen innerhalb des Systems.
- Ein Fensterabschnitt bestimmt den Eingang seines Betrachters, und zwar im allgemeinen durch Ableitung desselben vom Fensterabschnittseingang. Die Natur dieser Ableitung kann von Fensterabschnitt zu Fensterabschnitt unterschiedlich sein, und zwar entweder dynamisch basierend auf dem Systemstatus, oder statisch durch unterschiedliche Implementationen von Fensterabschnitten. Die bevorzugte Ausführungsform bietet nur die einfachste Ableitung, in welcher der Eingang eines Betrachters identisch ist mit dem Eingang des Fensterabschnitts. Auf ähnliche Weise wird der Ausgang eines Fensterabschnitts vorn Ausgang des Betrachtes abgeleitet. Die Natur dieser Ableitung kann von Fensterabschnitt zu Fensterabschnitt unterschiedlich sein, und zwar entweder dynamisch basierend auf dem Systemstatus, oder statisch durch unterschiedliche Implementationen von Fensterabschnitten. Die bevorzugte Ausführungsform bietet nur die einfachste Ableitung, in welcher der Ausgang eines Fensterabschnitts identisch ist mit dem Ausgang seines Betrachters.
- Ein Durchsucher ist ein Fenster, welches einen oder mehrere Fensterabschnitte darstellt. Das Layout und die Anzahl der Fensterabschnitte in einem Fenster können von einem Anwender dynamisch gesteuert werden. Ein Durchsucher besitzt einen Eingang, bei dem es sich um eine Referenz handelt. Der Eingang des Durchsuchers dient als Eingang für den ersten Fensterabschnitt des Durchsuchers, bei dem es sich typischerweise um jenen Fensterabschnitt handelt, die die linke obere Ecke des Durchsuchers einnimmt.
- Ein Draht ist eine Verbindung zwischen zwei Fensterabschnitten. Der Zweck eines Drahtes besteht darin, den Ausgang eines Fensterabschnittes zu ermöglichen, um den Eingang eines anderen Fensterabschnittes zu steuern. So wie Fensterabschnitte und Betrachter besitzt der Draht einen Eingang und einen Ausgang, bei welchen es sich um Referenzen handelt. Um eine Verbindung zwischen zwei Fensterabschnitten zu erstellen, wird der Ausgang eines Fensterabschnittes mit dem Eingang eines Drahtes verbunden. Der Ausgang desselben Drahtes wird mit dem Eingang des zweiten Fensterabschnittes verbunden, wodurch die Verbindung errichtet wird.
- Ein Draht leitet seinen Ausgang von seinem Eingang ab. Die Natur dieser Ableitung kann von Draht zu Draht unterschiedlich sein, und zwar entweder dynamisch basierend auf einem Systemstatus, oder statisch durch unterschiedliche Implementationen von Drähten.
- Ein Draht kann seinen Eingang umwandeln, bevor er ihn als Drahtausgang weiterleitet. Es können unterschiedliche Implementierungen von Drähten zur Errichtung von Verbindungen verwendet werden, und jede Implementierung kann eine unterschiedliche Art der Umwandlung enthalten. Die bevorzugte Ausführungsform bietet nur die einfachste Ableitung, in der der Eingang des Drahtes unverändert durch den Draht zu seinem Ausgang weitergeleitet wird. Der Ausgang eines Fensterabschnittes kann mit jeder beliebigen Anzahl an Drähten verbunden werden. Dies schafft einen Mechanismus, in welchem der Ausgang eines einzelnen Fensterabschnittes den Eingang einer beliebigen Anzahl anderer Fensterabschnitte "steuert". Ein Anwender kann auf dynamische Weise die Verbindungen zwischen Fensterabschnitten steuern.
- Um unterschiedliche Darstellungen desselben Eigentums zu ermöglichen und um die Verwendung derselben Betrachterimplementationen für unterschiedliche Eigentümer zu ermöglichen, bietet das System einen Mechanismus zur Zuordnung von Eigentümern mit Hilfe von Betrachtern.
- In einer bevorzugten Ausführungsform wird diese Verknüpfung durch eine Gruppe von Betrachterlisten erzielt, von denen eine jede einzelne einer beliebigen Anzahl von Eigentümern zugeordnet werden kann. Eine Betrachterliste ist eine benannte Liste von Betrachterspezifikationen, in der jede einzelne Spezifikation einen Betrachternamen und die Implementationsklasse definiert. Figur 3 zeigt eine vereinfachte Version der Betrachterlisten in der bevorzugten Ausführungsform. Die erste Liste trägt die Bezeichnung "MembersViewers" (Elementebetrachter) Sie enthält Spezifikationen für zwei Betrachter. Die erste trägt die Bezeichnung "Outline" (Entwurf) und wird von der TNewOutlineViewer-Klasse in der Betrachterbibliothek implementiert. Die zweite Spezifikation in der Liste trägt die Bezeichnung "Tree" (Baum) und wird von der Tnewtreeviewer-Klasse in der Betrachter-Bibliothek implementiert.
- Jedes einzelne Eigentum ist einer einzigen Betrachterliste zugeordnet. Zum Beispiel zeigt die untenstehende Tabelle die Eigentümer einer Projektkomponente, und die den einzelnen Eigentümern zugeordneten Betrachterlisten.
- Eigentum Viewer List (Betrachterliste)
- Elemente MembersViewers
- Beschreibung DescriptionViewers
- Macroänderungen GroupViewers
- Schnittstellenänderungen GroupViewers
- Implementationsänderungen GroupViewers
- Erstellungsfehler ErrorListViewers
- Komponentenerstellung GroupViewers
- Kompilierer
- Klienten DerivedReferencesViewers
- Referenzen DerivedReferencesViewers
- In diesem Beispiel kann das Elementeneigentum durch die Betrachter dargestellt werden, die in der MembersViewers-Liste angeführt werden. Bezugnehmend auf Figur 3 enthält die Membersviewers-Liste zwei Betrachter, den Outline- Betrachter und den Tree-Betrachter. Daher kann das Elementeneigentum einer Projektkomponente entweder vom Tree- Betrachter oder vorn Outline-Betrachter dargestellt werden.
- Die Tabelle zeigt auch, daß manche Eigentümer derselben Betrachterliste zugeordnet sind, wodurch gezeigt wird, daß die selben Betrachter für unterschiedliche Eigentümer verwendet werden können. Dem Kompilierereigentum ist keine Betrachterliste zugeordnet, was darauf hinweist, daß das Kompilierereigentum überhaupt nicht dargestellt werden kann. Das erste Eigentum in der Tabelle wird als das Standardeigentum der Komponente betrachtet, die verwendet wird, um zu bestimmen, welches Eigentum und welcher Betrachter in einem Fensterabschnitt darzustellen sind.
- Im folgenden findet sich eine Beschreibung der wichtigsten Prozeduren des Durchsuchersystems.
- 1. Suche nach dem Betrachternamen in der Betrachterliste, welche dem dargestellten Eigentum zugeordnet ist.
- 2. Wenn der Betrachtername gefunden ist, gehe zu Schritt 5.
- 3. Der Betrachtername wurde nicht gefunden. Leere den Fensterabschnitt.
- 4. Gehe zu Schritt 5.
- 5. Erstelle einen Betrachter jener Klasse, welche dem Betrachternamen in der Betrachterliste zugeordnet ist.
- 6. Stelle den Eingang des Betrachters auf den Eingang des Fensterabschnitts ein.
- 7. Installiere den Betrachter im Fensterabschnitt und stelle ihn dar.
- 8. Ende der Prozedur.
- Prozedur B: Eigentum eines Fensterabschnitts einstellen
- 1. Stelle den Eigentümernamen des Fensterabschnitts auf den angegebenen Eigentümernamen ein.
- 2. Aktualisiere den Titelbalken des Fensterabschnitts, um den angegebenen Eigentümernamen darzustellen.
- 3. Erlange das Eigentum des angegebenen Namens von der Eingangskomponente des Fensterabschnitts.
- 4. Erlange die Betrachterliste des Eigentums.
- 5. Wenn nur ein einziger Betrachter in der Liste vorhanden ist, gehe zu Schritt 7.
- 6. Erstelle das Betrachtermenü durch Erstellung eines Menüpunktes für jeden einzelnen Eintrag in der Betrachterliste.
- 7. Rufe Prozedur A auf, um den Betrachter des Fensterabschnitts einzustellen, und verwende dazu den ersten Betrachternamen aus der Betrachterliste.
- 8. Ende der Prozedur
- 1. Wenn es sich bei der Referenz nicht um die Nullreferenz handelt, gehe zu Schritt 3.
- 2. Die Referenz ist Null. Stelle den Fensterabschnitt auf den leeren Zustand ein. Gehe zu Schritt 12.
- 3. Stelle den Komponentennamen in dem Titelbalken des Fensterabschnitts auf die durch die Referenz bezeichnete Komponente ein.
- 4. Fülle das Popup-Menü "Eigentümer" mit den Namen der Eigentümer der Komponente aus, welche von der Referenz bezeichnet wird.
- 5. Wenn der Fensterabschnitt eigentumsverriegelt ist, gehe zu Schritt 9.
- 6. Wenn die Referenz nicht ein Eigentum festlegt, gehe zu Schritt 8.
- 7. Die Referenz legt ein Eigentum fest. Rufe Prozedur B auf, um das Eigentum des Fensterabschnitts auf das Eigentum der Referenz einzustellen. Gehe zu Schritt 12.
- 8. Die Referenz legt kein Eigentum fest. Erlange die von der Referenz zugewiesene Komponente, und rufe Prozedur B auf, um das Eigentum des Fensterabschnitts auf das Standardeigentum der Komponente einzustellen. Gehe zu Schritt 12.
- 9. Der Fensterabschnitt ist eigentumsverriegelt. Erlange die von der Referenz festgelegte Komponente. Wenn die Komponente nicht über das Eigentum des Fensterabschnitts verfügt, gehe zu Schritt 11.
- 10. Die Komponente verfügt über das verriegelte Eigentum. Rufe Prozedur B auf, um das Eigentum des Fensterabschnitts auf das verriegelte Eigentum einzustellen. Gehe zu Schritt 12.
- 11. Die Komponente verfügt nicht über das verriegelte Eigentum. Im Fensterabschnitt ist kein Betrachter installiert.
- 12. Ende der Prozedur.
- 1. Erstelle eine Referenz, welche den neuen Ausgang des Betrachters darstellt.
- 2. Rufe Prozedur E auf, um den Ausgang des Fensterabschnitts einzustellen.
- 3. Ende der Prozedur.
- 1. Wandle den Ausgang des Betrachters in den Ausgang des Fensterabschnitts um. (Im einfachsten Fall sind beide Ausgänge gleich.)
- 2. Rufe für jeden Draht, der an dem Ausgang des Fensterabschnitts angeschlossen ist, die Prozedur F auf, um den Eingang des Drahtes auf den Ausgang des Fensterabschnittes einzustellen.
- 3. Ende der Prozedur
- 1. Wandle die gegebene Referenz in den Ausgang des Drahtes um. (Im einfachsten Fall ist der Ausgang gleich wie die gegebene Referenz.)
- 2. Rufe Prozedur C auf, um den Eingang des verbundenen Fensterabschnittes auf den Ausgang des Drahtes einzustellen.
- 3. Ende der Prozedur
- 1. Erstelle einen neuen Draht.
- 2. Füge den Draht der Drahtgruppe des Ausgangsfensterabschnitts hinzu.
- 3. Verbinde den Draht mit dem Eingangsfensterausschnitt.
- 4. Stelle den Eingang des Drahtes mit Hilfe der Prozedur F ein.
- 5. Ende der Prozedur.
- 1. Erstelle ein neues Fensterabschnittsobjekt
- 2. Stelle die Abmessungen des neuen Fensterabschnitts auf die angegebenen Abmessungen ein.
- 3. Stelle die Abmessungen des vorhandenen Fensterabschnitts ein, um für den neuen Fensterabschnitt Platz zu machen.
- 4. Verbinde den bestehenden Fensterabschnitt mit Hilfe der Prozedur G mit dem neuen Fensterabschnitt.
- 5. Ende der Prozedur.
- 1. Erstelle das Durchsucherobjekt.
- 2. Stelle den Eingang des Durchsuchers auf die angegebene Referenz ein.
- 3. Erstelle ein neues Fensterabschnittsobjekt, dessen Abmessungen den Durchsucher ausfüllen.
- 4. Stelle den Eingang des Fensterabschnitts mit Hilfe der Prozedur C auf den Eingang des Durchsuchers ein.
- 5. Ende der Prozedur.
- Figur 4 zeigt einen Durchsucher gemäß einer bevorzugten Ausführungsform. Es gibt spezifische Kontrollen für jeden Durchsucher, jeden Fensterabschnitt und jeden Betrachter.
- Jeder Durchsucher besitzt die folgenden Kontrollen. Das Schließen-Icon 1210 kann dazu verwendet werden, um das Fenster jederzeit zu schließen. Jede Änderung, die am Projekt durchgeführt wurde, während es sich im Durchsucher befand, wird automatisch gespeichert. Die Zoom-Box 1242 des Durchsuchers ermöglicht es dem Anwender, den Durchsucher auf die gesamte Bildschirmgröße zu vergrößern.
- Jeder Fensterabschnitt verfügt über die folgenden Kontrollen. Die Titelleiste 1240 des Fensterabschnittes zeigt den Namen des Eigentums an, das im Fensterabschnitt 1230 dargestellt ist, und der Name der Komponente wird in 1240 dargestellt. Die Fensterabschnittsteiler 1250 ermöglichen es dem Anwender, einen Fensterabschnitt in zwei Fensterabschnitte zu teilen und die Abmessungen eines Fensterabschnitts zu steuern. Die Zoom-Box 1243 des Fensterabschnitts ermöglicht es einem Anwender, auf dynamische Weise einen Fensterabschnitt zu vergrößern, um ein Fenster vollständig auszufüllen, oder einen vergrößerten Fensterabschnitt zurück auf seine ursprünglichen Abmessungen zu verkleinern. Das Eigentümer-Popupmenü 1220 ermöglicht es einem Anwender, jedes beliebige Eigentum der Eingangskomponente 1240 auszuwählen, und somit das in einem Fensterabschnitt dargestellte Eigentum zu verändern. Die Fensterabschnittseigentumsverriegelung 1211 ermöglicht es dem Anwender, einen Fensterabschnitt auf ein bestimmtes Eigentum zu verriegeln, und zwar unabhängig vorn Eingang in den Fensterabschnitt. Horizontale und vertikale Rollkontrollen 1252 ermöglichen es einem Anwender, den Inhalt eines Betrachters innerhalb eines Fensterabschnitts zu rollen. Die Titelleiste 1251 des Betrachters enthält Menüs, welche für den Betrachter Gültigkeit besitzen, der in einem Fensterabschnitt dargestellt ist. Insbesondere dann, wenn das im Fensterabschnitt dargestellte Eigentum von mehr als einem Betrachter dargestellt werden kann, enthält die Titelleiste des Betrachters ein Betrachter-Menü 1253, welches von einem Anwender dazu verwendet werden kann, um eine Auswahl aus den Betrachtern zu treffen, welche dazu verwendet werden, das Eigentum darzustellen.
- Es gibt auch Kontrollen zur Errichtung von Verbindungen zwischen Fensterabschnitten. Wenn ein neuer Fensterabschnitt erstellt wird, wird eine Standardverbindung von dem geteilten Fensterabschnitt zum neuen Fensterabschnitt errichtet. Um die Verbindungen zu ändern, legt eine bevorzugte Ausführungsform graphische Drähte über einen Durchsucher, wie dies in Figur 5 dargestellt ist, und ein Anwender kann neue Drähte zeichnen, um die Fensterabschnittsverbindungen zu ändern. In Figur 5 wird der Eingang des Durchsuchers mit dem Eingang des linken Fensterabschnitts verbunden, und der Ausgang des linken Fensterabschnitts wird mit dem Eingang beider Fensterabschnitte auf der rechten Seite verbunden. Die Ausgänge der Fensterabschnitte auf der rechten Seite sind mit keinem anderen Fensterabschnitt verbunden. Um die Verbindungen zu ändern, zum Beispiel durch Verbinden des Ausganges des oberen rechten Fensterabschnitts mit dem Eingang des unteren rechten Abschnitts, würde ein Anwender einfach einen neuen Draht vorn oberen rechten Fensterabschnitt zum unteren rechten Fensterabschnitt ziehen.
- Die folgenden Szenarien zeigen, wie das dynamische Durchsuchersystem in der Praxis mit Hilfe eines Programmes verwendet werden kann, welches auf dem bekannten Computerwissenschaftsproblem mit der Bezeichnung "Türme von Hanoi" basiert.
- Figur 6 zeigt einen Durchsucher, der einen einzigen Fensterabschnitt enthält, wie er nach dem Öffnen des Türme von Hanoi'-Programmierprojekts dargestellt werden könnte. Der Betrachter stellt die Hierarchie der Komponenten im Projekt dar, wobei jede einzelne Komponente von einem Icon und dessen Namen repräsentiert wird. Manche Teile der Hierarchie sind zusammengefaltet, um nur jene Komponenten darzustellen, welche momentan von Interesse sind. Der Durchsucher wurde mit Hilfe der Prozedur I und einer Referenz auf die Projektkomponente als Eingang erzeugt. Prozedur I ruft Prozedur C auf, um den Eingang des Fensterabschnittes auf die Projektkomponente einzustellen. Prozedur C wiederum ruft Prozedur B auf, um das Eigentum des Fensterabschnitts einzustellen. Da die Referenz auf das Projekt kein Eigentum festgelegt hat, wurde das Standardeigentum Members' (Elemente) (eine Baurndatenstruktur) verwendet. Schließlich ruft Prozedur B die Prozedur A auf, um den Betrachter des Fensterabschnitts einzustellen. Die Eigentümerbetrachterliste Members' enthält zwei Betrachter, nämlich Tree und Outline. Daher wurde das Betrachtermenü mit Einträgen für jeden einzelnen Betrachter erstellt, und der erste Betrachter in der Liste (Outline) wurde dargestellt.
- In Figur 7 wird das Betrachterrnenü geöffnet, welches anzeigt, daß das Member'-Eigentum von zwei Betrachtern dargestellt werden kann, nämlich von Tree und Outline. Durch die Auswahl des Menüpunktes Tree wird die Prozedur A aufgerufen, wodurch der Outline-Betrachter durch den Tree- Betrachter ersetzt wird, und das Ergebnis wird in Figur 8 dargestellt.
- In Figur 9 wird das Eigentümer-Popupmenü geöffnet, welches die darstellbaren Eigentümer der Projektkomponente anzeigt, die durch die Prozedur C erhalten wurden. Figur 10 zeigt das Ergebnis nach der Auswahl des Punktes Beschreibung im Popup-Menü. Dadurch wird Prozedur B aufgerufen, um das Eigentum Beschreibung' der Projektkomponente anzuzeigen. Es steht nur ein Betrachter für das Eigentum Beschreibung' zur Verfügung, so daß das Betrachter-Menü nicht benötigt wird.
- Angenommen, der Anwender hat das Eigentum auf das Members'-Eigentum zurückgestellt, was wieder zu Figur 6 führt.
- Figur 11 zeigt das Ergebnis, nachdem der Anwender den Fensterabschnitt mit Hilfe der vertikalen Fensterabschnittsteilkontrolle in zwei Fensterabschnitte unterteilt hat, was mit Prozedur H durchgeführt wird. Der Eingang des rechten Fensterabschnittes wird mit dem Eingang des linken Fensterabschnittes verbunden, wie dies graphisch durch den Pfeil in Figur 12 dargestellt wird. Weil es sich bei dem Ausgang des linken Fensterabschnitts um eine Nullreferenz handelt, ist der Eingang des neuen Fensterabschnitts ebenfalls eine Nullreferenz, und dies führt gemäß Prozedur C zu einem leeren Fensterabschnitt.
- Figur 13 zeigt die Ergebnisse, nachdem der Anwender das Icon auswählt, welches die Klassenkomponenten im linken Betrachter darstellt. Dadurch erzeugt der linke Betrachter einen neuen Ausgang, eine Referenz zur Klassenkomponente. Prozedur D wird aufgerufen, um den neuen Ausgang zu verwalten, und sie ruft Prozedur C auf, um den Eingang des rechten Fensterabschnittes auf die Referenz zu den Klassen einzustellen. Da die Referenz kein Eigentum festlegt, wird Prozedur B mit Hilfe des standardmäßigen Elementeeigentums (Members) der Klassen aufgerufen. Das Elementeeigentum besitzt zwei Betrachter, nämlich Outline und Tree, so daß Prozedur B ein Betrachtermenü konstruiert und Prozedur A am ersten Betrachter, dem Outline-Betrachter, aufruft.
- Figur 14 zeigt die Ergebnisse, nachdem der Anwender das Icon ausgewählt hat, welches die TPicture-Komponente im linken Betrachter repräsentiert. Dies verändert den Ausgang des linken Betrachters in eine Referenz zur TPicture- Komponente. Die Prozedur D wird wiederum aufgerufen, und sie ruft die Prozedur C auf, um den Eingang des rechten Fensterabschnitts auf die Referenz auf TPicture einzustellen. Wiederum legt die Referenz kein Eigentum fest, so daß die Prozedur C die Prozedur B mit Hilfe des Standardeigentums von Tpicture aufruft, welches die Bezeichnung Schnittstelle trägt. Es gibt nur einen Betrachter für dieses Eigentum, so daß kein Betrachtermenü erzeugt wird und der Betrachter mit Hilfe der Prozedur A dargestellt wird.
- Figur 15 zeigt das Ergebnis, nachdem der Anwender auf die Zoom-Kontrolle des rechten Fensterabschnitts geklickt hat. Der Fensterabschnitt füllt nun den gesamten Durchsucher aus. Durch das Anklicken der Zoom-Kontrolle kehrt die Anzeige wieder zu jener in Figur 14 dargestellten Anzeige zurück.
- Figur 16 zeigt das Ergebnis, nachdem der Anwender den rechten Fensterabschnitt mit dem horizontalen Fensterabschnittsteiler geteilt hat. Figur 17 zeigt die Fensterabschnittsverbindungen. Der Eingang des Durchsuchers ist verbunden mit dem Eingang des linken Fensterabschnitts. Der Ausgang des linken Fensterabschnitts ist verbunden mit dem Eingang des oberen rechten Fensterabschnitts. Der Ausgang des oberen rechten Fensterabschnitts ist verbunden mit dem Eingang des unteren rechten Fensterabschnitts. Da es sich bei dem Ausgang des oberen rechten Fensterabschnitts um eine Nullreferenz handelt, ist der untere rechte Fensterabschnitt leer.
- Figur 18 zeigt das Ergebnis, nachdem die Zeichnen- Komponente im oberen rechten Fensterabschnitt ausgewählt wurde. Dies führt zur Erzeugung eines neuen Ausgangs im oberen rechten Betrachter, welcher von der Prozedur D verwaltet wird. Dies erzeugt einen neuen Eingang für den unteren rechten Fensterabschnitt, der von der Prozedur C verwaltet wird. Weil der Eingang kein Eigentum bezeichnet, wird das standardmäßige Eigentum der Zeichnen-Komponente, das Implementationseigentum, im unteren rechten Fensterabschnitt dargestellt.
- Figur 19 zeigt das Ergebnis nach der Auswahl der Fehlersuchkomponente im oberen rechten Fensterabschnitt, was zur Erstellung eines neuen Ausgangs führt, welcher von der Prozedur D verwaltet wird.
- Figur 20 zeigt die Verwendung der Verbindungskontrollen zur Verbindung des Ausgangs des linken Fensterabschnittes mit dem Eingang beider rechter Fensterabschnitte. Nun empfangen beide rechten Fensterabschnitte denselben Eingang, in diesem Fall eine Referenz auf die TPicture- Komponente.
- Figur 21 zeigt das geöffnete Eigentümermenü des unteren rechten Fensterabschnittes. Figur 22 zeigt das Ergebnis, nachdem der Anwender das Beschreibungseigentum aus dem Menü ausgewählt hat. Beide rechten Fensterabschnitte besitzen immer noch denselben Eingang, nämlich eine Referenz auf TPicture. Weil jedoch ein unterschiedliches Eigentum im unteren rechten Fensterabschnitt ausgewählt wurde, stellt jeder Fensterabschnitt ein unterschiedliches Eigentum von TPicture dar.
- Figur 23 zeigt das Ergebnis, nachdem der Anwender das Icon der TDisk-Komponente im linken Fensterabschnitt ausgewählt hat. Dadurch erzeugt der linke Betrachter einen neuen Ausgang, nämlich eine Referenz auf TDisk, und die Prozedur D wird aufgerufen, wodurch die Referenz auf TDisk zum Eingang für beide Fensterabschnitte auf der rechten Seite wird. Der obere rechte Fensterabschnitt zeigt das Schnittstelleneigentum von TDisk an, und der untere rechte Fensterabschnitt zeigt das Beschreibungseigentum von TDisk an.
- Figur 24 zeigt das Ergebnis, nachdem der Anwender das Icon der Klassenkomponente im linken Fensterabschnitt ausgewählt hat. Dadurch erzeugt der linke Betrachter einen neuen Ausgang, nämlich eine Referenz zu Klassen, und diese Referenz wird als Eingang in beide Fensterabschnitte auf der rechten Seite zugeführt. Weil die Referenz kein Eigentum festlegt, verwendet der obere rechte Fensterabschnitt das Standardeigentum seines Eingangs im Falle des Elementeeigentums. Der untere rechte Fensterabschnitt stellt das Beschreibungseigentum dar, weil er mit diesem Eigentum verriegelt ist.
Claims (12)
1. Ein Verfahren zum dynamischen Durchblättern eines
Computerprogramms zur Anzeige von Programminformation auf
einer Anzeigevorrichtung (14), wobei die
Programminformation (1200-1260) in einer Anzahl
von Fensterabschnitten dargestellt wird, das Verfahren
enthält die Schritte:
(a) Modellierung eines Computerprogramms als eine
Sammlung von Komponenten (1203), jede Komponente
besitzt Eigentumsinformation, die sich auf die
Komponente und auf eine Referenz auf eine andere
Komponente der Sammlung von Komponenten beziehen
(1230);
(b) Speichern der Komponenten, der Eigentumsinformationen
und der Referenz in einem Speicher (22, 23, 27);
(c) Erzeugen eines ersten Sichtfensterabschnitts, der
einen Eingang zum Empfang einer Referenz auf eine
betrachtete Komponente enthält, Anzeigen von
Eigentumsinformation der betrachteten Komponente auf
der Anzeigevorrichtung, wobei besagter erster
Sichtfensterabschnitt einen Ausgang zur Erzeugung
einer Referenz auf eine andere Komponente enthält
(1220);
(d) Anwenden der Referenz der ersten Komponente auf den
ersten Sichtfensterabschnitt zum Zugriff auf
gespeicherte Eigentumsinformation, die durch einen
zweiten Sichtfensterabschnitt darstellbar ist, und
auf die gespeicherte Referenz auf die erste
Komponente, und Veranlassen des ersten
Sichtfensterabschnitts zur Anzeige von
Eigentumsinformation von der ersten Komponente
(1203); und
(e) Beantwortung einer Auswahl der angezeigten
Eigentumsinformation zur Anwendung der gespeicherten
Referenz auf den Ausgang des ersten
Sichtfensterabschnitts (1220), und Verbinden des
Ausgangs des ersten Sichtfensterabschnitts mit dem
Eingang von einem oder mehreren weiteren
Sichtfensterabschnitten, wobei auf der
Anzeigevorrichtung Eigentumsinformation der durch die
Referenz angegebenen Sammlung von Komponenten in dem
einen weiteren Sichtfensterabschnitt oder in den
mehreren weiteren Sichtfensterabschnitten angezeigt
werden.
2. Das Verfahren nach Anspruch 1, enthaltend die Schritte:
(f) Erzeugen eines zweiten Sichtfensterabschnitts, das
einen Eingang zum Empfang einer Referenz auf eine
betrachtete Komponente aufweist, Mittel zur Anzeige
auf der Anzeigevorrichtung von Eigentumsinformation
der betrachteten Komponente und ein Ausgang zur
Erzeugung einer Referenz auf eine Komponente (1230);
(g) Anwenden der Referenz der Komponente auf den Ausgang
des ersten Sichtfensterabschnitts zum Eingang des
zweiten Sichtfensterabschnitts für einen Zugriff auf
gespeicherte Eigentumsinformation und eine
gespeicherte Referenz zu einer zweiten Komponente und
Veranlassen des zweiten Sichtfensterabschnitts zur
Anzeige von Eigentumsinformation von der zweiten
Komponente (1230-1252).
3. Das Verfahren nach Anspruch 2, worin der erste
Sichtfensterabschnitt und der zweite Sichtfensterabschnitt
in ihrer Größe dynamisch veränderbar sind (1242, 1243,
1250, 1252, 1260).
4. Das Verfahren nach Anspruch 1, worin die Sammlung von
Komponenten eine variable Komponente enthält, die eine
Programm-Variable darstellt und die Eigentumsinformation
für die variable Komponente Definitionsinformation zur
Definition der Programm-Variablen aufweist, und worin
Schritt (d) den Schritt enthält:
(d1) Anzeige der Definitionsinformation von der ersten
Komponente (1230).
5. Das Verfahren nach Anspruch 1, worin die
Eigentumsinformation für die erste Komponente beschreibende
Information enthält zur Beschreibung der erste Komponente
und worin Schritt (d) den Schritt enthält:
(d2) Anzeige der beschreibenden Information von der ersten
Komponente (1260).
6. Das Verfahren nach Anspruch 1, worin die
Eigentumsinformation für die erste Komponente Information
zur Identifizierung anderer Komponenten der Sammlung von
Komponenten enthält, die durch die erste Komponente
bezeichnet werden, und worin Schritt (d) den Schritt
enthält:
(d3) Identifizierung anderer Komponenten der Sammlung von
Komponenten, die durch die erste Komponente
bezeichnet werden (1202-1260, Figur 8).
7. Ein System mit mehreren Sichtfensterabschnitten zum
dynamischen Durchblättern eines Computerprogramms zur
Anzeige von Programminformation auf einer
Anzeigevorrichtung (14) als Reaktion auf Anzeigekommandos
von einem Benutzer, enthaltend:
(a) von einem Benutzer gesteuerte Mittel zur Modellierung
eines Computerprogramms als eine Sammlung von
Komponenten (1203), jede Komponente besitzt
Eigentumsinformation, die sich auf die Komponente und
auf eine Referenz auf eine andere Komponente der
Sammlung von Komponenten beziehen (1230);
(b) von einem Benutzer gesteuerte Mittel zum Speichern
der Komponenten, der Eigentumsinformationen und der
Referenz in einem Speicher (22, 23, 27);
(c) Mittel, die auf eines der Benutzerkommandos
ansprechen, zum Erzeugen eines ersten
Sichtfensterabschnitts, der einen Eingang zum Empfang
einer Referenz auf eine betrachtete Komponente
enthält, Anzeigen von Eigentumsinformation der
betrachteten Komponente auf der Anzeigevorrichtung,
wobei besagter erster Sichtfensterabschnitt einen
Ausgang zur Erzeugung einer Referenz auf eine andere
Komponente enthält (1220);
(d) erste Mittel, die auf ein anderes der
Benutzerkommandos ansprechen, zum Anwenden der
Referenz der ersten Komponente auf den ersten
Sichtfensterabschnitt zum Zugriff auf gespeicherte
Eigentumsinformation, die durch einen zweiten
Sichtfensterabschnitt darstellbar ist, und auf die
gespeicherte Referenz auf die erste Komponente, und
Veranlassen des ersten Sichtfensterabschnitts zur
Anzeige von Eigentumsinformation von der ersten
Komponente (1203); und
(e) zweite Mittel, die auf eine Auswahl von angezeigter
Eigentumsinformation ansprechen, zur Anwendung der
gespeicherten Referenz auf den Ausgang des ersten
Sichtfensterabschnitts (1220), und Verbinden des
Ausgangs des ersten Sichtfensterabschnitts mit dem
Eingang von einem oder mehreren weiteren
Sichtfensterabschnitten, wobei auf der
Anzeigevorrichtung Eigentumsinformation der durch die
Referenz angegebenen Sammlung von Komponenten in dem
einen weiteren Sichtfensterabschnitt oder in den
mehreren weiteren Sichtfensterabschnitten angezeigt
werden.
8. Das System nach Anspruch 7, enthaltend:
(f) Mittel, die auf eines der Anzeigekommandos
ansprechen, zum Erzeugen eines zweiten
Sichtfensterabschnitts, das einen Eingang zum Empfang
einer Referenz auf eine betrachtete Komponente
aufweist, Mittel zur Anzeige auf der
Anzeigevorrichtung von Eigentumsinformation der
betrachteten Komponente und ein Ausgang zur Erzeugung
einer Referenz auf eine Komponente (1230);
(g) Mittel, die auf ein anderes der Benutzerkommandos
ansprechen, zum Anwenden der Referenz der Komponente
auf den Ausgang des ersten Sichtfensterabschnitts zum
Eingang des zweiten Sichtfensterabschnitts für einen
Zugriff auf gespeicherte Eigentumsinformation und
eine gespeicherte Referenz zu einer zweiten
Komponente und Veranlassen des zweiten
Sichtfensterabschnitts zur Anzeige von
Eigentumsinformation von der zweiten Komponente
(1230-1252).
9. Das System nach Anspruch 8, worin der erste
Sichtfensterabschnitt und der zweite Sichtfensterabschnitt
in ihrer Größe dynamisch veränderbar sind (1242, 1243,
1250, 1252, 1260).
10. Das System nach Anspruch 7, worin die Sammlung von
Komponenten eine variable Komponente enthält, die eine
Programm-Variable darstellt und die Eigentumsinformation
für die variable Komponente Definitionsinformation zur
Definition der Programm-Variablen aufweist, und worin
die zweiten Anwendungsmittel Mittel enthalten zur Anzeige
der Definitionsinformation von der ersten Komponente
(1230).
11. Das System nach Anspruch 7, worin die Eigentumsinformation
für die erste Komponente beschreibende Information enthält
zur Beschreibung der ersten Komponente und worin die
zweiten Anwendungsmittel Mittel enthalten zur Anzeige der
beschreibenden Information von der ersten Komponente
(1260).
12. Das System nach Anspruch 7, worin die Eigentumsinformation
für die erste Komponente Information zur Identifizierung
anderer Komponenten der Sammlung von Komponenten enthält,
die durch die erste Komponente bezeichnet werden, und
worin die zweiten Anwendungsmittel Mittel enthalten zur
Identifizierung anderer Komponenten der Sammlung von
Komponenten, die durch die erste Komponente bezeichnet
werden (1202-1260, Figur 8).
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US8533993A | 1993-06-28 | 1993-06-28 | |
PCT/US1994/000080 WO1995000902A1 (en) | 1993-06-28 | 1994-01-03 | Dynamic browser system |
Publications (2)
Publication Number | Publication Date |
---|---|
DE69400873D1 DE69400873D1 (de) | 1996-12-12 |
DE69400873T2 true DE69400873T2 (de) | 1997-05-22 |
Family
ID=22190944
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE69400873T Expired - Fee Related DE69400873T2 (de) | 1993-06-28 | 1994-01-03 | Dynamisches schnellauswertungssystem |
Country Status (7)
Country | Link |
---|---|
EP (1) | EP0692112B1 (de) |
JP (1) | JPH08512153A (de) |
CN (1) | CN1105508A (de) |
AU (1) | AU6019494A (de) |
CA (1) | CA2144878A1 (de) |
DE (1) | DE69400873T2 (de) |
WO (1) | WO1995000902A1 (de) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5854932A (en) * | 1995-08-17 | 1998-12-29 | Microsoft Corporation | Compiler and method for avoiding unnecessary recompilation |
US6021418A (en) * | 1997-02-18 | 2000-02-01 | International Business Machines Corporation | Apparatus and method for displaying control-objects |
AUPP949599A0 (en) * | 1999-03-30 | 1999-04-22 | Griffith University | Visual architecture software language |
DE10032421C2 (de) * | 2000-07-04 | 2002-11-21 | Joerg-Ulrich Woelfel | Datenverarbeitungs-Werkzeug |
DE10140124A1 (de) * | 2001-08-16 | 2003-03-06 | Daimler Chrysler Ag | Verfahren zur Darstellung der Architektur eines Softwaresystems |
US7640584B1 (en) * | 2005-06-24 | 2009-12-29 | Rockwell Collins, Inc. | System and method for enhancing computer security |
-
1994
- 1994-01-03 AU AU60194/94A patent/AU6019494A/en not_active Abandoned
- 1994-01-03 JP JP7502763A patent/JPH08512153A/ja active Pending
- 1994-01-03 CN CN 94190009 patent/CN1105508A/zh active Pending
- 1994-01-03 WO PCT/US1994/000080 patent/WO1995000902A1/en active IP Right Grant
- 1994-01-03 EP EP94906506A patent/EP0692112B1/de not_active Expired - Lifetime
- 1994-01-03 DE DE69400873T patent/DE69400873T2/de not_active Expired - Fee Related
- 1994-01-03 CA CA 2144878 patent/CA2144878A1/en not_active Abandoned
Also Published As
Publication number | Publication date |
---|---|
JPH08512153A (ja) | 1996-12-17 |
EP0692112A1 (de) | 1996-01-17 |
CA2144878A1 (en) | 1995-01-05 |
AU6019494A (en) | 1995-01-17 |
DE69400873D1 (de) | 1996-12-12 |
EP0692112B1 (de) | 1996-11-06 |
WO1995000902A1 (en) | 1995-01-05 |
CN1105508A (zh) | 1995-07-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE69404439T2 (de) | Programmodellierungssystem. | |
DE69423158T2 (de) | Verfahren und Vorrichtung zur Konfiguration von Rechnerprogrammen mit Hilfe verfügbarer Unterprogramme | |
DE69600794T2 (de) | Graphische entwicklungs- und verwaltungsumgebung für anwendungsprogramme | |
DE69303289T2 (de) | Steuersystem für anzeigemenüzustand | |
DE69503052T2 (de) | Verbessertes objektorientiertes betriebssystem zum filtrieren von datenobjekten in einem fenster | |
DE69522684T2 (de) | Statusanzeiger einer graphischen benutzerschnittstelle | |
DE69432503T2 (de) | Informationsarchivierungssystem mit objektabhängiger Funktionalität | |
DE69518123T2 (de) | Visualisierung von objektorientierter Software | |
DE60001916T2 (de) | Plattformunabhängige speicherabbild analysearchitektur zur programmfehlerbeseitigung | |
DE69129328T2 (de) | Ikonobjektschnittstellesystem und -verfahren | |
DE69021659T2 (de) | Verfahren und Vorrichtung zur reihenweisen Parallelprogrammfehlersuche. | |
DE69410753T2 (de) | Vorrichtung und Verfahren zur Analyse eines Verarbeitungsystems | |
DE69310202T2 (de) | Internationales datenverarbeitungssystem | |
DE69701623T2 (de) | Ein globales registersystem und verfahren basiert auf objektorientierter programmierung | |
DE69311359T2 (de) | Befehlssystem | |
DE69031758T2 (de) | Verfahren zur Organisation von und zum Zugriff auf Produkt beschreibenden Daten in Zusammenhang mit einem technischen Prozess | |
DE69308293T2 (de) | Globales prozesssteuerungsinformationssystem und verfahren | |
DE69402523T2 (de) | Objektorientiertes systembestimmungssystem | |
DE69310187T2 (de) | Objektorientiertes fachwerksystem | |
DE69310934T2 (de) | Ballonhilfssystem. | |
DE69400204T2 (de) | Ladesystem | |
DE69403664T2 (de) | Graphisches editorfachwerksystem | |
DE69503065T2 (de) | Objektorientierte vorrichtung für konfigurationsverlaufsverwaltung | |
DE19960050A1 (de) | Grafische Benutzerschnittstelle zur Entwicklung von Anwendungsbeispielen unter Verwendung einer Testobjektbibliothek | |
DE69635337T2 (de) | Erweiterbares und austauschbares system von netzwerkkomponenten |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
8364 | No opposition during term of opposition | ||
8327 | Change in the person/name/address of the patent owner |
Owner name: OBJECT TECHNOLOGY LICENSING CORP., CUPERTINO, CALI |
|
8339 | Ceased/non-payment of the annual fee |