\documentstyle[a4,11pt,float,epsf,german]{article}

\newcommand{\pics}{snapdemo/ps}
\title{Skript f"ur STYLE-Demo}
\author{Ingrid Wetzel, Petra M"unnix, Ralf L"ost}
%\input{/users/dbis1/wetzel/IW/Diss/tycoon}
%\input{/users/dbis1/wetzel/IW/Diss/om}
\parindent0mm
\floatstyle{plain}    % "fix" float objects (tables,figures)
\restylefloat{table} 
\floatstyle{plain}
\restylefloat{figure}

\begin{document}
\maketitle
\section{Vorbereitung der Umgebung}
\subsection{Rechnerwahl}
Es ist vorgesehen, die Demo auf dem Rechner \verb$dbis12$ vorzuf"uhren. Sie kann zur Zeit aber auch auf den Rechnern \verb$dbis1$ und \verb$dbis2$ laufen. Vorteilhaft, aber nicht zwingend notwendig, ist die Benutzung eines Farbbildschirms.

\subsection{Einloggen in die Testumgebung}
F"ur die Demo sind drei Kommandofenster n"otig: zwei f"ur zwei Tycoon Maschinen und das dritte zum "Offnen von Textdateien. Die folgenden Schritte gelten f"ur jedes der Kommandofenster.
\par

Nach dem Einloggen unter dem Benutzernamen \verb$om1$\footnote{Das \verb$password$ kann bei Andreas Rudloff, Petra M"unnix oder Ralf L"ost erfragt werden.} sind folgende Befehle auszuf"uhren, um in die Umgebung \verb$/local/tw1/om1/test/tycoon/bootlib/$ zu gelangen:
\begin{verbatim}
  tw test
  cd tycoon/bootlib
\end{verbatim}
Diese Langdemobeschreibung und die Kurzdemobeschreibung stehen unter \verb$bootlib$ in dem Verzeichnis \verb$scripts$ als LateX Dateien 
\verb$longDemoScript.tex$ und \verb$shortDemoScript.tex$.

\subsection{R"ucksetzen der Stores}
Da innerhalb der Demo der Store \verb$om1Tracy$ mit den Datenbankdaten ver"andert wird, m"ussen bei einer Wiederholung die Ausgangssituationen wiederhergestellt werden. Dies geschieht durch Kopieren der Stores (auf tycoon/bootlib):
\begin{verbatim}
  cp saveom1Tracy.ts om1Tracy.ts
  cp saveom1Tracy.tsi om1Tracy.tsi
  cp saveom1TracyTransIc.ts om1TracyTransIc.ts
  cp saveom1TracyTransIc.tsi om1TracyTransIc.tsi
\end{verbatim}
(dauert eine Weile)

\section{Vorbereitung der Langdemo}
Diese Vorbereitung ist in den Abschnitten \ref{choice} bis \ref{prepstart} nahezu identisch zur Vorbereitung der Kurzdemo. (Lediglich die Datei \verb$longDemoInteractive.tm$ wird zus"atzlich ge"offnet).

\subsection{Starten von Tycoon und von STYLE}
Im ersten Kommandofenster ist unter dem Verzeichnis \verb$/local/tw1/om1/test/tycoon/bootlib/$ einzugeben:
\begin{verbatim}
  ../bin/sunos4/tycoon -store om1edit
  session.init();
  initGRD.loadPostScript();
  styleTop.create("");
\end{verbatim}
(Dauer ca. f"unf bis sieben Minuten)\\ 
Es wird eine Tycoon-Maschine gestartet und (nach einigen Initialisierungen) der STYLETop Editor aufgerufen. Er erscheint als Fenster auf dem Bildschirm (mit blauer Kopfleiste). Das Fenster des STYLETop Editors sowie das Kommandofenster mit der gestarteten Tycoon Maschine werden wie in Abb. \ref{monlayout1} dargestellt positioniert.\\

Im zweiten Kommandofenster ist unter demselben Verzeichnis einzugeben: \begin{verbatim}
  ../bin/sunos4/tycoon -store om1TracyTransIc
\end{verbatim}
(Dauer ca. f"unf bis sieben Minuten)\\
Es wird eine zweite Tycoon Maschine gestartet, die f"ur interaktiv einzugebenden TL Code (unter ge"anderten ICs -- vgl. Abschnitt \ref{longsec}) dient.
 
\subsection{Auswahl der TRACY-Anwendung}\label{choice}
\begin{minipage}{8.3cm}
Im STYLETop Editor sind folgende Eingaben zu t"atigen:
\begin{itemize}
\item Im linken Dateiauswahlfenster: {\sl Standard} ausw"ahlen;
\item links unten im Editor: den Knopf {\sl Open} dr"ucken und warten; nach einigen Sekunden erscheinen im rechten Dateiauswahlfenster Schemanamen;
\item im rechten Dateiauswahlfenster: {\sl Tracy} ausw"ahlen.
\end{itemize}
\end{minipage}
\hfill \hfill
\begin{minipage}{7cm}
\epsfxsize=7cm
\epsffile{\pics/openTracy.ps}
\end{minipage}

\subsection{Starten der Editoren und Browser der TRACY Anwendung}\label{prepstart}
Im folgenden werden die Fenster der Editoren/Browser der TRACY-Anwendung gestartet, als ge"offnete Fenster auf dem Bildschirm positioniert und danach jeweils geschlossen und als Icons wiederum auf dem Bildschirm positioniert. Die Reihenfolge ist wie folgt.
%\begin{itemize}
\subsubsection{Graphikeditor}
\begin{enumerate}
\item {\bf "Offnen:} vom Fenster des STYLETop Editors aus:\\
{\bf Aktion:} den Knopf {\sl OPEN Graphics} dr"ucken und warten, bis das Diagramm vollst"andig angezeigt wird (Dauer ca. 15 Sekunden);\\
Anzeige: Graphikeditorfenster mit Referenzdiagramm (Klassenknoten, Referenzkanten, Rautensymbole f"ur versteckte Werteknoten) und gr"uner Kopfleiste;
\begin{figure}[H]
\begin{center}
\leavevmode
\epsfxsize=15cm
\epsffile{\pics/stylescr1.ps}
\end{center}
\caption{Fensteranordnung: links unten: {\sl StyleTopEditor}; rechts oben: {\sl Graphikeditor}; links mitte: {\sl Kommandofenster}.}
\label{monlayout1}
\end{figure}

\item im Fenster des Graphikeditors:
\begin{itemize}
\item {\bf Ebene 1 ausw"ahlen:}\\
\begin{minipage}{10.1cm}
{\bf Aktion:} im Men"u {\sl Layers} den Men"upunkt {\sl Layer1} ausw"ahlen;\\
\end{minipage}
\begin{minipage}{5cm}
\epsfxsize=3.5cm
\epsffile{\pics/layer1men.ps}
\end{minipage}
\item {\bf Hierarchiefenster "offnen:}\\
\begin{minipage}{10.1cm}
{\bf Aktion:} im Men"u {\sl Scheme} den Men"upunkt {\sl Inheritance Scheme} ausw"ahlen;\\
\end{minipage}
\begin{minipage}{5cm}
\epsfxsize=3.5cm
\epsffile{\pics/inhOpen.ps}
\end{minipage}
\end{itemize}

\item {\bf Positionieren} des Editorfensters und des Hierarchiefensters:\\
{\bf Aktion:} Verkleinern der beiden Editorfenster, beharrliches (!) Bet"atigen der Scrollbars zum mittigen Positionieren der Diagramme in den Fenstern und Verschieben der Fenster wie in Abb. \ref{monlayout1} dargestellt.
\end{enumerate}

\subsubsection{Instanzbrowser}
Achtung! Unbedingt vor dem Klasseneditor "offnen! Sonst st"urzt der Klasseneditor ab!
\begin{enumerate}
\item {\bf "Offnen:} vom Fenster des STYLETop Editors aus:\\
\begin{minipage}{10.8cm}
{\bf Aktion:} im Men"u {\sl Open Instance} den Men"upunkt {\sl Start} ausw"ahlen;\\
Anzeige: Es wird in einer zweiten Tycoon-Maschine der Store \verb$om1Tracy$ geladen. Dieser Vorgang wird im Kommandofenster kommentiert. Dauer ca. f"unf (!!) Minuten. Danach erscheint der Instanzbrowser, der die Instanzeditoren und Operationen anzeigt (mit roter Kopfleiste);
\end{minipage}
\begin{minipage}{5cm}
\epsfxsize=3.5cm
\epsffile{\pics/openInstance.ps}
\end{minipage}
\item {\bf Positionieren}:\\
{\bf Aktion:} Verschieben wie in Abb. \ref{monlayout3} angezeigt.
\end{enumerate}

\begin{figure}[H]
\begin{center}
\leavevmode
\epsfxsize=15cm
\epsffile{\pics/stylescr3.ps}
\caption{Fensteranordnung: oben links: {\sl Klasseneditor}; oben mitte: {\sl Schemabrowser}; oben rechts: {\sl Instanzbrowser}; rechts: {\sl generierte Klassenschnittstelle}.}
\label{monlayout3}
\end{center}
\end{figure}

\subsubsection{Schemabrowser}
\begin{enumerate}
\item {\bf "Offnen:} vom Fenster des STYLETop Editors aus:\\
\begin{minipage}{9.3cm}
{\bf Aktion:} den Knopf {\sl OPEN Schema} dr"ucken;
Nach einigen Sekunden erscheint der Schemabrowser (mit gelber Kopfleiste), der die TRACY Klassen und Typen anzeigt;
\end{minipage}
\begin{minipage}{5cm}
\epsfxsize=5cm
\epsffile{\pics/openSchema.ps}
\end{minipage}
\item {\bf Positionieren}:\\
{\bf Aktion:} Verschieben des Schemabrowsers wie in Abb. \ref{monlayout2} angezeigt.
\end{enumerate}

\begin{figure}[H]
\begin{center}
\leavevmode
\epsfxsize=15cm
\epsffile{\pics/stylescr2.ps}
\caption{Fensteranordnung: links: {\sl Klasseneditor}; rechts: {\sl Graphikeditor}; oben mitte: {\sl Schemabrowser}.}
\label{monlayout2}
\end{center}
\end{figure}

\subsubsection{Klasseneditor f"ur die Klasse {\sl PackageTour}}
\begin{enumerate}
\item {\bf "Offnen:} vom Fenster des Schemabrowsers aus:\\ 
\begin{minipage}{9.3cm}
{\bf Aktion:} im linken Auswahlfenster: {\sl PackageTour} ausw"ahlen, danach links unten den Knopf {\sl Open} dr"ucken;\\
Anzeige: Nach ca. zehn Sekunden erscheint der  Klas\-sen\-editor (Fenster mit dem Titel {\sl PackageTour} und mit gelber Kopfleiste);
\end{minipage}
\hfill \hfill
\begin{minipage}{4.5cm}
\epsfxsize=3.5cm
\epsffile{\pics/openPackT.ps}
\end{minipage}
\item {\bf {\sl Methods}-Komponente aus Textdatei hinzuladen}:\\
\begin{itemize}
\begin{minipage}{8.5cm}
\item
{\bf Aktion}: im Klasseneditor:\\
im Men"u {\sl File} den Men"upunkt {\sl Load Class (File)} ausw"ahlen; es erscheint ein Auswahlfenster;
\end{minipage}
\hfill \hfill
\begin{minipage}{5cm}
\vspace{0.2cm}
\epsfxsize=4cm
\epsffile{\pics/loadClassfileMen.ps}
\vspace{0.2cm}
\end{minipage}
\par
\begin{minipage}{9cm}
\item
{\bf Aktion}: im Auswahlfenster:\\
{\sl PackageTour.all} ausw"ahlen und den Knopf {\sl Open} dr"ucken;
\end{minipage}
\hfill \hfill
\begin{minipage}{5cm}
\vspace{0.2cm}
\epsfxsize=3.5cm
\epsffile{\pics/loadClassfromMetaWin.ps}
\vspace{0.2cm}
\end{minipage}
\par
\begin{minipage}{6.5cm}
\item
{\bf Aktion}: im Klasseneditor:\\
im Men"u {\sl Editor} den Men"upunkt {\sl Show} und darin den Men"upunkt {\sl Methods} w"ahlen;\\
Anzeige: Es wird die {\sl Methods}-Komponente im Klasseneditor angezeigt.
\end{minipage}
\hfill \hfill
\begin{minipage}{5cm}
\vspace{0.2cm}
\epsfxsize=6cm
\epsffile{\pics/showMethmen.ps}
\end{minipage}
\end{itemize}
\item {\bf Positionieren}:\\
{\bf Aktion:} Verschieben wie in Abb. \ref{monlayout2} angezeigt.
\end{enumerate}

\subsection{"Offnen von Textdateien}
F"ur das "Offnen von Textdateien wird das dritte vorbereitete Kommandofenster (mit dem Verzeichnispfad \verb$/local/tw1/om1/test/tycoon/bootlib/$) verwendet.
\begin{itemize}
\item Klasseninterface f"ur {\sl PackageTour}\\
"Offnen von \verb$PackageTour.ti$ im Verzeichnis \verb$tycoon/bootlib/om1Tracy$:\\
  \verb$  te om1Tracy/PackageTour.ti$
\item Dateien mit Funktionen auf Schnittstellen f"ur Interaktivmodus\\
"Offnen von \verb$shortDemoInteractive.tm$ und \verb$longDemoInteractive.tm$ im Verzeichnis \verb$tycoon/bootlib/scripts$:\\
  \verb$  te scripts/shortDemoInteractive.tm$\\
  \verb$  te scripts/longDemoInteractive.tm$
 \end{itemize}
Das Fenster mit dem Tycoon Klasseninterface f"ur {\sl PackageTour} wird entsprechend Abb. \ref{monlayout3} positioniert, die beiden anderen Fenster untereinander davor.

Danach werden alle Fenster geschlossen und ihre Icons entsprechend Abb. \ref{sticons} auf dem Bildschirm positioniert. Zur Unterscheidung der Icons sind sie verschieden gef"arbt und beschriftet:
\begin{itemize}
\item STYLETop Editor: blau, Name: {\sl StyleTop};
\item Graphikeditor: gr"un, Name: {\sl Tracy};
\item Schemabrowser: gelb, Name: {\sl Tracy};
\item Instanzbrowser: rot, Name: {\sl Tracy};
\item Klasseneditor: gelb, Name: {\sl PackageTour};
\item weitere Icons f"ur Kommando-/Textfenster.
\begin{figure}[H]
\begin{center}
\leavevmode
\epsfxsize=16cm
\epsffile{\pics/styleicons.ps}
\end{center}
\caption{Anordnung von Icons der STYLE Werkzeuge und weiterer Kommando- und Editierfenster}
\label{sticons}
\end{figure}
\end{itemize}

\newpage
\section{Start der Demo}
Der in diesem Abschnitt vorgestellte Ablauf entspricht genau dem der Kurzdemo.
In Abschnitt \ref{longsec} folgen die zus"atzlichen Schritte der Langdemo.
\subsection{Folie I}
\begin{figure}[htp]
\begin{center}
\leavevmode
\epsfxsize=12cm
\epsffile{\pics/styleflex.epsf}
\end{center}
\end{figure}

Willkommen zur STYLE Demo.
Das STYLE Projekt untersucht die flexible Unterst"utzung unterschiedlicher Datenmodelle in einer persistenten, uniformen Sprachumgebung mit flexibler Anbindung externer Dienste durch systematische Konstruktion von Enwicklungsumgebungen.

Die STYLE Demo pr"asentiert eine datenmodellspezifische Entwickungsumgebung f"ur das objektorientiere Datenmodell OM1, deren Realisierung der STYLE Systematik folgt und damit auf der systematischen Kombination generischer Dienste und Generatoren basiert.

\subsection{Folie II}
\begin{figure}[H]
\begin{center}
\leavevmode
\epsfxsize=14cm
\epsffile{\pics/styleover.ps}
\end{center}
\end{figure}

Die Demo beginnt mit dem STYLE-Top Editor, von dem aus Werkzeuge auf der Mo\-del\-lie\-rungs-, der Programmier- und der Animationsebene w"ahlbar sind.
Eine typische Entwurfsunterst"utzung durch die STYLE Umgebung sieht folgende Aufgaben vor.\\

Im Graphikeditor modelliert der Benutzer Anwendungsschemata durch Klassenknoten, Werteknoten, Referenz- und Vererbungskanten. Aus diesen strukturellen Informationen werden durch Generatorunterst"utzung textuelle Schemarepr"asentationen erzeugt, die im Texteditor um benutzerdefinierte Integrit"atsbedingungen und Methoden erg"anzt werden. Aus dieser vervollst"andigten Modellierung werden TL Schnittstellen und Module generiert, die Objekt- und Klassenstrukturen sowie Standardmethoden bereitstellen, die die modellinh"arenten und benutzerdefinierten Integrit"atsbedingungen erf"ullen. Auf diesen Schnittstellen erfolgt die Programmierung der benutzerdefinierten Methoden in der TL-Sprachumgebung. Die Animationskomponente stellt einen Datenbankprototyp mit Benutzerschnittstelle zum Erzeugen, L"oschen und Ver"andern von Anwendungsobjekten bereit. Dieser ruft die generierten Standardmethoden auf.

\subsection{STYLETop Editor}
\begin{minipage}{8.3cm}
{\bf Aktion: vorbereiteten STYLETop Editor aufklappen}
Wir beginnen mit dem STYLETop Editor, in dem vorhandene Systeme mit den in ihn enthaltenen Schemata angezeigt werden. Wir w"ahlen in dem Standardsystem das Schema {\sl TRACY} aus. 

Zu diesem Schema k"onnen wir "uber den Knopf {\sl Open Graphics} den Graphikeditor "offnen, "uber den Knopf {\sl Open Schema} den Schemabrowser, der eine Liste von Klassen- und Typnamen des Schema anzeigt, aus der heraus die jeweiligen Klasseneditoren ge"offnet werden k"onnen. 
{\sl Open Instance} ruft die Animationskomponente auf.

Wir rufen zun"achst den Graphikeditor auf ({\sl Open Graphics}).
\end{minipage}
\hfill \hfill
\begin{minipage}{7cm}
\epsfxsize=7cm
\epsffile{\pics/openTracy.ps}
\end{minipage}

\subsection{Graphikeditor}

(allgemein bei Bedienung zu beachten: Maushandling, Zusammenspiel von linker und rechter Maustaste)
\paragraph{Aktion: vorbereiteten Graphikeditor aufklappen}

Der Graphikeditor zeigt unser Demobeispiel, die Modellierung einer Reiseagentur. Wir betrachten haupts"achlich die Klassen {\sl PackageTour}, {\sl Hotel} und {\sl Flight}. Die graphische Anzeige erfolgt in unterschiedlichen Granularit"atsstufen, die aktuelle Anzeige gibt einen "Uberblick "uber die definierten Klassen eines Schemas sowie deren Beziehungen. Vererbungsbeziehungen werden der "Ubersicht halber in einem eigenen Fenster angezeigt.\\
\begin{minipage}{11.3cm}
{\bf Aktion: in Men"u {\sl Layers} den Men"upunkt {\sl Layer3} ausw"ahlen}\\
Eine weitere Stufe erg"anzt die "Uberblicksanzeige um die Werteattribute von Klassen.\\
{\bf Aktion: in Men"u {\sl Layers} den Men"upunkt {\sl Layer1} ausw"ahlen}
\end{minipage}
\hfill \hfill
\begin{minipage}{5cm}
\epsfxsize=4cm
\epsffile{\pics/layer3men.ps}
\end{minipage}
\vspace{0.3cm}

{\bf Aktion: im Men"u {\sl Scheme} den Men"upunkt {\sl Generate Schema} ausw"ahlen und Scrollen "uber die generierte textuelle Ausgabe im Kommandofenster der Tycoon-Maschine}.\\
Schemaweit lassen sich aus diesen strukturellen Informationen textuelle Repr"asentationen generieren.\\
\par
Neben Schemaanzeige lassen sich im Editor Schemata graphisch erstellen. Wir wechseln hierzu in den Editmodus.\\ 
\begin{minipage}{9.3cm}
{\bf Aktion: in Men"u {\sl Choice} den Men"upunkt {\sl Edit} ausw"ahlen}\\
Neben Schemaanzeige lassen sich im Editor Schemata graphisch erstellen. Wir wechseln hierzu in den Editmodus.
\end{minipage}
\hfill \hfill
\begin{minipage}{7cm}
\epsfxsize=6cm
\epsffile{\pics/vieweditmen.ps}
%\vspace{0.2cm}
\end{minipage}
\vspace{0.3cm}

Falls das Einf"ugen von Klassenknoten (oder Kanten) gezeigt werden soll, dann\\

\begin{minipage}{11cm}
{\bf Aktion: in (im Edit-Modus erscheinendem) Men"u {\sl Classes} den Men"upunkt {\sl Insert} ausw"ahlen}
\begin{figure}[H]
\epsfxsize=7cm
\epsffile{\pics/insCarOffer.ps}
\end{figure}
\end{minipage}
\begin{minipage}{5cm}
\epsfxsize=4.5cm
\epsffile{\pics/classinsertmen.ps}
\end{minipage}
Gridraster erscheint. Gridpunkt mit linker Maustaske selektieren, Label eintippen und {\sl Return}-Taste dr"ucken.
(Bei L"oschen des Knotens, erst in Men"u {\sl Classes} den Men"upunkt {\sl Delete} ausw"ahlen, dann den zu l"oschenden Klassenknoten selektieren).\\
%\newpage
\vspace{0.3cm}
\begin{minipage}{10.7cm}
{\bf Aktion: in Men"u {\sl Classes} den Men"upunkt {\sl Single Class} ausw"ahlen, dann mit der linken Maustaste den Klassenknoten {\sl PackageTour} selektieren und durch Dr"ucken und Halten der rechten Maustaste auf dem Klassenknoten das klassenbezogene Men"u "offnen}\\
"Uber den Men"upunkt {\sl Generate Class} kann die Textgenerierung klassenweise durchgef"uhrt werden und "uber den Men"upunkt {\sl Open ClassEditor} der zu einem Klassenknoten geh"orige Klasseneditor ge"offnet werden.
\end{minipage}
\hfill \hfill
\begin{minipage}{5cm}
\epsfxsize=4.5cm
\epsffile{\pics/packageTopenClassEdmen.ps}
\vspace{0.2cm}
\end{minipage}

\subsection{Schemabrowser}

\paragraph{Aktion: vorbereiteten Schemabrowser aufklappen}
Alternativ l"a"st sich der Klasseneditor zu einer Klasse "uber den Schemabrowser "offnen. Diesen Weg gehen wir f"ur die Klasse {\sl PackageTour}.

\subsection{Klasseneditor}
\paragraph{Aktion: vorbereiteten Klasseneditor aufklappen}
Der Klasseneditor zeigt die vier Komponenten einer OM1 Klassendefinition {\sl Specialization}, {\sl Structure}, {\sl Constraints} und {\sl Methods}.
In der Spezialisierungskomponente ist die {\sl isSubClassOf}-Beziehung zwischen {\sl Tour} und {\sl PackageTour} angezeigt. Die Strukturkomponente besteht (in der Vollanzeige) aus den geerbten (z.B. {\sl tourNo}, {\sl travelTime} und {\sl country}) und den zus"atzlich definierten (weiteren) Attributen der Klasse {\sl PackageTour}, wobei Referenzbeziehungen durch das Schl"usselwort {\bf ref} gekennzeichnet sind.

Die Komponente {\sl Constraints} enth"alt benutzerdefinierte Integrit"atsbedingungen, in Pr"adikatenlogik erster Ordnung formuliert. Die erste Bedingung {\sl HotelFlight} legt fest, da"s die angebotenen Fl"uge einer Pauschalreise in die gleiche Region f"uhren m"ussen, in der das Hotel liegt.

Die Komponente {\sl Methods} enth"alt eine benutzerdefinierte Methode {\sl removePackageTourWithHotel}, die im Falle eines Hotelausfalls alle gebuchten Reisen zu diesem Hotel auf entsprechende andere Hotels (und andere Pauschalreisen) umbucht und erst danach ein L"oschen der Pauschalreise vornimmt.

\vspace{0.3cm}
\begin{minipage}{10.8cm}
{\bf Aktion: Men"u {\sl Queries} aufgeklappt halten}\\
Im Klasseneditor werden Modellierungshilfen in Form von Anfragen an das gesamte Schema angeboten, z.B. nach den transitiv referenzierten Klassen (Men"upunkt: {\sl Transitive Ref. Classes}), benutzten Typen (Men"upunkt: {\sl Used Types}) oder Subklassen (Men"upunkt: {\sl Subclasses}) einer Klasse. "Uber deren Auflistung kann man erneut Klassen- oder Typeditoren aufrufen. Hierdurch wird z.B. die Formulierung von klassen"ubergreifenden Integrit"atsbedingungen unterst"utzt.
\end{minipage}
\hfill \hfill
\begin{minipage}{4.5cm}
\epsfxsize=4.5cm
\epsffile{\pics/cedQueriesMen.ps}
\end{minipage}
\vspace{0.3cm}

\begin{minipage}{10.3cm}
{\bf Aktion: Men"u {\sl Processing} aufgeklappt halten}\\
Aus dem Klasseneditor heraus kann die Codegenerierung sowie die Erzeugung von Instanzeditoren klassenweise aufgerufen werden. Dar"uberhinaus werden Funktionen zur Syntax"uberpr"ufung und Erzeugung eines LateX-Dokumentes angeboten.
\end{minipage}
\hfill \hfill
\begin{minipage}{5cm}
\epsfxsize=5cm
\epsffile{\pics/cedProcessMen.ps}
\end{minipage}
\vspace{0.3cm}

\subsection{Programmierebene}
\paragraph{Aktion: Aufklappen der generierten Schnittstelle PackageTour.ti}
Das Fenster zeigt die aus der OM1 Klassendefinition generierte Schnittstelle \verb$PackageTour.ti$. Sie exportiert einen abstrakten Objekttyp T zusammen mit Standardmethoden zum Einf"ugen, L"oschen, Lesen und "Andern von Objekten. Die "Anderungsmethoden erf"ullen die modellinh"arenten Integrit"atbedingungen referentielle und {\sl isa} (Subklassen-) Integrit"at sowie die benutzerdefinierten. Intern wird die Klassenextension durch geeignete Strukturen verwaltet.

Auf diesen Schnittstellen kann die Anwendungsprogrammierung aufsetzen und z.B.  die spezifizierten benutzerdefinierten Methoden implementiert werden.

\subsection{Animationskomponente und TL Interaktionsmodus}
\paragraph{Aktion: Aufklappen des Instanzbrowsers und Zeigen auf den Knopf {\sl interactive}}
Die Animationskomponente stellt eine interaktive Datenbankbenutzeroberfl"ache zum Bearbeitung konkreter Anwendungsobjekte zur Verf"ugung. Die bereitgestellte Funktionalit"at benutzt die generierten Klassenschnittstellen sowie generierte Datenbankeditoren.\\
\begin{minipage}{5.3cm}
{\bf Aktion: Auswahl der Klasse {\sl Area} und der Methode {\sl elements} im Instanzbrowser, Dr"ucken des {\sl Apply} Knopfes}\\
\vspace{0.3cm}

Durch Auswahl der Klas\-se {\sl Area}, der Methode {\sl elements} und Dr"ucken des {\sl Apply} Knopfes wird der Datenbankeditor f"ur die Anzeige von {\sl Areas} ge"offnet, durch Dr"ucken auf den Rollbalken kann durch die vorhandenen {\sl Areas} gescrollt werden (f"unf an der Zahl). 
\end{minipage}
\hfill \hfill
\begin{minipage}{10cm}
\epsfxsize=9cm
\epsffile{\pics/areaelem.ps}
\vspace{0.3cm}
\epsfxsize=7cm
\epsffile{\pics/areabrowser.ps}
\end{minipage}

\paragraph{Aktion: im Fenstermen"u des Areabrowsers Auswahl des Men"upunkts {\sl Quit}}
Im dem TL Fenster werden dar"uberhinaus die hinter der Datenbankbrowserbenutzung  stehenden Aufrufe der entsprechenden Editoren, die ihrerseits die generierten Klassenmethoden aufrufen, angezeigt. 
\vspace{0.3cm}

\begin{minipage}{6.3cm}
{\bf Aktion: Auswahl der Klasse {\sl Area} und der Methode {\sl create} im Instanzbrowser, Dr"ucken des {\sl Apply} Knopfes} (Aufklappen eines neuen {\sl area-Input}-Editors).\\
Beim Erzeugen einer {\sl Area} wollen wir die Verletzung der referenziellen Integrit"at zeigen, wir f"ugen hierzu die {\sl Area} {\sl Toscany} im Country {\sl Italy} ein, das noch nicht als Land existiert.\\
Nach Dr"ucken des Knopfes {\sl Apply} im Area(!!) Editor erscheint die Fehlermeldung im Kommandofenster der interaktiven Tycoonmaschine.\\
\end{minipage}
\hfill \hfill
\begin{minipage}{9cm}
\epsfxsize=9cm
\epsffile{\pics/areacreate.ps}
\vspace{0.3cm}
\epsfxsize=7cm
\epsffile{\pics/areain.ps}
\end{minipage}
{\bf Aktion: im Fenstermen"u des Areaeditors Auswahl des Men"upunkts {\sl Quit}}
{\vspace{0.3cm}

\begin{minipage}{10.3cm}
{\vspace{0.3cm}
\bf Aktion: Dr"ucken des {\sl Interactive} Knopfes im Instanzbrowser und "Offnen der Datei \verb$shortDemoInteractive.tm$; {\sl copy} und {\sl paste} der Dateidaten ins Kommandofenster der zweiten Tycoonmaschine.}
\end{minipage}
\hfill \hfill
\begin{minipage}{5cm}
\epsfxsize=5cm
\epsffile{\pics/interactivebut.ps}
\end{minipage}

"Uber den {\sl Interactive} Knopf kann in eine interaktive TL Programmierumgebung gewechselt werden, von der aus die generierten Klassenmethoden (und Editoren, sofern importiert, in der Demoumgebung nicht der Fall) und alle weiteren in der Umgebung bereitgestellten Bibliotheksdienste zur Anwendungsprogrammierung und interaktiven Datenbankanfrage/-Ver"anderung herangezogen werden k"onnen.

Die in \verb$shortDemoInteractive.tm$ stehende Transaktion f"angt die Verletzung der referentiellen Integrit"at ab (selbes Beispiel wie bei Editorbenutzung) und f"uhrt statt dessen (im \verb$else$ Zweig) erst die Erzeugung des {\sl Country} und dann der {\sl Area} erfolgreich durch.
\begin{verbatim}
 try  area.create(tuple "Toscana" tuple "Italy" end end) 
 else country.create(tuple "Italy"  "mediterrian climate, good wine" end)
      area.create(tuple "Toscana" tuple "Italy" end end) 
 end;
\end{verbatim}


%------------------------------------------------------------------
\section{Erweiterungen in der Langdemo}\label{longsec}

\subsection{Einsatz eines generischen Dienstes zur IC-"Uberwachung mit Vorteil von IC-"Anderungsunterst"utzung}  
\begin{itemize}
\item Intention:\\
Ankn"upfend an die Folie (der Fide-Demo) "uber Aufbau der generierten Schichten und dem Umgang mit ICs soll gezeigt werden, da"s die Ver"anderung von IC-"Uberpr"ufungen allein durch die Neugenerierung und der "Anderung der IC-Kollektionen in der IC-"Uberwachungskomponente m"oglich ist.

\item Dazu das Beispiel:\\
{\bf Aktion: "Offnen der Datei \verb$longDemoInteractive.tm$ und {\sl copy} und {\sl paste} des {\sl create} Aufrufs} Im {\sl TL Interaktionsmodus} (der bereits oben durch Dr"ucken des Knopfes {\sl interactive} im Fenster des Instance Browsers eingeschaltet wurde) wird durch Aufruf der Funktion {\sl create} versucht, eine neue {\sl PackageTour} einzuf"ugen, bei der das Hotel in "`St. Andrews"' in der {\sl Area} "`Fife"' liegt, aber der Flug "uber "`Glasgow"' geht, das in einer anderen {\sl Area} liegt. Aufgrund der verschiedenen {\sl Areas} scheitert das Einf"ugen.\\
{\bf Aktion: Im zweiten Kommandofenster (in dem Tycoon mit dem Store\\ \verb$om1TracyTransIc$ gestartet wurde) denselben {\sl create} Aufruf (s.o.) t"atigen} Die Store Umgebung einer weiteren Tycoon Maschine in {\bf diesem} Fenster enth"alt eine Lockerung der Bedingungen: Nicht die Area-Gleichheit, sondern nur noch Land-Gleichheit mu"s gelten. Das Einf"ugen der {\sl PackageTour} mit derselben {\sl create} Funktion wie oben ist in dieser Tycoon Maschine, die die neu generierten IC-Kollektionen besitzt, erfolgreich: "`Glasgow"' ({\sl Airport}) und "`St. Andrews"' ({\sl Hotel}) liegen im selben Land "`Scotland"' ({\sl Country}).
\item Bemerkung:\\
Lockerung der Bedingung kann sogar realit"atsnah begr"undet werden. Wenn Reisegesellschaften ihre Buchungen nicht voll bekommen, lockern sie Bedingungen, um vor allem die von ihnen gebuchten Fl"uge auszulasten (da die der kostenkritische Faktor sind). Allerdings Vorsicht: wir haben das ganze etwas vereinfacht, da es sich hier um den Eintrag einer {\sl PackageTour} und nicht einer Buchung ({\sl ActualizedTour}) handelt. Falls Fragen kommen, sagen, da"s ist nur zur Vereinfachung passiert, um das wesentliche zu zeigen. Ansonsten ist durch die Unterscheidung {\sl PackageTour}, {\sl ActualizedTour} in unserer Modellierung die Realit"at genau an diesem Punkt anwendungsgetreu nachgebildet (Verweis auf Ingrids Diss und Beeri-Paper). 
\end{itemize}

\subsection{Anwendungsprogrammierung auf generierten Schnittstellen}
\begin{itemize}
\item Intention:\\
Ausf"uhrung einer benutzerdefinierten und "`per Hand"' programmierten Transaktion, die die generischen Klassenschnittstellen benutzt.
Die Transaktion implementiert eine benutzerdefinierte Methode zum L"oschen eines Hotels, die die in {\sl PackageTour} definierte Transaktion {\sl removePackageTourWithHotel} f"ur alle Pauschalreisen, die dieses Hotel anbieten, aufruft. {\sl RemovePackageTourWithHotel} bucht alle auf eine Pauschalreise ({\sl PackageTour}) gebuchten Reisen ({\sl ActualizedTours}) auf "`vergleichbare"' Pauschalreisen (gleiche Ausstattung/ in derselben Region gelegen) um und l"oscht danach die {\sl PackageTour} "uber die Standardl"oschmethode. Das L"oschen kann erst nach dem Umbuchen erfolgen, andernfalls w"urde es wegen Verletzung modellinh"arenter Integrit"atsbedingungen (auf die {\sl PackageTour} zeigen noch Referenzen) zur"uckgewiesen. Dies wird durch nachfolgende Anfragen, siehe Kommentare im Code, nachgewiesen.\\
{\bf Aktion: "Offnen der Datei \verb$longDemoInteractive.tm$ und {\sl copy} und {\sl paste} des {\sl create} Aufrufs}
\item {\bf Aktion: Durch {\sl copy} und {\sl paste} die in der Datei \verb$longDemoInteractive.tm$ nach \verb$Transaktionsdemo$ aufgef"uhrten TL Aufrufe der generierten Klassenschnittstellen in der Tycoonmaschine ausf"uhren}.
Erkl"arung der Aufrufe anhand des Transaktionscodes.
\end{itemize}
\begin{verbatim}
tracyTrans.deleteHotel(tuple "Calypso" tuple "WestCrete" end tuple "Chania"
  tuple "WestCrete" end end end dateDef.new(10 4 1993));

actualizedTour.lookup(tuple 1302 end);
(* geloescht, da Reisebeginn vor dem 10.4. *)

let actualizedTour1101 = actualizedTour.lookup(tuple 1101 end);

packageTour.getTourNo(actualizedTour.getPackageTour(actualizedTour1101));
(* Ergebnis 14, da ActualizedTour 1101 jetzt auf PackageTour 14 zeigt *)

let actualizedTour1303 = actualizedTour.lookup(tuple 1303 end);

hotel.getName(packageTour.getHotel(actualizedTour.getPackageTour(actualizedTour1303)));
(* Ergebnis: Atrion, da ActualizedTour 1303 jetzt auf PackageTour 16 zeigt, 
   die das Hotel Atrion enthaelt *)


packageTour.lookup(tuple 11 tuple "Greece" end end);
(* nicht mehr vorhanden, geloescht, da Hotel Calypso nicht mehr vorhanden *)

tour.lookup(tuple 11 tuple "Greece" end end);
(* vorhanden, da nur PackageTour, nicht aber Tour geloescht wird *)


hotel.lookup(tuple "Calypso" tuple "WestCrete" end tuple "Chania" 
             tuple "WestCrete" end end end);
(* Hotel ist nicht mehr in Klassenextension, wurde geloescht *)
\end{verbatim}

{\bf Genauerer Kommentar zur Transaktion ("uber vorhandene und zu l"oschende Daten)}: \\

Folgende drei Hotels befinden sich bereits im Store \verb$om1TracyTransIc$:
\begin{itemize}
\item {\sl Hotel} "'Calypso"' in der {\sl Town} "'Chania"' in der {\sl Area} "'WestCrete"' im {\sl Country} "'Greece"' 
\item {\sl Hotel} "'Atrion"' in der {\sl Town} "'Chania"' in der {\sl Area} "'WestCrete"' im {\sl Country} "'Greece"'
\item {\sl Hotel} "'Rethymnon"' in der {\sl Town} "'Rethymnon"' in der {\sl Area} "'WestCrete"' im Country "'Greece"'
\end{itemize}
Zu jedem Hotel gibt es zwei {\sl PackageTours}, wobei die erste am Samstag von Hamburg startet und die zweite am Mittwoch von Muenchen. Die {\sl PackageTours} 11 und 13 gehen ins Hotel "'Calypso"', 14 und 16 ins "'Atrion"' und 26 und 28 ins {\sl Hotel} "'Rethymnon"'.\\

Zu jeder {\sl PackageTour} gibt es drei {\sl ActualizedTours}, die durch eine vierstellige Zahl gekennzeichnet werden, wobei die ersten beiden Ziffern der Nummer der {\sl PackageTour} entsprechen, die letzten beiden Ziffern 01, 02 oder 03 sind. \\

{\bf Beispiel: L"oschen eines Hotels mit HotelKey und mit Datumsangabe, ab wann das Hotel gel"oscht werden soll. Hier: L"oschen des Hotels "'Calypso"' ab dem 10.4.1993}. \\

Die Transaktion bewirkt folgendes: \\
Es werden zun"achst alle f"ur dieses Hotel gebuchten Reisen ({\sl ActualizedTours}) herausgesucht. Diejenigen {\sl ActualizedTours}, deren Reisebeginn vor dem L"oschdatum des Hotels liegt, werden gel"oscht. F"ur die restlichen wird alternativ eine {\sl PackageTour} mit Fl"ugen ({\sl Flights}) am gleichen Tag ausgesucht, die nach  M"oglichkeit ein Hotel im gleichen Ort, ansonsten in der gleichen Region ({\sl Area}) hat. Ist eine solche {\sl PackageTour} nicht vorhanden, so wird die {\sl ActualizedTour} gel"oscht. Gibt es eine alternative {\sl PackageTour}, so werden die Buchungen f"ur das neue Hotel vorgenommen. Die alten Fl"uge werden storniert und die neuen Fl"uge gebucht. Wenn alle Umbuchungen erfolgt sind, werden die {\sl PackageTours} mit dem zu l"oschenden Hotel gel"oscht. Abschlie"send erfolgt das L"oschen des Hotels. \\
Das konkrete Beispiel enth"alt folgende Daten und Daten"anderungen:
\begin{itemize}
\item Die {\sl ActualizedTours}, die das Hotel "'Calypso"' referenzieren, sind\\
1101,1102,1103,1301,1302 und 1303.
\item Folgende von diesen werden gel"oscht, da ihr Reisebeginn bereits vor dem 10.4. liegt:\\
 1103 und 1302.
\item Die {\sl ActualizedTours} 1101 und 1102 erhalten als neue {\sl PackageTour} die mit der Nummer 14, die das Hotel Atrion, welches im gleichen Ort wie das Hotel "'Calypso"' liegt, enth"alt.
\item Die {\sl ActualizedTours} 1301 und 1303 erhalten als neue {\sl PackageTour} die mit der Numer 16, die ebenfalls Hotel "'Atrion"' hat.
\end{itemize}

\newpage
\subsection{Erweiterte Graphikdarstellung anhand eines weiteren Anwendungsbeispiels}

\subsubsection{Vorbereitung: Auswahl der {\sl Court}-Anwendung}
Aktionen im STYLETop Editor:
\begin{itemize}
\item im rechten Dateiauswahlfenster: {\sl Court} ausw"ahlen.
\item rechts unten den Knopf {\sl OPEN Graphics} dr"ucken und warten, bis das Diagramm vollst"andig angezeigt wird (Dauer ca. 15 Sekunden);\\
Anzeige: Graphikeditorfenster mit Referenzdiagramm des {\sl Court}-Beispiels (Klassenknoten, Referenzkanten, Rautensymbole f"ur versteckte Werteknoten).
\end{itemize}

\subsubsection{Kommentar}
Der Graphikeditor zeigt ein zweites Anwendungsbeispiel, die Modellierung eines Gerichts mit angezeigten Klassen f"ur Untersuchungen ({\sl Investigation}), Verhandlungen ({\sl Trial}), F"allen ({\sl Case}), Richtern ({\sl Judge}) Anklage ({\sl Accuser}) etc.
\begin{itemize}
\item {\bf Aktion: im Men"u {\sl Grid} den Men"upunkt {\sl Extended} ausw"ahlen und darauf zeigen};\\
Eine engere Rasterung im erweiterten Rastermodus erm"oglicht die Darstellung von noch mehr Beziehungen zwischen Klassen. Unterst"utzt wird vor allem die Darstellbarkeit von kaskadierenden Beziehungen einer Klasse -- im Beispiel u.a. {\sl Case} (Fall) -- zu n weiteren Klassen -- im Beispiel {\sl PoliceDept, Accuser, Accusation} (Polizeibeh"orde, Ankl"ager, Angeklagter), zwischen denen keine weiteren Beziehungen bestehen.
\item {\bf Aktion: im Men"u {\sl Layers} den Men"upunkt {\sl Layer3} ausw"ahlen};\\
Werteattribute und Vererbungsbeziehungen lassen sich ebenso wie im {\sl Tracy}-Beispiel anzeigen und ausblenden.\\
{\bf Aktion:} im Men"u {\sl Scheme} den Men"upunkt {\sl Inheritance Scheme} ausw"ahlen.
\end{itemize}

\end{document}
