\documentclass{schulein}
\usepackage[utf8]{inputenc}
\usepackage{schulinf}

% Dieses Dokument ist in der Zusammenarbeit von Informatikreferendaren und
% ehemaligen Informatikreferendaren der Studienseminare (heute ZfsL) Arnsberg,
% Hamm und Solingen entstanden.
%
% Das Dokument steht unter der Lizenz: Creative Commons by-nc-sa Version 4.0
% http://creativecommons.org/licenses/by-nc-sa/4.0/deed.de
%
% Nach dieser Lizenz darf das Dokument beliebig kopiert und bearbeitet werden,
% sofern das Folgeprodukt wiederum unter gleichen Lizenzbedingungen vertrieben
% und auf die ursprünglichen Urheber verwiesen wird.
% Eine kommerzielle Nutzung ist ausdrücklich ausgeschlossen.
%
% Die Namensnennung durch einen Verweis und die Lizenzangabe der ursprünglichen
% Urheber auf den Materialien für Schülerinnen und Schüler ist erforderlich.
%
% Die Sammlung der Dokumente steht unter
% http://ddi.uni-wuppertal.de/material/materialsammlung/
% zur Verfügung.
%
% Das LaTeX-Paket zum Setzen der Dokumente der Sammlung steht
% unter  http://www.ctan.org/pkg/schule
% zur Verfügung.

\usepackage[pdfauthor={Referendare der Informatikfachseminare Arnsberg, Hamm und Solingen}]{hyperref}
\includexmp{lizenz}
\cclizenz{byncsaeu}
\footerQRLink{materialsammlung_qr_url.pdf}

\svnid{$Id: info_01_klassen_beziehungen.tex 626 2014-05-22 21:36:50Z pieper $}

\dokName{Beziehungen von Klassen}
\jahrgang{EF}

\begin{document}
\section*{Beziehungen zwischen Klassen}
Damit ein Objekt zu einem anderen Objekt eine Beziehung eingehen kann, muss 
natürlich auch vorher irgendwo festgelegt werden, dass dies diesem Objekt 
überhaupt erlaubt ist. Diese Festlegungen werden auf Klassenebene vorgenommen. 
Die wichtigste Unterscheidung zwischen den Beziehungen auf Objektebene und denen 
auf Klassenebene ist, dass viele Beziehungen auf Klassenebene angeben, dass die 
konkreten Objekte des durch diese Klasse definierten Datentyps prinzipiell in 
der Lage sind, Beziehungen zu Objekten einzugehen, die von dem durch die Klasse 
definierten Datentyp sind, mit der die erste Klasse eine Beziehung unterhält. 
\emph{Dies heißt nicht, dass die konkreten Objekte solch eine Beziehung eingehen 
müssen.} Auf Klassenebene werden die prinzipiellen Eigenschaften und 
Verhaltensweisen definiert. Zu diesen prinzipiellen Eigenschaften gehören die 
Beziehungen.

Einige Beziehungen auf Klassenebene finden gar keine Entsprechung auf 
Objektebene. Ein Beispiel hierfür wäre die \textsc{Ist}-Beziehung, die im Kurs 
aber erst später vertiefende Beachtung finden wird.

Jede verschiedene Art der Beziehung bekommt einen eigenen "`Pfeiltyp"' 
spendiert. Zunächst wird die Darstellung der einzelnen Beziehungstypen 
vorgestellt, im Anschluss wird auf die Bedeutung eingegangen.

\subsection*{Zur Darstellung}

Ein Diagramm, in dem Klassen sowie ihre Beziehungen zueinander dargestellt sind, 
heißt \textbf{Klassendiagramm}. Das Klassendiagramm ist der wichtigste 
Diagrammtyp, da es schon sehr konkret ist, wenn man von einer 
Problembeschreibung ausgeht, aber aus Sicht der konkreten Implementierung 
hinreichend weit entfernt ist, um den Überblick zu behalten und Strukturen zu 
visualisieren und zu erkennen. Damit sind Klassen das wichtigste 
Strukturierungselement objektorientierter Programmiersprachen.

Im Unterricht werden schwerpunktmäßig drei Beziehungstypen verwendet. Die 
\textsc{Hat}- und die \textsc{Kennt}-Bezieh\-ung sind vom Namen her schon 
bekannt und werden hier weiter konkretisiert. Die \textsc{Ist}-Beziehung wird 
hier zwar der Vollständigkeit halber aufgeführt, wird aber erst zu einem 
späteren Zeitpunkt interessant und näher thematisiert.

\begin{center}
\begin{tabular}{p{2cm} p{2cm} p{4.5cm}}
	\hline 
		Beziehung & Fachbegriff & Darstellung \tabularnewline
	\hline 
		& & \multirow{3}{4.5cm}{\includegraphics{kennt.png}} \tabularnewline
		\textsc{Kennt} & Assoziation &  \tabularnewline
		& & \tabularnewline
	\hline
		& & \multirow{3}{4.5cm}{\includegraphics{hat.png}} \tabularnewline
		\textsc{Hat} & Aggregation bzw. & \tabularnewline
		&Komposition & \tabularnewline
	\hline 
		& & \multirow{3}{4.5cm}{\includegraphics{ist.png}} \tabularnewline
		\textsc{Ist} & Vererbung & \tabularnewline
		& & \tabularnewline
	\hline 
\end{tabular}
\end{center}

\subsection*{Zur Bedeutung}

\begin{itemize}
	\item Die Assoziation zwischen einer Klasse~A und einer Klasse~B sagt aus, 
		dass Objekte vom Typ~A mit Objekten von vom Typ~B arbeiten dürfen. 
		Dieses Arbeiten beinhaltet z.\,B. den Aufruf von Methoden, die das 
		Objekt vom Typ~B nach außen bereitstellt. Damit ein Objekt im Laufe 
		eines Programms ein anderes kennt, muss das entsprechende Objekt vom 
		Typ~B dem Objekt vom Typ~A bekannt gemacht werden. Es muss also der Wert 
		des Beziehungsattributs, das "`kenntB"' heißen könnte, gesetzt werden. 
		Und zwar wird eine Referenz auf das Objekt vom Typ~B gesetzt. Bei der 
		Implementierung muss vorher die Benutzung der Klasse~A in der
		%in der "`uses"'-Liste 
		Klasse B angegeben werden (Näheres dazu während der 
		Implementierungsphasen).
	\item Die Aggregation zwischen einer Klasse~A und einer Klasse~B sagt aus, 
		dass Objekte vom Typ~A Objekte vom Typ~B "`besitzen"' können. 
		Soll heißen, dass sie i.\,d.\,R. für die komplette Verwaltung der ihnen 
		angehörenden Objekte verantwortlich sind. Nimmt man das Spiel Tennis, 
		gibt es zwei Spieler, die jeweils einen Schläger haben. Während des 
		Spiels wird ein Spieler niemandem erlauben, ihm den Schläger 
		wegzunehmen. Der Spieler entscheidet auch darüber, wann er den Schläger 
		abgibt.
\end{itemize}

\subsection*{Kardinalitäten}

Ein Bestandteil von Klassendiagrammen sind die \textbf{Kardinalitäten} 
(Vielfachheiten). So kann man beispielsweise ausdrücken, dass ein Tennisspieler 
genau einen Schläger hat oder aber beliebig viele andere Spieler kennt.
\begin{center}
	\includegraphics{tennis.png}
\end{center}

\end{document}
