\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}