next up previous contents
Next: 4.2.3 Implementation von Listen Up: 4.2 CLS-Unterprogrammbibliothek Previous: 4.2.1 Anforderungen an die

4.2.2 Objektstruktur

 

Im folgenden wird die für den PIF-Editor entwickelte PIF-Datenrepräsentation vorgestellt.

Objekte im Sinne dieser Implementierung sind Attribute, Gitter, Punktlisten etc., aber - im Gegensatz zu der Definition des PIF - auch Punkte, Linien, Flächen, Volumina, Grenzen und Segmente. Jedem Objekt ist, wenn es im Speicher repräsentiert ist, eine C-Struktur zugeordnet. Die Identifizierung der Objekte erfolgt über die Zeiger auf ihre Datenstrukturen.

Alle benötigten Daten werden im Speicher gehalten. Sie werden bei Bedarf über die Funktionen des PAL und teilweise des PIL gelesen oder abgespeichert, wobei diese Schichten des PAI aber ausschließlich als Schreib-/Leseschnittstelle dienen, und ihre Datenstrukturen auch nur für diesen Zweck vorübergehend verwendet werden.

Eine objektorientierte Organisation mit Vererbung, Einkapselung und Klassensystem, die manuell implementiert wurde, nützt die im PIF vorhandenen syntaktischen Gemeinsamkeiten der verschiedenen Objekttypen aus (s. Abb. 4.1).

Jedes CLS-Objekt wird intern als C-Struktur repräsentiert, die durch ihre Klasse definiert wird. Die Struktur besteht aus den in strenger Reihenfolge angeordneten Komponenten der Superklassen und der Klasse des Objektes. Jedes Objekt kann daher nicht nur als zu seiner Klasse angehörig betrachtet, sondern auch wie ein Objekt jeder seiner Superklassen behandelt werden.

Als gemeinsame Wurzelklasse aller CLS-Objekte dient clsAny. Ihre einzige Komponente ist clsTag, das der Typüberprüfung zur Laufzeit dient. Neben den Listentypen, die weiter unten erklärt werden, hat clsAny die Unterklasse clsObject. Diese ist Superklasse der CLS-Repräsentationen aller PIF-Objekte und PIF-Simplizes. Sie führt die Komponenten class, das die jeweilige Klasse mit ihren virtuellen Funktionen beschreibt, und mark für anwendungsdefinierte Markierungen ein.

Eine Unterklasse von clsObject ist clsAutonom. Diese umfaßt alle CLS-Repräsentationen von PIF-Objekten, aber nicht Simplizes. Die neuen Komponenten sind logical als Referenz auf die entsprechende logische PIF-Datei, parent als Referenz auf das Mutterobjekt, children als Liste der Kindobjekte, refs als Liste der Referenzen des Objektes, backrefs als Liste der Rückreferenzen, paihandle als Identifizierung des Objektes im PAI, name als Name des Objektes, ccompressed (s. unten), rcompressed (s. unten) und del_child als Liste der gelöschten Kindobjekte.

Die meisten PIF-Objekttypen sind direkte Unterklassen von clsAutonom. Ausnahmen sind einerseits die PIF-Listenobjekte, die Unterklassen von clsHierarch sind, das den Mechanismus für vorübergehende Abspeicherung seiner Simplizes als Feld implementiert (s. unten). Andererseits werden die Klassen clsLogical und clsGrid noch über clsParent zusammengefaßt, um gemeinsame Eigenschaften betreff Kinder vom Typ clsHierarch auszunützen.

Als zweite Unterklasse von clsObject faßt clsSimplex die Klassen clsPoint, clsLine, clsFace, clsSolid, clsBoundary und clsSegment zusammen. Ihre gemeinsamen neuen Komponenten sind simplist als Referenz auf das zugehörige clsHierarch-Objekt, refs als Liste der Referenzen und backrefs als Liste der Rückreferenzen.

   figure1992
Abbildung 4.1: Klassenbaum der CLS-Objekte

In CLS können mehrere logische PIF-Dateien unabhängig voneinander geöffnet und bearbeitet werden. Jede dieser logischen Dateien kann schreibgeschützt sein; für jede wird vermerkt, ob ihre Daten verändert wurden und somit ein Abspeichern erforderlich ist.

Besonders kritisch bezüglich der verwendeten Datenstrukturen und Algorithmen sind die folgenden Vorgänge:

Das Bearbeiten von Objekten und die Einbeziehung seines logischen Kontextes (Mutter, Kinder, Referenzen, referenzierende Objekte) ist ohne Suchaufwand möglich, da alle diese Informationen in der Objektbeschreibung zur Verfügung stehen.

Was zur Zeit nicht vom CLS erledigt wird, sind semantische Operationen wie z.B. Suchen von Punkten nach ihrer geometrischen Position. Die Anwendung muß dafür geeignete günstige Strukturen und Algorithmen vorsehen.


next up previous contents
Next: 4.2.3 Implementation von Listen Up: 4.2 CLS-Unterprogrammbibliothek Previous: 4.2.1 Anforderungen an die

Martin Knaipp
Wed Jun 12 15:41:33 MET DST 1996