gif gif up gif contents
Nächste Seite: 7.2.3 Generierung des Programmcodes Vorige Seite: 7.2.1 Die Kommunikationsschnittstelle

7.2.2 Die Programmierschnittstelle

Die ViewAdmin-Klasse verwaltet alle in einer Sicht enthaltenen Objekte. Ein Großteil der Funktionalität der Programmierschnittstellen ist in den allgemeinen Klassen CBview und CBsubView implementiert. Die generierten Klassen enthalten im wesentlichen nur noch für die Sicht spezifische Informationen. Eine Übersicht über die Klassenstruktur gibt Abbildung 7.3.

  
Abbildung 7.3: Klassenstruktur der Programmierschnittstelle

Ein wichtiges Bindeglied zwischen Änderungsnachrichten und der Sichtenmaterialisierung im Anwendungsprogramm bildet die Klasse CBterm. Die Notifikationsnachrichten stellen Terme in einer ProLog-ähnlichen Struktur dar. Die Klasse CBterm ist ein Parser für diese Terme. Alle Objekte der Sicht werden aus einem CBterm-Objekt konstruiert.

Die Klassen CBview und CBsubView sind die Oberklassen für die generierten Klassen für Sichten und Teilanfragen. CBsubView ist eine Spezialisierung von CBview, jedoch verhalten sich beide Klassen gleich. Die Klasse CBview hat eine Objektvariable objectName vom Typ CBobjectName, die den Namen des Objekts beinhaltet. Ein Objektname kann nicht nur eine Folge von alphanumerischen Zeichen sein, sondern auch ein Select-Ausdruckgif oder ein Ableitungsausdruck für die Spezifizierung von generischen Anfragen. Wie in Beispiel 5.2.3 gezeigt wurde, kann ein Objektname auch ein Ableitungsausdruck sein. Die Parametersubstitution sind in einer Liste von Objekten der Klasse CBderiveExpression abgespeichert. CBlist ist eine Template-Klasse, die einfach-verkettete Listen verwaltet. Die möglichen Formen von Objektnamen sind in der Syntaxbeschreibung der Telos-Objekte in Anhang F.1 enthalten.

Die Klassen CBview, CBsubView und CBobjectName haben Operatoren mit denen sich Objekte dieser Klassen vergleichen lassen und die Namen nach C++-Zeichenketten konvertiert werden können.

Die Template-Klasse CBset verwaltet die Objektmengen. Bei der Instanziierung eines CBset-Objekts mußder Typ der Mengenelemente angegeben werden. CBset bietet die üblichen Methoden für Mengen an: insert, remove, find, isEmpty, usw. Des weiteren kann man mit dem Array-Operator [] oder den Methoden next und previous in der Menge navigieren. Die Menge ist als AVL-Baum implementiert [Gü92, Sed92]. Ein AVL-Baum ist ein ausgeglichener binärer Suchbaum, in dem die Operationen Suchen, Einfügen und Löschen jeweils einen Rechenaufwand von O(log N) verursachen, wobei N die Anzahl der Elemente im Suchbaum ist.

Alle Mengen, die in der Programmierschnittstelle benutzt wurden, sind mit der Template-Klasse CBset implementiert. Dies trifft auch auf die bereits erwähnten Objektvariablen ViewSet und SubViewSet der generierten Klasse ViewAdmin zu.

Die Objekte einer Sicht existieren im Anwendungsprogramm nur einmal, unabhängig davon wie oft sie durch andere Objekte referenziert werden. Die Mengen enthalten deshalb auch nicht die Objekte selbst, sondern nur eine Referenz auf ein Objekt. Damit durch das Löschen eines Objekts nicht unerlaubte Speicherzugriffe entstehen, weil eine Referenz auf das Objekt nicht mehr zulässig ist, implementiert die Template-Klasse CBref sichere Zeiger auf die Objekte einer Sicht (vgl. smart pointer in [Str91]). Die Objekte einer Sicht sind nur über ein CBref-Objekt referenzierbar. Der Typ CBref<EmpDept> stimmt mit dem C++-Typen EmpDept* überein. Beide Typen beschreiben einen Zeiger auf ein EmpDept-Objekt und werden auf die gleiche Art verwendet. Das Objekt einer Sicht zählt die CBref-Objekte, die auf das Objekt verweisen. Falls keine Verweise mehr existieren, wird das Objekt gelöscht.

Der Sichtenwartungsalgorithmus garantiert, daßdie Objekte einer Sicht keine unzulässigen Objekte referenzieren. Wird zum Beispiel in der Teilanfrage SV_dept ein Objekt D1 gelöscht, so werden auch die Beziehungen von Angestellten aus der Sicht EmpDept zu D1 gelöscht. Wenn der Programmierer in seinem Programmteil eine Referenz auf das Objekt D1 angelegt hat, so bleibt das Objekt bestehen und es entstehen keine unerlaubten Speicherzugriffe im Programm. Der Programmierer kann durch die Methode isValid der Klasse CBref überprüfen, ob das Objekt noch in einer Sicht enthalten ist.

Attribute bestehen in ConceptBase aus einer Attributbezeichnung und einem Attributwert. Die Template-Klasse CBattribute bildet diese Struktur in C++ ab. Der Template-Parameter ist dabei der Typ des Attributwertes, der entweder ein atomarer Objektname oder eine Referenz auf eine verschachtelte Teilanfrage ist. Objektnamen werden wie oben durch die Klasse CBobjectName und Referenzen durch das Template CBref repräsentiert. Da die Attribute in ConceptBase mengenwertig sind, haben die entsprechenden Objektvariablen in den generierten Klassen den Typ CBset<CBattribute<...>>, sofern der Programmierer keinen anderen Typ bestimmt.



gif gif up gif contents

Christoph Quix
31. Juli 1996