2
0
Fork 0
mirror of https://github.com/MartinThoma/LaTeX-examples.git synced 2025-04-26 06:48:04 +02:00
LaTeX-examples/presentations/Programmieren-Tutorium/Tutorium-07/tutorium-07.tex
2013-11-05 19:39:03 +01:00

275 lines
9.9 KiB
TeX

\documentclass[usepdftitle=false,hyperref={pdfpagelabels=false}]{beamer}
\usepackage{../templates/myStyle}
\begin{document}
\title{\titleText}
\subtitle{String interning, Assertions, Einfach verkettete Listen}
\author{\tutor}
\date{3. Dezember 2012}
\subject{Programmieren}
\frame{\titlepage}
\frame{
\frametitle{Inhaltsverzeichnis}
\setcounter{tocdepth}{1}
\tableofcontents
\setcounter{tocdepth}{2}
}
\section{Einleitung}
\subsection{Quiz}
\begin{frame}{Quiz}
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{QuizString.java}
\begin{itemize}
\item Gibt es einen Compiler-Fehler? \xmark
\item Gibt es einen Laufzeit-Fehler? \xmark
\item Gibt es eine Ausgabe? \cmark{} Welche Ausgabe gibt es?
\end{itemize}
\end{frame}
\begin{frame}{Quiz: Antwort}
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{QuizString.java}
\begin{itemize}
\item string1 und string2 sind verschiedene Objekte.
\item string3 und string4 sind das selbe Objekt.
\end{itemize}
\end{frame}
\begin{frame}{Quiz: Erklärung}
\begin{itemize}[<+->]
\item Erstellt man einen String mit \myCode{String abc = new String("Hallo");}
wird ein neues Objekt angelegt
\item Erstellt man einen String mit \myCode{String abc = "Hallo";}
macht Java "`String interning"'
\end{itemize}
\pause[\thebeamerpauses]
\begin{alertblock}{Achtung}
Trotzdem mit \myCode{abc.equals(def);} vergleichen! Nur so
ist garantiert, dass ihr auf Gleichheit (und nicht nur auf
"`Selbstheit"' vergleicht).
\end{alertblock}
\end{frame}
\section{Assertions}
\subsection{Allgemeines}
\begin{frame}{Assertions}
\begin{itemize}[<+->]
\item Problem: Es tritt ein falsches Ergebnis auf, es ist
aber nicht klar warum.
\item Lösung: Man macht Zusicherungen (engl. assertions)
\item Man überlegt sich also, welche Variablen an
krischen Stellen welche Werte oder Beziehungen
zueinander haben sollen
\end{itemize}
\pause[\thebeamerpauses]
\begin{alertblock}{Wichtig: Assertions sind keine Exceptions!}
\begin{tabular}{l|l}
\textbf{Assertion} & \textbf{Exception}\\
\hline
muss man aktivieren & wird immer ausgeführt\\
dient zum Entdecken von Fehlern & dient zum behandeln von Fehlern\\
z.B. (a < b), (a !=0), \dots & z.B. \href{http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html}{IOException}\\
\end{tabular}
\end{alertblock}
\end{frame}
\begin{frame}{Beispiel}
\inputminted[linenos=false, tabsize=4, fontsize=\small]{java}{singleLines.java}
\end{frame}
\begin{frame}{Assertions aktivieren}
In Eclipse:
\begin{itemize}
\item \menu{Window > Preferences > Java > Installed JREs > Edit...}
\item Default VM Arguments: "`-enableassertions"' hinzufügen
\end{itemize}
\end{frame}
\begin{frame}{Weitere Materialien}
\begin{itemize}
\item docs.oracle.com: \href{http://docs.oracle.com/javase/1.4.2/docs/guide/lang/assert.html}{Programming With Assertions}
\item galileo openbook: \href{http://openbook.galileodesign.de/javainsel5/javainsel07_005.htm}{Java ist auch eine Insel}
\item Java Blog Buch: \href{http://www.java-blog-buch.de/0609-assertions/}{06.09 Assertions}
\end{itemize}
\end{frame}
\section{Einfach verkettete Listen}
\subsection{Allgemeines}
\begin{frame}{Einfach verkettete Listen}
\begin{block}{Szenario}
\begin{itemize}[<+->]
\item Ihr wollt euch Druckaufträge speichern
\item Funktioniert mit Array
\item Problem:
\begin{itemize}
\item Ihr belegt immer konstant viel Speicher
\item Eventuell braucht ihr mehr, eventuell weniger Speicher
\end{itemize}
\item Lösung: Verkettete Listen
\end{itemize}
\end{block}
\end{frame}
\begin{frame}{Idee}
\begin{itemize}[<+->]
\item Man speichert sich nur einen Zeiger
\item Dieser Zeiger zeigt auf "`Knoten"'
\item Jeder Knoten hat wieder einen Zeiger
\item Jeder Knoten kann wieder auf einen Knoten zeigen
\end{itemize}
\only<\thebeamerpauses>{
\includegraphics[width=\linewidth]{Singly-linked-list.png}
}
\end{frame}
\framedgraphic{Weiteres Beispiel}{Listenbeispiel.jpg}
\begin{frame}{Was wollen wir?}
\begin{itemize}[<+->]
\item Elemente hinzufügen
\item Elemente löschen
\item Elemente finden
\end{itemize}
\pause[\thebeamerpauses]
\begin{alertblock}{Wichtig}
Zwischenergebnisse ausgeben
\end{alertblock}
\end{frame}
\begin{frame}{Wie sieht das aus?}
\inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Main.java, frame=lines]{java}{Main.java}
\end{frame}
\begin{frame}{Welche Klassen brauchen wir?}
\only<2>{
\includegraphics[width=0.7\textheight]{ObjectDiagram.pdf}
}
\end{frame}
\begin{frame}{Generics}
\begin{block}{Hinweis}
\begin{itemize}[<+->]
\item Noch erstellt ihr eine Liste für genau einen Datentyp
\item Eigentlich macht der Code immer das gleiche, ist also
vom Datentypen unabhängig
\item Das löst man später mit "`Generics"'
\end{itemize}
\end{block}
\pause[\thebeamerpauses]
\begin{block}{Hinweis 2}
Oder - z.B. bei den Abschlussaufgaben - man verwendet einfach Datentypen
aus \href{http://docs.oracle.com/javase/7/docs/api/java/util/package-summary.html}{java.util}:
\begin{itemize}[<+->]
\item \href{http://docs.oracle.com/javase/7/docs/api/java/util/LinkedList.html}{LinkedList}
\item \href{http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html}{HashMap} /
\href{http://docs.oracle.com/javase/7/docs/api/java/util/TreeMap.html}{TreeMap}
\item \href{http://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html}{HashSet} /
\href{http://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html}{TreeSet}
\end{itemize}
\end{block}
\end{frame}
\subsection{Der Knoten}
\begin{frame}{Teil 1: Der Knoten}
\begin{block}{Teil 1}
Erstelle die Klasse Node
\end{block}
\includegraphics[width=0.7\textheight]{ObjectDiagram-list-node}
\end{frame}
\begin{frame}{Teil 1: Der Knoten}
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, label=Node.java, frame=lines]{java}{Node.java}
\end{frame}
\subsection{Die Liste}
\begin{frame}{Teil 2.1: Die Struktur der Liste}
\begin{block}{Teil 2.1}
Erstelle die Klasse SinglyLinkedList (noch ohne Funktionalität)
\end{block}
\includegraphics[width=0.7\textheight]{ObjectDiagram-list-node}
\end{frame}
\begin{frame}{Teil 2.1: Die Struktur der Liste}
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, label=SinglyLinkedList-structure.java]{java}{SinglyLinkedList-structure.java}
\end{frame}
\begin{frame}{Teil 2.2: printList()}
\begin{block}{Teil 2.2}
Erstelle die Methode "`printList"'
\end{block}
\includegraphics[width=0.7\textheight]{ObjectDiagram-list-node}
\end{frame}
\begin{frame}{Teil 2.2: printList()}
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, firstnumber=60, firstline=60, lastline=69]{java}{SinglyLinkedList.java}
\end{frame}
\begin{frame}{Teil 2.3: Hilfsmethoden}
\begin{block}{Teil 2.3}
Erstelle die Methoden \myCode{boolean isEqual(Node node, int content)}
und \myCode{Node findNode(int number)}
\end{block}
\includegraphics[width=0.7\textheight]{ObjectDiagram-list-node}
\end{frame}
\begin{frame}{Teil 2.3: Hilfsmethoden}
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, firstnumber=5, firstline=5, lastline=21]{java}{SinglyLinkedList.java}
\end{frame}
\begin{frame}{Teil 2.4: append}
\begin{block}{Teil 2.4}
Erstelle die Methode \myCode{append}
\end{block}
\includegraphics[width=0.7\textheight]{ObjectDiagram-list-node}
\end{frame}
\begin{frame}{Teil 2.4: append}
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, firstnumber=23, firstline=23, lastline=34]{java}{SinglyLinkedList.java}
\end{frame}
\begin{frame}{Teil 2.5: remove}
\begin{block}{Teil 2.5}
Erstelle die Methode \myCode{remove}
\end{block}
\includegraphics[width=0.7\textheight]{ObjectDiagram-list-node}
\end{frame}
\begin{frame}{Teil 2.5: remove}
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, firstnumber=36, firstline=36, lastline=48]{java}{SinglyLinkedList.java}
\end{frame}
\begin{frame}{Teil 2.6: find}
\begin{block}{Teil 2.6}
Erstelle die Methode \myCode{find}
\end{block}
\includegraphics[width=0.7\textheight]{ObjectDiagram-list-node}
\end{frame}
\begin{frame}{Teil 2.6: find}
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, firstnumber=50, firstline=50, lastline=58]{java}{SinglyLinkedList.java}
\end{frame}
\section{Abspann}
\subsection{Kommende Tutorien}
\begin{frame}{Kommende Tutorien}
\begin{itemize}
\item[7.] 03.12.2012: JUnit-Tests, \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html\#toString()}{toString}, Vererbung
\item[6.] 10.12.2012: Generics?
\item[5.] 17.12.2012: Video "`Library"' zeigen
\item[-] 24.12.2012: Heiligabend - \href{http://www.fmc.uni-karlsruhe.de/faq/wann-sind-die-weihnachtsferien}{Kein Tutorium}
\item[-] 31.12.2012: Silvester - Kein Tutorium
\item[4.] 07.01.2013
\item[3.] 14.01.2013
\item[2.] 21.01.2013
\item[1.] 28.01.2013: Abschlussprüfunsvorbereitung
\item[0.] 04.02.2013: Abschlussprüfunsvorbereitung
\item[-] 10.02.2013: Ende der Vorlesungszeit des WS 2012/2013 (\href{http://www.kit.edu/studieren/2873.php}{Quelle})
\end{itemize}
\end{frame}
\framedgraphic{Vielen Dank für eure Aufmerksamkeit!}{../images/geekandpoke-development-cycle.jpg}
\end{document}