
\chapter{Beispiele objektorientierter Softwarebibliotheken}
\label{OOProgs+Bibs}
Bereits im vorangehenden Abschnitt wurden die Vorteile objektorientierter
Sprachen sowie Vorteile und Ziele der Entwicklung klassenorientierter
Bibliotheken vorgestellt. Dieses Kapitel stellt verschiedene
objektorientierte Sprachen vor und vergleicht in diesen Sprachen implementierte
Bibliotheken f"ur Massendatentypen. Bei der Betrachtung der Sprachen stehen die
Eigenschaften im Vordergrund, die beim Design von Klassenbibliotheken von
Bedeutung sind. Zu diesen Eigenschaften geh"oren insbesondere:
\begin{description}
\item [M"oglichkeiten der Vererbung: ] Bei der Entwicklung einer
objektorientierten Softwarebibliothek spielt das Ziel der m"oglichst
freien Kombinierbarkeit von Funktionalit"at eine wichtige Rolle. Eine
solche Kombinierbarkeit wird durch die M"oglichkeit der
Mehrfachvererbung unterst"utzt. Wenn eine Sprache
nur eine Einfachvererbung zur Verf"ugung stellt, mu"s sich ihre
Bibliothek von den Bibliotheken mehrfachvererbender Sprachen
unterscheiden, wenn die Mehrfachvererbung in den Bibliotheken der
entsprechenden Sprachen genutzt wird. 
\item [Kapselung: ]In rein objektorientierten Sprache kann die Kapselung der
Objekte nur im Zuge der Vererbung durchbrochen werden, so da"s auch die
Exemplare erbender Klassen ohne den Umweg "uber eine Schnittstelle auf die
interne Repr"asentation der Daten zugreifen k"onnen. Einige objektorientierte
Sprachen bieten Mechanismen an, mit denen auch in anderen Situationen eine vom
Programmierer zu kontrollierende Durchbrechung der Kapselung von Objekten
m"oglich ist. Wenn der Bibliotheksentwickler diese M"oglichkeiten der
Durchbrechung der Kapselung nutzen kann, ist es m"oglich, da"s sich die
Struktur von der Struktur der Bibliothek einer rein objektorientierten Sprache
unterscheidet.
\item [Eigenschaften des Typsystems: ]Die Unterst"utzung von Polymorphismus ist
eine wichtige Spracheigenschaft. Einige objektorientierte Programmiersprachen
bieten beispielsweise zus"atzlich zum Inklusionspolymorphismus, der durch die
Vererbung erreicht wird, auch die M"oglichkeit der Typumwandlung von Objekten
oder parametrischen Polymorphismus an.
\item [Einschr"ankungen beim "Uberschreiben von Methoden:] Die Signatur von
geerbten Methoden kann beim "Uberschreiben nur mit starken Einschr"ankungen
ver"andert werden. Manche objektorientierte Sprachen bieten dem Entwickler
jedoch bez"uglich der Redefinition von Methoden eine gr"o"sere Freiheit an,
indem sie beispielsweise sogar eine Ver"anderung der Zahl der Parameter
zulassen. 
\item [Abstraktion: ]Eine objektorientierte Sprache sollte den
Entwickler bei der Abstraktionsbildung unterst"utzen. Im Rahmen einer
objektorientierten Softwarebibliothek sind Abstraktionen sowohl von der
konkreten Repr"asentation der Daten der Objekte, als auch von den
Eigenschaften speziellerer Klassen n"otig. Abstraktion ist beispielsweise ein
wichtiges Hilfsmittel, um eine einheitliche Sicht auf verschiedene Objekte zu
erlangen, indem mit Hilfe von abstrakten Methoden eine konkret Festlegung
einiger Details in den allgemeineren Klassen unterbleibt. Klassen m"ussen also
von einigen Details ihrer Subklassen abstrahieren k"onne, ohne da"s die
M"oglichkeit von Implementierungen in diesen Klassen vermindert wird. 
\end{description}



Vor der Entwicklung der in diesem Kapitel untersuchten Bibliotheken der
Sprachen C++, Smalltalk und Eiffel waren die Vorteile und Ziele bei der
Entwicklung objektorientierter Softwarebibliotheken selbstverst"andlich
bereits bekannt. Auch Ver"offentlichungen mit Richtlinien zum "`guten"' Design
derartiger Bibliotheken waren den jeweiligen Entwicklern bekannt. Dennoch
lassen sich bei der Analyse dieser Bibliotheken gravierende Unterschiede
feststellen. Diese Unterschiede legen die Vermutung nahe, da"s es Unterschiede
in den Spracheigenschaften der jeweils verwendeten objektorientierten
Programmiersprachen geben mu"s, die dem Softwareentwickler ein
unterschiedliches Design der Bibliothek nahelegen. 

Ziel dieses Abschnitts ist es daher, die Unterschiede der untersuchten
Sprachen aufzuzeigen und die Bedeutung der Unterschiede f"ur das Design
von Softwarebibliotheken herauszuarbeiten. Auf diese Weise wird es
nicht nur m"oglich, die Unterschiede in den Bibliotheken zu
beschreiben, sondern auch zu begr"unden, warum die Verwendung
verschiedener Sprachen zu einem abweichenden Resultat f"uhren mu"ste.
Aus dieser Analyse ergeben sich dann auch direkt Schlu"sfolgerungen
"uber die n"otigen Eigenschaften einer objektorientierten
Programmiersprache, welche die Realisierung einer Softwarebibliothek f"ur
Massendaten unterst"utzt.

Nachdem bekannt ist, wie sich die Eigenschaften einer objektorientierten
Programmiersprachen auf das Design ihrer Klassenbibliothek auswirken,
lassen sich auch die Auswirkungen der Eigenschaften von TooL auf das Design der
zur Sprachen geh"orenden Massendatentypen-Bibliothek begr"unden.


