Typen


\begin{frame}[fragile,environment=slide]
\frametitle{Warum Typen?}
\par
\begin{i...
...r Variablen/Funktion
ist ihre beste Dokumentation
\end{itemize}\par\end{frame}

\begin{frame}[fragile,environment=slide]
\frametitle{Historische Entwicklung}
\p...
... nutzerdefinierte Typen
\item
abstrakte Datentypen
\end{itemize}\par\end{frame}

\begin{frame}[fragile,environment=slide]
\frametitle{Überblick}
\par
\begin{item...
...mme)
\item
Verweistypen (Zeiger)
\end{itemize}\par
\end{itemize}\par\end{frame}

\begin{frame}[fragile,environment=slide]
\frametitle{Aufzählungstypen}
\par
könn...
...em eine Konstante in mehreren Aufzählungen möglich?
\end{itemize}\par\end{frame}


\begin{frame}[fragile,environment=slide]
\frametitle{Keine Aufzählungstypen}
\pa...
...int day;int main () {
day x = Sat;
day y = x * x;
}\end{verbatim}\end{frame}


\begin{frame}[fragile,environment=slide]
\frametitle{Aufzählungstypen in C}
\par...
...ay y = x * x;
}\end{verbatim}
\par
Übung: was ist in C++ besser?
\par\end{frame}


\begin{frame}[fragile,environment=slide]
\frametitle{Aufzählungstypen in Java}
\...
... mit 7 Implementierungen)
\par
siehe Übung (jetzt oder bei Objekten) \end{frame}


\begin{frame}[fragile,environment=slide]
\frametitle{Teilbereichstypen in Ada}
\...
...inige Tests können aber vom Compiler
statisch ausgeführt werden!
\par\end{frame}


\begin{frame}[fragile,environment=slide]
\frametitle{Abgeleitete Typen in Ada}
\...
...
Sonderfall: Zahlenkonstanten gehören
zu jedem abgeleiteten Typ.
\par\end{frame}


\begin{frame}[fragile,environment=slide]
\frametitle{Zusammengesetzte Typen}
\pa...
...ruct)
\item
Summe (union)
\item
Potenz (Funktion)
\end{itemize}\par\end{frame}


\begin{frame}[fragile,environment=slide]
\frametitle{Produkttypen (Records)}
\pa...
...ig in COBOL ($\le 1960$)
\par
Übung: Record-Konstruktion (in C, C++)?\end{frame}


\begin{frame}[fragile,environment=slide]
\frametitle{Summen-Typen}
\par
$R = A \...
...ypedef union {
A a_value; B b_value; C c_value;
}\end{verbatim}
\par\end{frame}


\begin{frame}[fragile,environment=slide]
\frametitle{Potenz-Typen}
\par
$B^A := ...
...ze}die unterschiedliche Notation dafür (Beispiele?)
ist bedauerlich.\end{frame}


\begin{frame}[fragile,environment=slide]
\frametitle{Felder (Arrays)}
\par
Desig...
...
mehrdimensionale Felder gemischt oder rechteckig?
\end{itemize}\par\end{frame}


\begin{frame}[fragile,environment=slide]
\frametitle{Felder in C}
\par
\begin{ve...
...in{verbatim}int [M][N];
a[x][y] ==> *(&a + (N*x + y))\end{verbatim}\end{frame}


\begin{frame}[fragile,environment=slide]
\frametitle{Felder in Java}
\par
\begin...
...g und Allokation,
Bereichsprüfungen. Nicht notwendig rechteckig.
\par\end{frame}


\begin{frame}[fragile,environment=slide]
\frametitle{Dynamische Feldgrößen}
\par...
...pen.
\par
\dots deren externe Syntax spiel überhaupt keine Rolle
\par\end{frame}


\begin{frame}[fragile,environment=slide]
\frametitle{Zeiger- und Verweistypen}
\...
...folgung (De-Referenzierung) implizit oder explizit?
\end{itemize}\par\end{frame}


\begin{frame}[fragile,environment=slide]
\frametitle{Zeiger (pointer) in C}
\par...
...c + 4) = 42;
printf (''%d\n'', *((int*)(c + 4)));
\end{verbatim}
\par\end{frame}


\begin{frame}[fragile,environment=slide]
\frametitle{Verweise (references) in C+...
... = 10; p = z; p = 8; cout << z;
vgl. p = *p = 8;\end{verbatim}
\par\end{frame}


\begin{frame}[fragile,environment=slide]
\frametitle{Zeiger/Verweise in Java?}
\...
...
T y = x;
y.foo = 9;
System.out.println ( x.foo );
}\end{verbatim}\end{frame}


\begin{frame}[fragile,environment=slide]
\frametitle{Probleme mit Zeigern}
\par
...
... T *p = malloc (...); .. *p .. }\end{verbatim}
\par
\end{itemize}\par\end{frame}


\begin{frame}[fragile,environment=slide]
\frametitle{Aliasing}
\dots erschwert P...
...erbatim}
Übung: was wird besser durch \verb\vert const\vert? Wo?
\par\end{frame}

\begin{frame}[fragile,environment=slide]
\frametitle{Automatische Freigabe}
\par...
...ize}\par
\begin{verbatim}java -Xloggc:Foo.gc Foo\end{verbatim}
\par\end{frame}


\begin{frame}[fragile,environment=slide]
\frametitle{Verweiszähler}
\par
\begin{...
... ist aufwendig
\item
geht nicht bei Kreisverweisen
\end{itemize}\par\end{frame}


\begin{frame}[fragile,environment=slide]
\frametitle{Markierende Kollektoren}
\p...
...nal/Hans_Boehm/gc/}
\par
(z. B. benutzt in GNU JVM)
\end{itemize}\par\end{frame}


\begin{frame}[fragile,environment=slide]
\frametitle{Kopieren/Kompaktieren}
\par...
...hers
\item
muß alles kopieren (auch Nicht-Zeiger).
\end{itemize}\par\end{frame}


\begin{frame}[fragile,environment=slide]
\frametitle{Generationen usw.}
\par
\be...
...tion FAQ
\url{http://java.sun.com/docs/hotspot/gc1.4.2/faq.html}
\par\end{frame}


\begin{frame}[fragile,environment=slide]
\frametitle{Übung GC}
\par
Richtig viel...
...tim}
verschiedene Werte für NewSize ausprobieren,
Messungen erklären.\end{frame}



Johannes Waldmann 2007-01-23