• Keine Ergebnisse gefunden

In diesem Kapitel werden die Java-Exceptions erl¨autert, welche von JGraLab ausgel¨ost werden k¨onnen.

Zur Fehlerbehandlung definiert Java eine eigene Exception-Hierarchie. Diese erm¨oglicht eine ¨ubersichtlichere Fehlerbehandlung.

4.4.1 ¨ Ubersicht

In Abbildung 4.15 ist die Darstellung der JGraLab-eigenen Hierarchie der m¨oglichen Exceptions dargestellt.

JGraLabException

GraphException SchemaException GraphIOException +Exception() : Exception

+Exception( cause : Throwable) : Exception +Exception( message : string) : Exception

+Exception( message : string, cause : Throwable) : Exception Exception

Abbildung 4.15: Hierarchie der Exceptions in JGraLab

Prinzipiell erben alle Exceptionklassen von JGraLab von der Klasse JGraLabException, welche ihrerseits wiederum eine Spezialisierung der Java-Exception-Klasse bildet.

Die Klasse JGraLabException generalisiert die folgenden Klassen:

• GraphException: Diese Klasse steht f¨ur alle Fehler, die bei M1 Graphoperatio-nen auftreten k¨onGraphoperatio-nen, also z.B. beim Erstellen oder L¨oschen von Graphen, Kanten und Knoten.

4.4. Ausnahmebehandlung

• SchemaException: Ausnahmen dieser Klasse treten auf, wenn Fehler bei M2/M3 Schemaoperationen stattfinden, wie z.B. beim Erstellen der Graph-, Kanten- und Knotenklassen oder auch bei der Generierung der M1 Klassen aus dem M2-Graphenschema.

• GraphIOException: Mittels dieser Klasse werden alle Fehler behandelt, welche beim Einlesen oder Abspeichern von Schema und Graphen mittels der GraphIO-Klasse entstehen k¨onnen.

Jede Exception kann beim Ausl¨osen (z.B. mittels throw) in ihrem Konstruktor eine Fehlerbeschreibung sowie das sie ausl¨osende Throwable-Objekt (z.B. FileNotFoundEx-ception bei einer GraphIOExFileNotFoundEx-ception) ¨ubergeben bekommen.

4.4.2 M ¨ ogliche Ausl ¨ oser der Exceptions

In diesem Abschnitt werden m¨ogliche Ausl¨oser der Exceptions aufgelistet.

GraphException

GraphExceptions k¨onnen durch folgende Programmzust¨ande ausgel¨ost werden:

• Fehler bei der Instanzierung einer defekten oder falschen M1 Klasse f¨ur ein M1 Objekt. Die Ausl¨oser dieser Exception sind Ausnahmen, die aus einer fehlerhaften Reflection resultieren.

• Falsche Parameter bei der Generierung eines Graphen, also z.B. negative Initial-werte oder nicht angelegte Schemata oder Graphklassen.

• Aufruf einer Methode, welche explizit f¨ur die oo oder die incarray Packages spe-zifiziert ist in dem jeweils anderen Package. Dies betrifft die Graph/Vertex/Edge/

Incidence-Methoden setNextVertex, setPrevVertex, setNextEdge, setPrevEdge, se-tAlpha, setOmega, setFirstIncidence, setNextIncidence und setId, sowie die diese benutzenden Methoden createVertex, createEdge, delete, putBefore und putAfter.

Sie dienen vor allem in der objektorientierten Implementierungsversion dazu, die Java-Attribute von Edge und Vertex von der Graph-Klasse aus zu manipulieren.

Bei den internen Inzidenzfeldern ist dies so nicht m¨oglich.

SchemaException

Eine SchemaException wird durch folgende Fehler ausgel¨ost:

• Ein M2 Klassenname wird im selbstgeschriebenen Code zur Instanziierung des Graphenschemas mehrfach vergeben.

• Ein M2 Klassenname taucht in der TG-Datei zur Instanziierung des Graphensche-mas mehrfach auf.

• Die Namen von Record- und Enum-Dom¨anen sind im selbstgeschriebenen Code zur Instanziierung des Graphenschemas nicht eindeutig.

