\begin{slide}{Module, Komponenten}

  \begin{itemize}
  \item Softwareprojekte bestehen aus Teilen
    (Modulen, Komponenten), die getrennt
    spezifiziert, implementiert, angewendet werden.
  \item
    Programmiersprache sollte Entwicklung 
    von Teilprogrammen unterstützen
  \item getrennte Typprüfung/Kompilation von Modulen:
    benötigt Spezifikation von anderen Modulen.
  \end{itemize}

Designfrage: Spezifikation von
    Implementierung trennen?
    \begin{itemize}
    \item Ja: Ada (.ads/.adb), C (.h/.c)
    \item Nein: Java, C\#
    \end{itemize}

\end{slide}

\begin{slide}{Build-Systeme}

Designfrage: Modulabhängigkeiten
in der Sprache oder außerhalb der Sprache?

Wenn außerhalb, dann wird zusätzlich zu Compiler
noch ein Build-System benötigt.

\begin{itemize}
\item C:
  Abhängigkeiten in Makefiles,

  können generiert werden (\verb|gcc -M|)

\item Java:  Abhängigkeiten in Quellen (import)

  trotzdem Suchpfade für Pakete

  Build-Systeme: ant, maven
\end{itemize}

\end{slide}
