%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                                    %
% Diplomarbeit von Sven Muessig                                      %
% angefangen am 13-okt-92                                            %
%                                                                    %
% Universitaet Hamburg                                               %
% Fachbereich Informatik                                             %
% Arbeitsbereich DBIS                                                %
%                                                                    %
% Kapitel: Programmierumgebungen fuer datenintensive Anwendungen     %
%                                                                    %
% Version vom 03-jul-94                                              %
%                                                                    %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\cleardoublepage

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\chapter{Programmierumgebungen f"ur datenintensive Anwendungen}
\label{Kap. Programmierumgebungen fuer datenintensive Anwendungen}

Bei Informationssystemen zur Unterst"utzung datenintensiver Anwendungen
wird zwischen System- und Anwendungskomponenten unterschieden. Sie sind
durch hohe Qualit"atsanforderungen an die  Systemprogramme (Korrektheit,
Effizienz, Mehrbenutzerf"ahigkeit und Fehlererholung), den gro"sen Umfang 
und die Langlebigkeit der entwickelten Anwendungssoftware sowie eine 
starke Spezialisierung auf immer wiederkehrende algorithmische und 
strukturelle Muster (mengenorientierte Anfragen, Konsistenzbedingungen,
generische Datenstrukturen) gekennzeichnet \cite{Matt93,ABW*90,Manifesto90}.

Technologische und marktwirtschaftliche Entwicklungen erfordern den
zunehmenden Einsatz von Informationssystemen f"ur neuartige (graphische,
geographische, statistische, multimediale) Informationsstrukturen in
substantiell ver"anderten (interaktiven, vernetzten, verteilten)
Gesamtsystemen \cite{Matt93,Blas90,Catt91,BaMy91}.

Um diesen erweiterten Anforderungen spezieller Anwendungsklassen und
Systemumgebungen gerecht zu werden, kommen in der Praxis zahlreiche
Systeme und Werkzeuge zur Erbringung \e{generischer Dienste} zum Einsatz.
Klassische Beispiele solcher generischen Diensterbringer, die eine wichtige
Rolle bei der Konstruktion interaktiver Informationssysteme spielen, sind
Programmiersprachen, Datenbankprogrammiersprachen sowie textuelle und
graphische Benutzerschnittstellen. Neben Datenvisualisierungswerkzeugen 
werden zahlreiche Werkzeuge, etwa zur Textrecherche, Datendeduktion 
und Transaktionskontrolle in verteilten Systemen, kommerziell angeboten.

Die Vielzahl spezialisierter Werkzeuge, Systemerweiterungen und
Modellierungsvarianten f"uhrt zu einer hohen Komplexit"at und
Heterogenit"at der mit ihnen entwickelten Gesamtsysteme und untergr"abt
damit wesentliche Qualit"aten, die zur Einf"uhrung integrierter 
Informationssysteme gef"uhrt haben. Trotz gro"ser Fortschritte bei der
L"osung isolierter Problemklassen ist daher eine generelle Unzufriedenheit
mit der Qualit"at heutiger Informationssysteme festzustellen (mangelnde
Interoperabilit"at, Adaptierbarkeit und Offenheit) \cite{Matt93,App*92}.

Die Qualit"at zuk"unftiger datenintensiver Anwendungen wird wesentlich 
durch die Flexibilit"at, Effizienz und Korrektheit des Zusammenspiels
verschiedenartiger, unabh"angig entwickelter Werkzeuge und Dienste
bestimmt werden. 

In den nachfolgenden Abschnitten werden drei unterschiedliche Ans"atze
zur Einbindung eines Dienstes zur Ansteuerung der Benutzerschnittstelle
in Datenbankprogrammierumgebungen vorgestellt und bewertet. Ziel dieser
Beschreibung ist es, die Vorteile der \ty-Entwicklungsumgebung 
hinsichtlich der Anbindung externer Dienste zu verdeutlichen. In Kapitel 
\ref{Kap. Graphische Benutzerschnittstellen in Tycoon} wird die 
Integration eines Dienstes zur dynamischen Erzeugung und Mani\-pu\-la\-tion 
von graphischen Benutzerschnittstellen vorgestellt.


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Lose Kopplung durch Wirtsspracheneinbettung}
\label{Abs. Lose Kopplung durch Wirtsspracheneinbettung}

