\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_02_methoden.tex 1164 2015-03-21 13:14:26Z humbert $}

\dokName{Beschreibung von Methoden}
\jahrgang{EF}


\def\bodydir{./}

\begin{document}

%%%Speziell
\providecommand{\methodenBesch}[4]{Methode \textbf{\texttt{#1}}\\[1ex]
	\begin{tabular}{p{2.5cm}p{10cm}}
		Parameter:    & {#2}\\
		Rückgabewert: & {#3}\\
		Beschreibung: & {#4}
	\end{tabular}}


\section*{Beschreibung der Methoden eines Objekts}

\begin{center}
%  \includegraphics{\bodydir/objektkarte_die_kaengurus-1}
  \input{\bodydir/objektkarte_die_kaengurus.tikz}
\end{center}

Die Objektkarte zeigt das Objekt \texttt{dieKaengurus} inklusive einiger 
Methoden. Im Folgenden wird dargestellt, wie eine Beschreibung der 
Methoden aussehen kann.

Um arbeiten zu können, benötigen Methoden häufig Daten, die ihnen der 
Aufrufer der Methode zur Verfügung stellt. Diese Daten werden der Methode als 
\emph{Parameterwerte} (oder \emph{Argumente}) übergeben.

Methoden können nicht nur Objekte manipulieren (in der Regel das Objekt, zu 
dem die Methode gehört), sondern auch Daten an den Aufrufer zurückgeben -- 
dann spricht man vom \emph{Rückgabewert}.

Man könnte sich beispielsweise ein Objekt \texttt{rechner} vorstellen, das 
mathematische Berechnungen ausführt. 
Die Methode \texttt{pi()} des Objekts  \texttt{rechner} kann bei jedem Aufruf 
den Wert $3,14159$ zurückgeben.
Einer Methode wie \texttt{quadrat()} müsste jedoch die Zahl, für die die 
Quadratberechnung ausgeführt werden soll, als Parameterwert mitgegeben 
werden: \texttt{rechner.quadrat(3)} hätte den Rückgabewert 9.

Die Beschreibung einer Methode sollte zumindest eine Übersicht der Parameter 
und (sofern vorhanden) des Rückgabewerts umfassen. 
Eine kurze verbale Beschreibung der Arbeitsweise ist äußerst sinnvoll. Zwei 
Beispiele:

\begin{itemize}
 \item \methodenBesch{gibName()}
	{keine}
	{Wert des Attributs \texttt{name}}
	{Die Methode liest den im Attribut \texttt{name} gespeicherten Wert und gibt 
	  diesen zurück.}
 \item \methodenBesch{setzeName(neuerName)}
	{\texttt{neuerName} -- der neue Mannschaftsname}
	{keiner}
	{Die Methode weist dem Attribut \texttt{name} den in
	 \texttt{neuerName} angegebenen Wert zu. 
	 Der alte Wert wird überschrieben.}
\end{itemize}

In vielen objektorientierten Programmiersprachen (hier am Beispiel von Python) 
können die Methoden nach folgendem Schema genutzt werden:

\begin{tabularx}{\textwidth}{lX}
	\verb|print (dieKaengurus.gibName())| & Gibt zu Beginn \verb|"DIE KAENGURUS"| 
	  aus \tabularnewline
	\verb|dieKaengurus.setzeName("SKIPPY-TEAM")| & überschreibt den Wert des 
	  Attributs \verb|name| durch \verb|"SKIPPY-TEAM"| \tabularnewline
	\verb|print (dieKaengurus.gibName())| & Gibt nun \verb|"SKIPPY-TEAM"| 
	  aus \tabularnewline
\end{tabularx}

An diesem Beispiel erkennt man gut, dass der Objektbezeichner 
\texttt{dieKaengurus} im Prinzip nichts über den Inhalt des Objekts aussagt.
Der Bezeichner könnte genausogut \texttt{meineMannschaft} heissen.

Ein direkter Zugriff auf das Attribut \texttt{name} anstelle des 
\enquote{Umwegs} über Methoden wäre prinzipiell möglich, es ist jedoch 
\enquote{guter Stil}, nicht von außen direkt auf Attribute zuzugreifen, damit 
sich jedes Objekt eigenständig verwalten kann (Geheimnisprinzip). 
So lassen sich Teile eines komplexen Programms ändern, ohne dass die 
Auswirkungen auf andere Programmteile unüberschaubar werden.

\end{document}
