\begin{slide}{Das \glqq Demeter-Gesetz\grqq: \emph{don't talk to strangers}}

\begin{small}
propagiert von Karl Lieberherr 1989, siehe
\url{http://www.ccs.neu.edu/home/lieber/LoD.html}

die Demeter $=$ Göttin der Landwirtschaft,
Name eines OO-Projektes von Lieberherr
\end{small}

Objekt $O$ darf als Reaktion auf Nachricht $m(a_1,\ldots,a_n)$ \\
nur Nachrichten diese Objekte senden:
\begin{itemize}
\item 
  $O$ selbst, \quad $\bullet$  Attribut-Objekte von $O$
\item
  Objekte $a_1, \ldots, a_n$
\item
  Objekte, die in $m$ konstruiert werden
\end{itemize}
also \emph{nicht} an Attribut-Objekte von $a_i$, \\
an Resultat-Objekte von Methodenaufrufen.

\end{slide}

\begin{slide}{Demeter heute?}

Die Absicht war, Abhängigkeiten 
zwischen Implementierungen von Klassen zu reduzieren.
\emph{interfaces} sind ein moderneres Mittel zum gleichen Zweck.

Beispiel {\small \url{http://java.sun.com/j2se/1.5.0/docs/api/}}
\begin{verbatim}
interface List<E> 
    { void add(E o); E get(int i); .. }
class ArrayList<E> 
     implements List<E> { .. }
List<String> ls =  new ArrayList<String> ();
         // oder:  new LinkedList<String> ();
ls.add ("foo");
System.out.println (ls.get (0));
\end{verbatim}

grundsätzlich alle Variablen über Interface deklarieren!
\end{slide}