Die Mehrheit aller Informationssysteme wird gegenw"artig in 
Programmiersprachen der dritten Generation \zB\ \cb\ \cite{COBOL74}, \f\ 
\cite{FORTRAN78}, \cc\ \cite{KeRi77} und \p\ \cite{Wirt71} implementiert.
Alle datenbankrelevanten Funktionen werden "uber Programmierschnittstellen
zu kommerziellen Datenbanksystemen, wie \zB\ zu \ing\ \cite{ESQL90} und
\ora\ \cite{Bron89}, angesprochen. Eine "ahnliche Situation ergibt sich
bei der Anbindung von Benutzerschnittstellen und der Visualisierung von
Daten.

\begin{figure}[hbt]
  \psbild{0.8#1}{pu}{LoseKopplung.ps}
  \caption{Schmale Dienstschnittstellen auf niedrigem Abstraktionsniveau
           \protect\cite{Matt93}}
  \label{Abb. Lose Kopplung}
\end{figure}

Solche \e{Dienste} sind auf einem niedrigen Abstraktionsniveau
"uber eine schmale Schnittstelle an die Sprache gebunden (\VAB\ 
\ref{Abb. Lose Kopplung}). "Uber diese Schnittstellen werden \idR\
Zeichenketten ausgetauscht. Der Kontrolltransfer zwischen
Benutzerschnittstelle und Anwendungsprogramm wird "uber
Benachrichtigungsprozeduren (\e{notifier}\,) und dazugeh"orige Aktionen
(\e{callbacks}\,) abgewickelt.

Wie durch verschiedenartige Linienmuster zwischen den Datenbank-,
Programm- und Bildschirmobjekten in Abbildung \ref{Abb. Lose Kopplung} 
angedeutet, mu"s der Programmierer f"ur die Objekte von verschiedenen
Servern verschiedene Benennungs-, Lebensdauer- und Bindungskonzepte 
erlernen. Ebenso mu"s er Bindungen zwischen den Objekten auf verschiedenen
Medien durch spezielle Namenskonventionen (Hostvariable, Datenbankvariable,
Identifikator f"ur ein Bildschirmobjekt) realisieren.

Der Vorteil, der sich aus der \e{losen Kopplung} ergibt, ist die durch
sie erreichbare Offenheit der Anwendungsumgebung. Bei Bedarf ist die 
Integration eines neuen Diensterbringers als Bibliothek in die 
Programmierumgebung ohne gr"o"sere Probleme m"oglich.


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Systemintegration in Datenbankprogrammiersprachen}
\label{Abs. Systemintegration in Datenbankprogrammiersprachen}

In Datenbankprogrammiersprachen vereinfacht sich das Programmierszenario
(\VAB\ \ref{Abb. Feste Kopplung}). In diesen Umgebungen ist ein 
transparenter Zugriff auf kurz- und langlebige Datenobjekte m"oglich. 
Desgleichen k"onnen kurz- und langlebige Datenobjekte uniform benannt
werden.

