\newpage
\section{Entwurfshilfsmittel}\label{Klssnbrwsr}Die strenge Typisierung der
Sprache TooL, der Zwang zur Schnittstellenvererbung in Verbindung mit dem
Wunsch nach Kombinierbarkeit von Funktionalit"at und Vereinheitlichung haben
einen tiefen 
Vererbungsgraphen entstehen lassen. Die Arbeit mit einer solchen Struktur
bedarf der Unterst"utzung durch Werkzeuge. Diese sollten mindestens einen
"Uberblick "uber die Vererbungsbeziehungen und eine Darstellung der durch eine
Klasse spezifizierten Objektschnittstelle bieten. Denkbar w"aren aber auch
Werkzeuge, die den Entwurfsproze"s direkt unterst"utzen, in dem sie
beispielsweise nur Teilbereiche des Vererbungsgraphen anzeigen. Spezielle
Werkzeugfunktionen dieser Art k"onnten die Darstellung aller in einer
Beh"alterkategorie unterschiedenen Eigenschaften, die Anzeige einzelner
Eigenschaftsgruppen mit ihren Nachfahren oder die Auswahl einer Klasse mit
spezifischer Eigenschaftskombination unterst"utzen. Dieser Abschnitt soll die
im Rahmen dieser Arbeit entstandenen ersten Ans"atze zur Visualisierung der
Klassendefinitionen und der Vererbungsbeziehungen vorstellen.
\subsection{Methodenakkumulation}\label{Mthakk}Durch die Tiefe des
Vererbungsgraphen verteilen sich die Methodenspezifikationen und
Implementierungen von Protokollgruppen auf die Oberklassen einer konkreten
Klasse.

