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