📚 The CoCalc Library - books, templates and other resources
cocalc-examples / martinthoma-latex-examples / presentations / Programmieren-Tutorium / Tutorium-07 / tutorium-07.tex
132940 viewsLicense: OTHER
\documentclass[usepdftitle=false,hyperref={pdfpagelabels=false}]{beamer}1\usepackage{../templates/myStyle}23\begin{document}4\title{\titleText}5\subtitle{String interning, Assertions, Einfach verkettete Listen}6\author{\tutor}7\date{3. Dezember 2012}8\subject{Programmieren}910\frame{\titlepage}1112\frame{13\frametitle{Inhaltsverzeichnis}14\setcounter{tocdepth}{1}15\tableofcontents16\setcounter{tocdepth}{2}17}1819\section{Einleitung}20\subsection{Quiz}21\begin{frame}{Quiz}22\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{QuizString.java}23\begin{itemize}24\item Gibt es einen Compiler-Fehler? \xmark25\item Gibt es einen Laufzeit-Fehler? \xmark26\item Gibt es eine Ausgabe? \cmark{} Welche Ausgabe gibt es?27\end{itemize}28\end{frame}2930\begin{frame}{Quiz: Antwort}31\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{QuizString.java}32\begin{itemize}33\item string1 und string2 sind verschiedene Objekte.34\item string3 und string4 sind das selbe Objekt.35\end{itemize}36\end{frame}3738\begin{frame}{Quiz: Erklärung}39\begin{itemize}[<+->]40\item Erstellt man einen String mit \myCode{String abc = new String("Hallo");}41wird ein neues Objekt angelegt42\item Erstellt man einen String mit \myCode{String abc = "Hallo";}43macht Java "`String interning"'44\end{itemize}45\pause[\thebeamerpauses]46\begin{alertblock}{Achtung}47Trotzdem mit \myCode{abc.equals(def);} vergleichen! Nur so48ist garantiert, dass ihr auf Gleichheit (und nicht nur auf49"`Selbstheit"' vergleicht).50\end{alertblock}51\end{frame}5253\section{Assertions}54\subsection{Allgemeines}55\begin{frame}{Assertions}56\begin{itemize}[<+->]57\item Problem: Es tritt ein falsches Ergebnis auf, es ist58aber nicht klar warum.59\item Lösung: Man macht Zusicherungen (engl. assertions)60\item Man überlegt sich also, welche Variablen an61krischen Stellen welche Werte oder Beziehungen62zueinander haben sollen63\end{itemize}64\pause[\thebeamerpauses]65\begin{alertblock}{Wichtig: Assertions sind keine Exceptions!}66\begin{tabular}{l|l}67\textbf{Assertion} & \textbf{Exception}\\68\hline69muss man aktivieren & wird immer ausgeführt\\70dient zum Entdecken von Fehlern & dient zum behandeln von Fehlern\\71z.B. (a < b), (a !=0), \dots & z.B. \href{http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html}{IOException}\\72\end{tabular}73\end{alertblock}74\end{frame}7576\begin{frame}{Beispiel}77\inputminted[linenos=false, tabsize=4, fontsize=\small]{java}{singleLines.java}78\end{frame}7980\begin{frame}{Assertions aktivieren}81In Eclipse:82\begin{itemize}83\item \menu{Window > Preferences > Java > Installed JREs > Edit...}84\item Default VM Arguments: "`-enableassertions"' hinzufügen85\end{itemize}86\end{frame}8788\begin{frame}{Weitere Materialien}89\begin{itemize}90\item docs.oracle.com: \href{http://docs.oracle.com/javase/1.4.2/docs/guide/lang/assert.html}{Programming With Assertions}91\item galileo openbook: \href{http://openbook.galileodesign.de/javainsel5/javainsel07_005.htm}{Java ist auch eine Insel}92\item Java Blog Buch: \href{http://www.java-blog-buch.de/0609-assertions/}{06.09 Assertions}93\end{itemize}94\end{frame}9596\section{Einfach verkettete Listen}97\subsection{Allgemeines}98\begin{frame}{Einfach verkettete Listen}99\begin{block}{Szenario}100\begin{itemize}[<+->]101\item Ihr wollt euch Druckaufträge speichern102\item Funktioniert mit Array103\item Problem:104\begin{itemize}105\item Ihr belegt immer konstant viel Speicher106\item Eventuell braucht ihr mehr, eventuell weniger Speicher107\end{itemize}108\item Lösung: Verkettete Listen109\end{itemize}110\end{block}111\end{frame}112113\begin{frame}{Idee}114\begin{itemize}[<+->]115\item Man speichert sich nur einen Zeiger116\item Dieser Zeiger zeigt auf "`Knoten"'117\item Jeder Knoten hat wieder einen Zeiger118\item Jeder Knoten kann wieder auf einen Knoten zeigen119\end{itemize}120\only<\thebeamerpauses>{121\includegraphics[width=\linewidth]{Singly-linked-list.png}122}123\end{frame}124125\framedgraphic{Weiteres Beispiel}{Listenbeispiel.jpg}126127\begin{frame}{Was wollen wir?}128\begin{itemize}[<+->]129\item Elemente hinzufügen130\item Elemente löschen131\item Elemente finden132\end{itemize}133134\pause[\thebeamerpauses]135\begin{alertblock}{Wichtig}136Zwischenergebnisse ausgeben137\end{alertblock}138\end{frame}139140\begin{frame}{Wie sieht das aus?}141\inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Main.java, frame=lines]{java}{Main.java}142\end{frame}143144\begin{frame}{Welche Klassen brauchen wir?}145\only<2>{146\includegraphics[width=0.7\textheight]{ObjectDiagram.pdf}147}148\end{frame}149150\begin{frame}{Generics}151\begin{block}{Hinweis}152\begin{itemize}[<+->]153\item Noch erstellt ihr eine Liste für genau einen Datentyp154\item Eigentlich macht der Code immer das gleiche, ist also155vom Datentypen unabhängig156\item Das löst man später mit "`Generics"'157\end{itemize}158\end{block}159160\pause[\thebeamerpauses]161\begin{block}{Hinweis 2}162Oder - z.B. bei den Abschlussaufgaben - man verwendet einfach Datentypen163aus \href{http://docs.oracle.com/javase/7/docs/api/java/util/package-summary.html}{java.util}:164\begin{itemize}[<+->]165\item \href{http://docs.oracle.com/javase/7/docs/api/java/util/LinkedList.html}{LinkedList}166\item \href{http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html}{HashMap} /167\href{http://docs.oracle.com/javase/7/docs/api/java/util/TreeMap.html}{TreeMap}168\item \href{http://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html}{HashSet} /169\href{http://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html}{TreeSet}170\end{itemize}171\end{block}172\end{frame}173174\subsection{Der Knoten}175\begin{frame}{Teil 1: Der Knoten}176\begin{block}{Teil 1}177Erstelle die Klasse Node178\end{block}179\includegraphics[width=0.7\textheight]{ObjectDiagram-list-node}180\end{frame}181182\begin{frame}{Teil 1: Der Knoten}183\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, label=Node.java, frame=lines]{java}{Node.java}184\end{frame}185186\subsection{Die Liste}187\begin{frame}{Teil 2.1: Die Struktur der Liste}188\begin{block}{Teil 2.1}189Erstelle die Klasse SinglyLinkedList (noch ohne Funktionalität)190\end{block}191\includegraphics[width=0.7\textheight]{ObjectDiagram-list-node}192\end{frame}193194\begin{frame}{Teil 2.1: Die Struktur der Liste}195\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, label=SinglyLinkedList-structure.java]{java}{SinglyLinkedList-structure.java}196\end{frame}197198\begin{frame}{Teil 2.2: printList()}199\begin{block}{Teil 2.2}200Erstelle die Methode "`printList"'201\end{block}202\includegraphics[width=0.7\textheight]{ObjectDiagram-list-node}203\end{frame}204205\begin{frame}{Teil 2.2: printList()}206\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, firstnumber=60, firstline=60, lastline=69]{java}{SinglyLinkedList.java}207\end{frame}208209\begin{frame}{Teil 2.3: Hilfsmethoden}210\begin{block}{Teil 2.3}211Erstelle die Methoden \myCode{boolean isEqual(Node node, int content)}212und \myCode{Node findNode(int number)}213\end{block}214\includegraphics[width=0.7\textheight]{ObjectDiagram-list-node}215\end{frame}216217\begin{frame}{Teil 2.3: Hilfsmethoden}218\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, firstnumber=5, firstline=5, lastline=21]{java}{SinglyLinkedList.java}219\end{frame}220221\begin{frame}{Teil 2.4: append}222\begin{block}{Teil 2.4}223Erstelle die Methode \myCode{append}224\end{block}225\includegraphics[width=0.7\textheight]{ObjectDiagram-list-node}226\end{frame}227228\begin{frame}{Teil 2.4: append}229\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, firstnumber=23, firstline=23, lastline=34]{java}{SinglyLinkedList.java}230\end{frame}231232\begin{frame}{Teil 2.5: remove}233\begin{block}{Teil 2.5}234Erstelle die Methode \myCode{remove}235\end{block}236\includegraphics[width=0.7\textheight]{ObjectDiagram-list-node}237\end{frame}238239\begin{frame}{Teil 2.5: remove}240\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, firstnumber=36, firstline=36, lastline=48]{java}{SinglyLinkedList.java}241\end{frame}242243\begin{frame}{Teil 2.6: find}244\begin{block}{Teil 2.6}245Erstelle die Methode \myCode{find}246\end{block}247\includegraphics[width=0.7\textheight]{ObjectDiagram-list-node}248\end{frame}249250\begin{frame}{Teil 2.6: find}251\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, firstnumber=50, firstline=50, lastline=58]{java}{SinglyLinkedList.java}252\end{frame}253254\section{Abspann}255\subsection{Kommende Tutorien}256\begin{frame}{Kommende Tutorien}257\begin{itemize}258\item[7.] 03.12.2012: JUnit-Tests, \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html\#toString()}{toString}, Vererbung259\item[6.] 10.12.2012: Generics?260\item[5.] 17.12.2012: Video "`Library"' zeigen261\item[-] 24.12.2012: Heiligabend - \href{http://www.fmc.uni-karlsruhe.de/faq/wann-sind-die-weihnachtsferien}{Kein Tutorium}262\item[-] 31.12.2012: Silvester - Kein Tutorium263\item[4.] 07.01.2013264\item[3.] 14.01.2013265\item[2.] 21.01.2013266\item[1.] 28.01.2013: Abschlussprüfunsvorbereitung267\item[0.] 04.02.2013: Abschlussprüfunsvorbereitung268\item[-] 10.02.2013: Ende der Vorlesungszeit des WS 2012/2013 (\href{http://www.kit.edu/studieren/2873.php}{Quelle})269\end{itemize}270\end{frame}271272\framedgraphic{Vielen Dank für eure Aufmerksamkeit!}{../images/geekandpoke-development-cycle.jpg}273274\end{document}275276277