tutorium-07.tex 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. \documentclass[usepdftitle=false,hyperref={pdfpagelabels=false}]{beamer}
  2. \usepackage{../templates/myStyle}
  3. \begin{document}
  4. \title{\titleText}
  5. \subtitle{String interning, Assertions, Einfach verkettete Listen}
  6. \author{\tutor}
  7. \date{3. Dezember 2012}
  8. \subject{Programmieren}
  9. \frame{\titlepage}
  10. \frame{
  11. \frametitle{Inhaltsverzeichnis}
  12. \setcounter{tocdepth}{1}
  13. \tableofcontents
  14. \setcounter{tocdepth}{2}
  15. }
  16. \section{Einleitung}
  17. \subsection{Quiz}
  18. \begin{frame}{Quiz}
  19. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{QuizString.java}
  20. \begin{itemize}
  21. \item Gibt es einen Compiler-Fehler? \xmark
  22. \item Gibt es einen Laufzeit-Fehler? \xmark
  23. \item Gibt es eine Ausgabe? \cmark{} Welche Ausgabe gibt es?
  24. \end{itemize}
  25. \end{frame}
  26. \begin{frame}{Quiz: Antwort}
  27. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{QuizString.java}
  28. \begin{itemize}
  29. \item string1 und string2 sind verschiedene Objekte.
  30. \item string3 und string4 sind das selbe Objekt.
  31. \end{itemize}
  32. \end{frame}
  33. \begin{frame}{Quiz: Erklärung}
  34. \begin{itemize}[<+->]
  35. \item Erstellt man einen String mit \myCode{String abc = new String("Hallo");}
  36. wird ein neues Objekt angelegt
  37. \item Erstellt man einen String mit \myCode{String abc = "Hallo";}
  38. macht Java "`String interning"'
  39. \end{itemize}
  40. \pause[\thebeamerpauses]
  41. \begin{alertblock}{Achtung}
  42. Trotzdem mit \myCode{abc.equals(def);} vergleichen! Nur so
  43. ist garantiert, dass ihr auf Gleichheit (und nicht nur auf
  44. "`Selbstheit"' vergleicht).
  45. \end{alertblock}
  46. \end{frame}
  47. \section{Assertions}
  48. \subsection{Allgemeines}
  49. \begin{frame}{Assertions}
  50. \begin{itemize}[<+->]
  51. \item Problem: Es tritt ein falsches Ergebnis auf, es ist
  52. aber nicht klar warum.
  53. \item Lösung: Man macht Zusicherungen (engl. assertions)
  54. \item Man überlegt sich also, welche Variablen an
  55. krischen Stellen welche Werte oder Beziehungen
  56. zueinander haben sollen
  57. \end{itemize}
  58. \pause[\thebeamerpauses]
  59. \begin{alertblock}{Wichtig: Assertions sind keine Exceptions!}
  60. \begin{tabular}{l|l}
  61. \textbf{Assertion} & \textbf{Exception}\\
  62. \hline
  63. muss man aktivieren & wird immer ausgeführt\\
  64. dient zum Entdecken von Fehlern & dient zum behandeln von Fehlern\\
  65. z.B. (a < b), (a !=0), \dots & z.B. \href{http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html}{IOException}\\
  66. \end{tabular}
  67. \end{alertblock}
  68. \end{frame}
  69. \begin{frame}{Beispiel}
  70. \inputminted[linenos=false, tabsize=4, fontsize=\small]{java}{singleLines.java}
  71. \end{frame}
  72. \begin{frame}{Assertions aktivieren}
  73. In Eclipse:
  74. \begin{itemize}
  75. \item \menu{Window > Preferences > Java > Installed JREs > Edit...}
  76. \item Default VM Arguments: "`-enableassertions"' hinzufügen
  77. \end{itemize}
  78. \end{frame}
  79. \begin{frame}{Weitere Materialien}
  80. \begin{itemize}
  81. \item docs.oracle.com: \href{http://docs.oracle.com/javase/1.4.2/docs/guide/lang/assert.html}{Programming With Assertions}
  82. \item galileo openbook: \href{http://openbook.galileodesign.de/javainsel5/javainsel07_005.htm}{Java ist auch eine Insel}
  83. \item Java Blog Buch: \href{http://www.java-blog-buch.de/0609-assertions/}{06.09 Assertions}
  84. \end{itemize}
  85. \end{frame}
  86. \section{Einfach verkettete Listen}
  87. \subsection{Allgemeines}
  88. \begin{frame}{Einfach verkettete Listen}
  89. \begin{block}{Szenario}
  90. \begin{itemize}[<+->]
  91. \item Ihr wollt euch Druckaufträge speichern
  92. \item Funktioniert mit Array
  93. \item Problem:
  94. \begin{itemize}
  95. \item Ihr belegt immer konstant viel Speicher
  96. \item Eventuell braucht ihr mehr, eventuell weniger Speicher
  97. \end{itemize}
  98. \item Lösung: Verkettete Listen
  99. \end{itemize}
  100. \end{block}
  101. \end{frame}
  102. \begin{frame}{Idee}
  103. \begin{itemize}[<+->]
  104. \item Man speichert sich nur einen Zeiger
  105. \item Dieser Zeiger zeigt auf "`Knoten"'
  106. \item Jeder Knoten hat wieder einen Zeiger
  107. \item Jeder Knoten kann wieder auf einen Knoten zeigen
  108. \end{itemize}
  109. \only<\thebeamerpauses>{
  110. \includegraphics[width=\linewidth]{Singly-linked-list.png}
  111. }
  112. \end{frame}
  113. \framedgraphic{Weiteres Beispiel}{Listenbeispiel.jpg}
  114. \begin{frame}{Was wollen wir?}
  115. \begin{itemize}[<+->]
  116. \item Elemente hinzufügen
  117. \item Elemente löschen
  118. \item Elemente finden
  119. \end{itemize}
  120. \pause[\thebeamerpauses]
  121. \begin{alertblock}{Wichtig}
  122. Zwischenergebnisse ausgeben
  123. \end{alertblock}
  124. \end{frame}
  125. \begin{frame}{Wie sieht das aus?}
  126. \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Main.java, frame=lines]{java}{Main.java}
  127. \end{frame}
  128. \begin{frame}{Welche Klassen brauchen wir?}
  129. \only<2>{
  130. \includegraphics[width=0.7\textheight]{ObjectDiagram.pdf}
  131. }
  132. \end{frame}
  133. \begin{frame}{Generics}
  134. \begin{block}{Hinweis}
  135. \begin{itemize}[<+->]
  136. \item Noch erstellt ihr eine Liste für genau einen Datentyp
  137. \item Eigentlich macht der Code immer das gleiche, ist also
  138. vom Datentypen unabhängig
  139. \item Das löst man später mit "`Generics"'
  140. \end{itemize}
  141. \end{block}
  142. \pause[\thebeamerpauses]
  143. \begin{block}{Hinweis 2}
  144. Oder - z.B. bei den Abschlussaufgaben - man verwendet einfach Datentypen
  145. aus \href{http://docs.oracle.com/javase/7/docs/api/java/util/package-summary.html}{java.util}:
  146. \begin{itemize}[<+->]
  147. \item \href{http://docs.oracle.com/javase/7/docs/api/java/util/LinkedList.html}{LinkedList}
  148. \item \href{http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html}{HashMap} /
  149. \href{http://docs.oracle.com/javase/7/docs/api/java/util/TreeMap.html}{TreeMap}
  150. \item \href{http://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html}{HashSet} /
  151. \href{http://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html}{TreeSet}
  152. \end{itemize}
  153. \end{block}
  154. \end{frame}
  155. \subsection{Der Knoten}
  156. \begin{frame}{Teil 1: Der Knoten}
  157. \begin{block}{Teil 1}
  158. Erstelle die Klasse Node
  159. \end{block}
  160. \includegraphics[width=0.7\textheight]{ObjectDiagram-list-node}
  161. \end{frame}
  162. \begin{frame}{Teil 1: Der Knoten}
  163. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, label=Node.java, frame=lines]{java}{Node.java}
  164. \end{frame}
  165. \subsection{Die Liste}
  166. \begin{frame}{Teil 2.1: Die Struktur der Liste}
  167. \begin{block}{Teil 2.1}
  168. Erstelle die Klasse SinglyLinkedList (noch ohne Funktionalität)
  169. \end{block}
  170. \includegraphics[width=0.7\textheight]{ObjectDiagram-list-node}
  171. \end{frame}
  172. \begin{frame}{Teil 2.1: Die Struktur der Liste}
  173. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, label=SinglyLinkedList-structure.java]{java}{SinglyLinkedList-structure.java}
  174. \end{frame}
  175. \begin{frame}{Teil 2.2: printList()}
  176. \begin{block}{Teil 2.2}
  177. Erstelle die Methode "`printList"'
  178. \end{block}
  179. \includegraphics[width=0.7\textheight]{ObjectDiagram-list-node}
  180. \end{frame}
  181. \begin{frame}{Teil 2.2: printList()}
  182. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, firstnumber=60, firstline=60, lastline=69]{java}{SinglyLinkedList.java}
  183. \end{frame}
  184. \begin{frame}{Teil 2.3: Hilfsmethoden}
  185. \begin{block}{Teil 2.3}
  186. Erstelle die Methoden \myCode{boolean isEqual(Node node, int content)}
  187. und \myCode{Node findNode(int number)}
  188. \end{block}
  189. \includegraphics[width=0.7\textheight]{ObjectDiagram-list-node}
  190. \end{frame}
  191. \begin{frame}{Teil 2.3: Hilfsmethoden}
  192. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, firstnumber=5, firstline=5, lastline=21]{java}{SinglyLinkedList.java}
  193. \end{frame}
  194. \begin{frame}{Teil 2.4: append}
  195. \begin{block}{Teil 2.4}
  196. Erstelle die Methode \myCode{append}
  197. \end{block}
  198. \includegraphics[width=0.7\textheight]{ObjectDiagram-list-node}
  199. \end{frame}
  200. \begin{frame}{Teil 2.4: append}
  201. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, firstnumber=23, firstline=23, lastline=34]{java}{SinglyLinkedList.java}
  202. \end{frame}
  203. \begin{frame}{Teil 2.5: remove}
  204. \begin{block}{Teil 2.5}
  205. Erstelle die Methode \myCode{remove}
  206. \end{block}
  207. \includegraphics[width=0.7\textheight]{ObjectDiagram-list-node}
  208. \end{frame}
  209. \begin{frame}{Teil 2.5: remove}
  210. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, firstnumber=36, firstline=36, lastline=48]{java}{SinglyLinkedList.java}
  211. \end{frame}
  212. \begin{frame}{Teil 2.6: find}
  213. \begin{block}{Teil 2.6}
  214. Erstelle die Methode \myCode{find}
  215. \end{block}
  216. \includegraphics[width=0.7\textheight]{ObjectDiagram-list-node}
  217. \end{frame}
  218. \begin{frame}{Teil 2.6: find}
  219. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, firstnumber=50, firstline=50, lastline=58]{java}{SinglyLinkedList.java}
  220. \end{frame}
  221. \section{Abspann}
  222. \subsection{Kommende Tutorien}
  223. \begin{frame}{Kommende Tutorien}
  224. \begin{itemize}
  225. \item[7.] 03.12.2012: JUnit-Tests, \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html\#toString()}{toString}, Vererbung
  226. \item[6.] 10.12.2012: Generics?
  227. \item[5.] 17.12.2012: Video "`Library"' zeigen
  228. \item[-] 24.12.2012: Heiligabend - \href{http://www.fmc.uni-karlsruhe.de/faq/wann-sind-die-weihnachtsferien}{Kein Tutorium}
  229. \item[-] 31.12.2012: Silvester - Kein Tutorium
  230. \item[4.] 07.01.2013
  231. \item[3.] 14.01.2013
  232. \item[2.] 21.01.2013
  233. \item[1.] 28.01.2013: Abschlussprüfunsvorbereitung
  234. \item[0.] 04.02.2013: Abschlussprüfunsvorbereitung
  235. \item[-] 10.02.2013: Ende der Vorlesungszeit des WS 2012/2013 (\href{http://www.kit.edu/studieren/2873.php}{Quelle})
  236. \end{itemize}
  237. \end{frame}
  238. \framedgraphic{Vielen Dank für eure Aufmerksamkeit!}{../images/geekandpoke-development-cycle.jpg}
  239. \end{document}