• Die Namen von Record- und Enum-Dom¨anen sind in der TG-Datei zur Instanzi-ierung des Graphenschemas nicht eindeutig.

GraphIOException

Die folgenden Zust¨ande des Programms k¨onnen GraphIOExceptions zur Folge haben:

• Eine TG-Datei wird beim Laden nicht gefunden.

• Die Angabe des Dateinamens enth¨alt ung¨ultige Zeichen oder ist fehlerhaft.

• Die Zugriffsrechte des Datentr¨agers sind unzureichend gesetzt.

• Der Datentr¨ager enth¨alt einen Schreibschutz.

• Es ist kein Speicherplatz mehr auf dem Datentr¨ager frei.

• Die Schl¨usselw¨orter innerhalb der TG-Datei sind falsch oder gar nicht gesetzt.

• Die Graph-, Kanten- oder Knotenklasse kann beim Laden nicht instanziiert wer-den, da die M1-Klassen nicht existieren oder in einem falschen Zustand sind.

• Ein Unicode-String in einer TG-Datei enth¨alt ung¨ultige Zeichen.

• Der kodierte Base64-String eines Java-Objekts kann nicht einwandfrei dekodiert werden.

• Die referenzierte Enumeration-Zeichenfolge innerhalb einer TG-Datei wurde nicht im Schema festgelegt.

4.4. Ausnahmebehandlung

• Die generierten Dateien f¨ur Enum und Record existieren nicht oder besitzen einen falschen Zustand.

• Die Reihenfolge der Attributwerte in der TG-Datei stimmt nicht mit der Reihen-folge der Definition der Attribute im Schema ¨uberein.

Zusammenfassung der Implementierung

An dieser Stelle ist die Implementierung von JGraLab abgeschlossen. Als erstes wurden die Performanztests durchgef¨uhrt, wobei festgestellt wurde, dass beide Implementie-rungen ihre Vor- und Nachteile besitzen. Daher wird es dem Benutzer selbst ¨uberlassen, welche dieser Implementierungen er benutzen kann.

Als zweites wurde die objektorientierte Zugriffsschicht in all ihren Details beschrieben.

Diese Schicht erstellt die M1-Interfaces und -Klassen, erledigt die Attributierung und erstellt die Fabrikmethoden.

Anschließend wurden die Dateiformate .G und .TED analysiert und einige Bestandtei-le in das neue JGraLab-Dateiformat .TG ¨ubernommen. Zus¨atzlich wurden beim .TG-Format neue Eigenschaften eingef¨uhrt, da die beiden anderen .TG-Formate nicht die volle Funktionalit¨at des neuen JGraLab unterst¨utzen.

Abschließend fand eine Beschreibung der Ausnahmebehandlung von JGraLab statt, um dem Benutzer mehrere Hilfen bei der Fehlerbehandlung zu bieten.

Um die Implementierungsbeschreibung weiter zu festigen, folgt in diesem Kapitel ein vollst¨andiges Beispiel zur Erstellung eines Schemas und eines Graphen. Des Weiteren wird die Traversierung von Graphen beispielhaft aufgezeigt.

5.1 ¨ Ubersicht des Beispiels

In diesem Abschnitt wird das Schema-Beispiel aus Kapitel 3.2.2 vollst¨andig mit JGraLab realisiert. Anschließend wird ein Graph erstellt, der zu diesem Schema geh¨ort. Am Ende dieses Abschnitts befinden sich Hinweise, wie die Traversierung von Graphen anhand der Listen Vseq, Eseq und Iseq stattfinden kann.

Aus ¨Ubersichtlichkeitsgr¨unden wird das Schema hier nochmals aufgef¨uhrt, sowohl als Objektdiagramm (Abb. 5.1, Instanz der M3-Ebene), als auch mittels alternativer Nota-tion (Abb. 5.2, eine Art UML-Diagramm, vgl. Kapitel 3.3).

Der Graph ist in Abbildung 5.3 aufgef¨uhrt. F¨ur die Realisierung weiterer m¨oglicher Wertebereiche sei auf Kapitel 3.5.5 verwiesen.