\begin{slide}{Vererbung bricht Kapselung}

(Implementierungs-Vererbung: bad,
Schnittstellen-Vererbung: good.)

\bigskip

Problem:  \verb|class B extends A| $\Rightarrow$

B hängt ab von Implementations-Details von A.

\bigskip

$\Rightarrow$ Wenn man nur A ändert, kann B kaputtgehen.

\bigskip (Beispiel)

\end{slide}

\begin{slide}{Vererbung bricht Kapselung}

Joshua Bloch (Effective Java):
\begin{itemize}
\item design and document for in heritance
\item \dots or else prohibit it
\end{itemize}

API-Beschreibung muß Teile der Implementierung dokumentieren
(welche Methoden rufen sich gegenseitig auf),
damit man diese sicher überschreiben kann.

(Das ist ganz furchtbar.)

\bigskip

statt Vererbung: benutze Komposition (Wrapper)
und dann Delegation.


\end{slide}