\begin{figure}[htb]
  \psbild{0.8#1}{pu}{FesteKopplung.ps}
  \caption{Geschlossene Programmierumgebungen zur Nutzung vordefinierter
           Dienste \protect\cite{Matt93}}
  \label{Abb. Feste Kopplung}
\end{figure}

Neben problemad"aquateren Datenmodellierungsstrukturen, wie \zB\ Verbunde
und Mengen, stehen in Datenbankprogrammiersprachen neuartige 
Kontrollstrukturen, wie \zB\ generische Operationen zur Iteration "uber
komplexe Objekte, zur Verf"ugung. Weitere generische Operationen
dienen dem Suchen in und dem Anzeigen von komplexen Objekten. Da 
innerhalb des Systems semantisch reichhaltigere Strukturen verwaltet
werden k"onnen, stehen f"ur Datenbankprogrammiersprachen im allgemeinen
wesentlich bessere Werkzeuge zur Programmentwicklung und -wartung zur
Verf"ugung (Debugger, Datenw"orterb"ucher und Browser). Zum Beispiel
k"onnen die Informationen aus den Datenw"orterb"uchern dazu verwendet
werden, dynamische Bildschirmrepr"asentationen f"ur Datenobjekte zu
generieren.

Es mu"s jedoch zwischen den f"ur den Anwendungsprogrammierer sichtbaren
Abstraktionen, \zB\ Relationen oder Formulardefinitionen, und den sie 
implementierenden Datenstrukturen und Algorithmen unterschieden werden.
Zur strikt typisierten Anwendungsprogrammierung werden relationale 
Sprachen wie \iw\ \cite{Ing90b} (\VAS\ \ref{Abs. INGRES}),
\dbpl\ \cite{ScMa92a} (\VAS\ \ref{Abs. DBPL}), \pl\ \cite{Orac90} und
\ix\ \cite{Infor86} sowie objektorientierte Systeme wie \ot\ 
\cite{BDK92} (\VAS\ \ref{Abs. O2}) und \gs\ \cite{BuOtSt91} 
(\VAS\ \ref{Abs. GemStone}) verwendet. Hingegen werden zur weitgehend
typunsicheren Systemimplementation Sprachen wie \cc\ oder \mz\
\cite{Wirt85,Schr91} verwendet.

Nachteil des von Datenbankprogrammiersprachen verfolgten \e{built-in}
Ansatzes \cite{MaSc91b} ist, da"s die Integration neuer generischer
Dienste ausschlie"slich durch den Entwickler des Systems vorgenommen 
werden kann. Zus"atzlich gef"ahrdet eine solche Erweiterung die 
Kompatibilit"at und Portabilit"at bereits existierender Anwendungen. 
Diese Problematik ist in Abbildung \ref{Abb. Feste Kopplung} durch den
Zugriff auf einen nicht vordefinierten generischen Diensterbringer
(\n) angedeutet. 

Weitere Nachteile sind die gegen"uber Programmiersprachen der dritten
Generation oft mangelnden sprachlichen Qualit"aten von 
Datenbankprogrammiersprachen und die fehlenden Konzepte f"ur
Modularisierung \cite{MaSc93b}.


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Systemintegration im Tycoon-System}
\label{Abs. Systemintegration im Tycoon-System}

In den beiden vorherigen Abschnitten sind die Vor- und Nachteile 
existierender Sprachen der dritten und vierten Generation aufgezeigt worden.
Mit dem \ty-System wird versucht, die Vorteile von Systemen der dritten und
vierten Generation in einer Programmierumgebung zu vereinen \cite{MaSc93b}.

Das \ty-System ist eine moderne Datenbankprogrammierumgebung, die den
sprachlichen und architektonischen Rahmen f"ur eine flexible Definition 
und Integration generischer Dienste in offenen Systemumgebungen 
bereitstellt. Zur Definition neuer und zur Einbindung bestehender externer
Dienste wird die algorithmisch vollst"andige, strikt typisierte und
polymorphe Programmiersprache h"oherer Ordnung \tl\ verwendet. Sie 
erm"oglicht eine flexible Benennung, Bindung und Typisierung der f"ur 
datenintensive Anwendungen relevanten Objekte und Dienste \cite{Matt93}.

\pagebreak

Das \ty-Modell weicht erheblich von dem Modell existierender 
Datenbankprogrammiersprachen ab. Wie in Abbildung 
\ref{Abb. Tycoon Kopplung} dargestellt, wird der gesamte Proze"s der 
Integration, Erweiterung, Spezialisierung, Nutzung und Definition
generischer Dienste in einem unifizierenden sprachlichen Rahmen
abgewickelt.

