\begin{slide}{Blockstruktur und Orthogonalität}

\kopf{$ $Id: ortho.tex,v 1.1 2011-10-11 18:13:54 waldmann Exp $ $}

\begin{verbatim}
void f (int x) { int y = x * x; return y - 1; }
\end{verbatim}

\begin{itemize} \itemsep 0pt
\item
  Unterprogramm: Schnittstelle $+$ Implementierung (Block)
\item
  Block: Deklarationen $+$ Anweisungen
\item
  Deklaration: von Variablen, Typen?, Unterprogrammen?
\item
  Werte (Argumente, Resultate von Unterprogrammen)?
\end{itemize}

Sprachelemente sollten unabhängig voneinander (orthogonal zueinander)
sein $\Rightarrow$ beliebig kombinierbar $\Rightarrow$
unterstützt modularen Entwurf

\end{slide}

\begin{slide}{Einschränkungen der Orthogonalität}

In vielen Programmiersprachen
sind einige Elemente nicht orthogonal zueinander.
Nenne Beispiele!

Warum ist das so?
\begin{itemize}
\item
  aus Unkenntnis (nachlässiger Sprach-Entwurf)
\item
  absichtlich:
  \begin{itemize}
  \item
    zum \glqq Schutz\grqq\ des Programmierers (vor sich selbst)
  \item
    für leichtere Implementierung
  \end{itemize}
\end{itemize}
Versuche, die o. g. Beispiele zuzuordnen.

\end{slide}