%%%%%%%%%Bild: doClassShort
\renewcommand{\epsfsize}[2]{0.789#1}
\begin{figure}[hbt]
\begin{center}
\leavevmode
\epsfysize=6cm
\epsffile{../Bilder/bjoern/doClassShort.ps}
\end{center}
\caption{Anzeige der Klassendefinition : Kurzform}\label{ClssShrt}
\end{figure}

F"ur die Nutzung, Implementierung und Spezialisierung einer Klasse ist es
aber notwendig, die komplette (bisher) vorhandene Objektschnittstelle aber auch
die innerhalb der Klasse ver\-f"ug\-ba\-ren privaten Methoden zu kennen.
Um diesen
"U\-ber\-blick zu gewinnen, m"u"sten alle Oberklassen betrachtet werden. Es
ist 
also eine M"oglichkeit ben"otigt, sich die akkumulierte Methodenmenge anzeigen
zu lassen. Derartige Funktionen wurden in den Kommandointerpreter von TooL
integriert.
Dieser Interpreter dient unter anderem dem Ansto"sen von Lade-, 
"U\-ber\-set\-zungs- und Typ\-"u\-ber\-pr"u\-fungs\-vor\-g"an\-gen. Es k"onnen aber auch direkt
TooL Ausdr"ucke eingegeben werden.

Nach dem Laden einer Klasse sind die
Methodensignaturen und die Klassenpr"azedenzliste im Objektspeicher des
Tycoon-Systems verf"ugbar und persistent. Ihre Speicherung ist f"ur die
modulare Typ"uberpr"ufung notwendig. Dadurch ist es m"oglich diese
Informationen jederzeit sichtbar zu machen und "uber die Pr"azedenzliste auch
eine Akkumulierung der Methodensignaturen durchzuf"uhren.

%%%%%%%%%Bild: doClassShortTrans
\renewcommand{\epsfsize}[2]{0.789#1}
\begin{figure}[htb]
\begin{center}
\leavevmode
%\epsfysize=8cm
\epsffile{../Bilder/bjoern/doClassShortTrans1.ps}
\end{center}
\caption{Anzeige der Klassendefinition: akkumulierende Form}\label{ClssShrtTrns}
\end{figure}

Es werden unterschiedliche 
Varianten von Interpreterbefehlen angeboten. Die einfachste Form zeigt, wie in
Abbildung \ref{ClssShrt} zu sehen, nur die in einer Klasse spezifizierten
Methodensignaturen an. Die "uber die textuelle 
Klassendefinition hinausgehende Information besteht in der Anzeige der
Klassenpr"azedenzliste, welche hinter der Zeile zur Angabe der Oberklassen
eingef"ugt wird.
Anschlie"send werden die Signaturen in der gewohnten Weise, aufgeteilt in einen
"offentlichen und privaten Bereich, aufgelistet. F"ur jede Methode wird
bekundet, ob es sich um eine implementierte oder nicht implementierte (mit dem
Schl"usselwort {\bf deferred} gekennzeichnete) Methode handelt.

Weitere Befehle
stellen auch die aus den Oberklassen geerbten Methoden dar. Das Kommando '{\bf
DO} {\sf\mbox{printClassShortTrans}}' listet die Vorfahren der aktuellen Klasse
in der Reihenfolge der Pr"azedenzliste mit den ihnen zugeordneten Methoden und
Variablen auf (Abbildung \ref{ClssShrtTrns}). Es werden auch die
"Uberschriebenen und die nicht implementierten Methoden angezeigt, um
gegebenenfalls eine zur 
Beeinflussung der Pr"azedenzliste n"otige Umstellung in der Liste der 
Oberklassen erkennen zu k"onnen. Erg"anzende Kommandos schr"anken diese
allgemeinste Anzeige wieder ein, etwa indem nur die Variablen und die
implementierten Methoden ausgegeben oder nur die "offentlichen Methoden und
Variablen angezeigt werden. Dies entspricht 
der Darstellung der kompletten, durch eine Klasse beschriebene
Objektschnittstelle. Das Kommando lautet daher '{\bf DO} {\sf
\mbox{printInterface}}'. 
\subsection{Visualisierung der Vererbungsbeziehungen}Auch zur Darstellung des
Vererbungsgraphen sind bereits Hilfsmittel entstanden. Die Grundidee ist  die
Nutzung eines WWW-Browsers zum Navigieren im 
Vererbungsgraphen mit Zugriff auf die Klassendefinitionen. Dazu sind mehrere
Schritte notwendig.

%%%%%%%%%Bild: htmlClass
\renewcommand{\epsfsize}[2]{0.789#1}
\begin{figure}[th]
\begin{center}
\leavevmode
%\epsfsize=6cm
\epsffile{../Bilder/bjoern/htmlClass.ps}
\end{center}
\caption{Eine Klasse als WWW-Seite}\label{HtmlKlss}
\end{figure}

Um die Klassendefinitionen als HTML-Seiten verf"ugbar zu
machen, wurde ein weiteres 
Interpreterkommando eingef"ugt. Dieses wandelt die, wie bereits oben erw"ahnt,
im Objektspeicher des Tycoon-Systems vorhandenen Signaturen in HTML-Texte
um. In diesen HTML-Texten 
sind die implementierten Methoden mit einem speziellen Text-Icon
gekennzeichnet, "uber welche der Quelltext der Klassendefinition erreichbar
ist.
Abbildung \ref{HtmlKlss} zeigt die Klasse {\sf Container} mit ihrer
Klassenpr"azedenzliste. Schl"usselworte sind fett hervorgehoben. Andere
auftretende Klassennamen sind als Verweise auf die entsprechenden
Klassendefinitionen zu nutzen. Das Text-Icon ist z.B. vor der Methode {\sf
includes} zu erkennen.

Da der Quelltext im Gegensatz zu den Signaturen nicht 
im Objektspeicher vorhanden 
ist, mu"s dieser aus dem Quelltextverzeichnis f"ur die TooL-Klassen beschafft
werden. Dies wird durch ein C-Programm geleistet, welches bei Auswahl des Icons
aktiviert wird. Es generiert nun auch f"ur den Quelltext der ausgew"ahlten
Klasse eine HTML-Seite und positioniert den Cursor auf die gew"unschte Methode.

Es Bleibt noch die Darstellung des Vererbungsgraphen als Einstieg in die nun
als HTML-Struktur bereitstehenden Klassenspezifikationen. Hier
wurde zun"achst versucht, den Graphen mit Hilfe von Grapheneditoren wie {\em
graph\-ed} \cite{Him89,Him93} und {\em daVinci} \cite{FrWer94} zu
entwerfen, um die von diesen angebotenen Graphalgorithmen zur Formatierung
nutzen zu k"onnen.
Insbesondere der Editor {\em daVinci} w"are durch die
M"oglichkeit, die Graphen in einer abstrakten Syntax einzulesen, gut geeignet
gewesen, eine Aktualisierung des Graphen zu automatisieren.

%%%%%%%%%Bild: htmlClass
\renewcommand{\epsfsize}[2]{0.789#1}
\begin{figure}[bh]
\begin{center}
\leavevmode
%\epsfysize=8cm
\epsffile{../Bilder/bjoern/htmlGraph.ps}
\end{center}
\caption{Die Beh"alterklassenbibliothek im WWW}\label{HtmlGraph}
\end{figure}

Das automatische Layout des
Graphen ergab allerdings kein befriedigendes
Ergebnis, soda"s die Darstellung schlie"slich von Hand optimiert wurde. Der so
erzeugte Graph wurde als Bild im 'GIF'-Format gespeichert und dann f"ur den
Netscape-Browser als 'clickable map' hergerichtet. In Abbildung
\ref{HtmlGraph} ist diese zu sehen. Die Pfeile symbolisieren die
Vererbungsbeziehung. Gestrichelte Pfeile bedeuten eine indirekte Vererbung
"uber nicht abgebildete Klassen. Die implementierten Klassen sind mit
doppelter Umrandung abgebildet, ein Kreis verweist auf einen weiteren
Teilgraphen. So wurden f"ur die Listen und B"aume separate Graphen gezeichnet,
die 
auf diese Weise erreichbar werden.

Um die Auswahl mit dem Mauszeiger den einzelnen Klassen zuzuordnen, m"ussen die
Positionen der Klassen innerhalb des Bildes als Rechtecke in einer  
entsprechenden Datei vermerkt werden. Diese Angaben werden nat"urlich bei
einer Umorganisation des Graphen ung"ultig. Insgesamt ist die
angewandte Technik jedoch eine gute M"oglichkeit, schnell einen einfachen
Klassen-Browser zu schaffen.

Neuere Arbeiten versuchen mit Hilfe der Programmiersprache Java
\cite{GosMcGil95} den Vererbungsgraphen direkt aus den Klassendefinitionen f"ur
einen diese Sprache unterst"utzenden WWW-Browser zu erzeugen. Schwierigkeiten
bereitet weiterhin die Wahl eines geeigneten Algorithmus f"ur die Darstellung
des Graphen. Die Entwicklung eines auf die Formatierung des speziellen
Vererbungsgraphen von TooL zugeschnittenen Verfahrens, ist auf diesem Wege
jedoch eher m"oglich als beim R"uckgriff auf das automatische Layout der
Grapheneditoren.