\begin{figure}[htb]
  \psbild{0.8#1}{pu}{TycoonKopplung.ps}
  \caption{Integration, Erweiterung und Nutzung generischer Dienste in
           \ty\ \protect\cite{Matt93}}
  \label{Abb. Tycoon Kopplung}
\end{figure}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\minisec{Einfl"usse anderer Programmiersprachen}

Die im \ty-System verwendete Programmiersprache \tl\ ist eine
Weiterentwicklung der experimentellen Sprachen \q\ (\e{Quantifiers and 
Subtypes}\,) \cite{Card89,Card90} und \pq\ \cite{Matt91a,Mue91,NMM92}. 
\pq\ ist ein um orthogonale Persistenz erweitertes \q-System. Abgesehen
von geringen syntaktischen Unterschieden werden alle sprachlichen 
Konstrukte dieser Sprachen in \tl\ voll unterst"utzt. \tl\ beseitigt 
einige Orthogonalit"atsrestriktionen von \q\ und f"uhrt wenige neue 
Sprachkonzepte ein, wie Subtypisierung zwischen Typoperatoren beliebiger
Ordnung, rekursive Typoperatoren, erweiterbare Verbundwerte sowie 
Bibliotheken.

Die syntaktische Struktur und das Modulkonzept von \tl\ lehnen sich
an die Sprachen der \m-Familie an (\mz, \ob\ \cite{Wirt87a}
\mzp\ \cite{RLW85}, \md\ \cite{Nels91} und \ada\ \cite{I*83}).
Semantisch ist \tl\ eng mit polymorphen funktionalen Sprachen der 
\ml-Sprachfamilie verwandt \cite{Card89,Card90,Maun91,FiHa88,Hudak89}.
Der Kern der semantischen Konzepte von \tl\ entspricht der Sprache 
\fsub\ \cite{CMMS91}, einer formalen Basis f"ur die Studie neuartiger
Typsysteme.

\tl\ eignet sich wie \cc\ sowohl zur Anwendungs- als auch zur 
Systemprogrammierung. Aufgrund seines polymorphen Typsystems l"a"st 
sich \tl\ auch als Datenmodellierungsprache einsetzen. Dies erinnert
an \lisp-Entwicklungssysteme \cite{B*88} und an kommerzielle 
objektorientierte Programmiersprachen, wie \st\ \cite{GoRo83} und 
\cpp\ \cite{Stro92}. Von den integrierten Datenbankprogrammiersprachen,
wie \psa\ \cite{ACC81a}, \nap\ \cite{DCBM89}, \amb\ \cite{Card86} und
\pq, erbt \ty\ die orthogonale Kombinierbarkeit elementarer 
Basiskonzepte f"ur Persistenzabstraktion, typvollst"andige 
Datenstrukturierung und Iterationsabstraktion \cite{AtBu86,ScMa90a}.
Dar"uber hinaus lassen sich die multiplen Programmrepr"asentationen,
wie \tl, \tml\ (\e{Tycoon Machine Language}, \VAB\ 
\ref{Abb. Systemarchitektur}) und \ptml\ (\e{Portable TML}\,), zur 
dynamischen Optimierung nutzen \cite{GaMa94,Kira94}.

Ausgehend von einer Analyse der konzeptionellen und technologischen
Grundlagen existierender Datenbanksprachen \cite{MaSc91b,MaSc91}, 
verfolgt das \ty-System die Idee einer stark reduzierten Kernsprache
zur Benennung, Bindung und Typisierung vordefinierter semantischer 
Objekte, wie Variablen, Funktionen, Typvariablen und Typoperatoren.
Gleichzeitig ist es m"oglich, den Sprachkern vollst"andig typsicher
um externe semantische Objekte (ganze Zahlen, Flie"skommazahlen,
Zeichenketten, Felder, Relationen, Sichten, Dateien, Fenster usw.)
und die mit ihnen assoziierten generischen Funktionen zu erweitern 
(\e{add-on} vs.\ \e{built-in}\,) \cite{MaSc91}.

Von persistenten Systemen stammt das Konzept der Abwicklung aller
Speicherzugriffe auf Daten und Programmrepr"asentationen "uber eine
Softwareschnittstelle auf sehr niedrigem Abstraktionsniveau (\VAB\ 
\ref{Abb. Systemarchitektur}). Dies f"uhrt zu einer Vereinfachung 
der Gesamtkomplexit"at persistenter Systeme, die durch einen zu 
vernachl"assigenden Effizienzverlust erkauft wird \cite{Matt93,Mue91}.

Das \ty-System besitzt eine interaktive Programmierumgebung, wie 
sie auch in funktionalen Systemen (\ml, \lisp) zu finden ist. Dadurch
unterscheidet es sich von konventionellen "Ubersetzersystemen, wie \zB\
\cc-, \mz- oder \ada-"Ubersetzern. Neben dem Einsatz als
Datenbankprogrammiersprache k"onnen daher auch ad hoc-Datenbankanfragen
gestellt werden. Zusammen mit dem Konzept der Persistenz ist ein 
inkrementelles Arbeiten "uber mehrere Benutzersitzungen hinweg m"oglich.
Gleichzeitig unterst"utzt das Bibliothekskonzept von \tl\ die 
kontrollierte, gemeinsame Nutzung von Daten und Programmen durch mehrere
Benutzer.

\tl\ erm"oglicht die Programmierung in verschiedenen Modellierungsstilen.
\e{Funktionale} und \e{imperative} Programmierung werden direkt
unterst"utzt. Aufgrund weitgehender sprachlicher Neutralit"at wird auch
eine Variante des \e{objektorientierten} Programmierens erm"oglicht.
\e{Relationale} und \e{logikbasierte} Programmierung \cite{Mink88}
werden nicht unmittelbar gef"ordert, weil sich unifikationsbasierte
Evaluationsmodelle und deklarative Ans"atze zu stark von funktionalen 
und imperativen Strukturen unterscheiden.


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\minisec{Architektur des Tycoon-Systems}

Damit die Sprache \tl\ im \ty-System eingeordnet werden kann, wird 
nachfolgend ein kurzer "Uberblick "uber die \ty-Systemarchitektur 
gegeben. Die Komponenten werden \zB\ in \cite{Matt93} ausf"uhrlich 
beschrieben. Abbildung \ref{Abb. Systemarchitektur} vermittelt einen 
"Uberblick "uber die Komponenten und Schnittstellen der 
\ty-Systemarchitektur.

\begin{figure}[htb]
  \psbild{0.9#1}{pu}{SystemArchitektur.ps}
  \caption{Schichten und Schnittstellen der \ty-Systemarchitektur
           \protect\cite{Matt93}}
  \label{Abb. Systemarchitektur}
\end{figure}

Die \e{Tycoon Language} (\tl) bildet die Schnittstelle, "uber die 
Anwendungsprogrammierer auf das \ty-System zugreifen. Als weitere
Schnittstellen existieren die \e{Tycoon Machine Language} (\tml) und
das \e{Tycoon Store Protocol} (\tsp). \tml\ ist ein portables, 
untypisiertes Programmformat, und \tsp\ stellt ein abstraktes 
Speicherprotokoll dar.


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\minisec{Tycoon Literatur}

Da bei der Erl"auterung der Implementationskonzepte und -ideen f"ur 
die beiden, im Rahmen dieser Arbeit erstellten Bibliotheken (\VKA\ 
\ref{Kap. Graphische Benutzerschnittstellen in Tycoon} und 
\ref{Kap. Datenvisualisierung in Tycoon}), nicht auf die Syntax der
Sprache eingegangen werden soll, sind grundlegende Kenntnisse in der
\ty-Programmierung notwendig. Eine schrittweise Einf"uhrung in die 
\ty-Programmierung ist jedoch im Rahmen dieser Arbeit nicht m"oglich.
Daher sei hier auf weiterf"uhrende Literatur verwiesen. Eine sehr 
umfangreiche und detaillierte Einf"uhrung in die Sprache \tl\ ist in
\cite{MaMu93} zu finden. Im Anhang von \cite{MaMu93} sind auch ausf"uhrliche
"Ubersichten "uber die Grammatik und die vordefinierten Bezeichner
der Sprache \tl\ zu finden. Die praktische Benutzung der interaktiven
\ty-Systemumgebung, die  implementierten Bibliotheken, die Anbindung
externer Bibliotheken sowie Formatierungs- und Namensrichtlinien f"ur
\tl\ Programme werden in \cite{MMM93} vorgestellt. 


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% End of text                                                        %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
