mirror of
https://github.com/MartinThoma/LaTeX-examples.git
synced 2025-04-26 06:48:04 +02:00
275 lines
9.9 KiB
TeX
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}
|