\begin{slide}{Selbst-dokumentierender Code: Klassen}

\begin{itemize}
\item
  Schnittstelle ist konsistente Abstraktion?
\item
  Name beschreibt Zweck?
\item
  Benutzung der Schnittstelle offensichtlich?
\item
  Black Box?
\end{itemize}

\end{slide}

\begin{slide}{Selbst-dokumentierender Code: Methoden}

\begin{itemize}
\item
  hat wohlbestimmten Zweck?
\item
  Name beschreibt Zweck?
\item
  ist weit genug zerlegt?
\end{itemize}

\end{slide}

\begin{slide}{Selbst-dokumentierender Code: Daten }

(Attribute, Variablen)
\begin{itemize}
\item
  Name beschreibt Zweck?
\item
  nur zu einem Zweck benutzt?
\item
  Aufzählungstypen anstelle von Flags oder Zahlen?
\item
  Benannte Konstanten anstelle magischer Zahlen?
\end{itemize}

\end{slide}

\begin{slide}{Selbst-dokumentierender Code: Datenorganisation}

\begin{itemize}
\item
  zur Verdeutlichung zusätzliche Variablen (Konstanten)?
\item
  Benutzungen einer Variablen stehen eng beeinander?
\item
  Komplexe Daten nur durch Zugriffsfunktionen benutzt?
\end{itemize}

\end{slide}

\begin{slide}{Selbst-dokumentierender Code: Steuerung}

\begin{itemize}
\item
  normaler Ausführungsweg ist deutlich?
\item
  zusammengehörende Anweisungen stehen beeinander?
\item
  gruppenweise unabhängige Anweisungen in Unterprogramme?
\item
  Normalfall bei Verzweigung nach if (nicht nach else)
\item
  jede Schleife hat nur einen Zweck?
\item
  nicht zu tief geschachtelt?
\item 
  Boolesche Ausdrücke vereinfacht?
\end{itemize}

\end{slide}

\begin{slide}{Selbst-dokumentierender Code: Design}

\begin{itemize}
\item 
  versteht man den Code? 
\item
  ist er frei von Tricks?
\item
  Details soweit wie möglich versteckt?
\item
  benutzte Begriffe stammen aus Anwendungsbereich
  und nicht aus Informatik oder Programmiersprache
\end{itemize}


\end{slide}

