tutorium-06.tex 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376
  1. \documentclass[usepdftitle=false,hyperref={pdfpagelabels=false}]{beamer}
  2. % use KIT-Theme
  3. % see http://sdqweb.ipd.kit.edu/wiki/Dokumentvorlagen
  4. %\usetheme{Frankfurt} % see http://deic.uab.es/~iblanes/beamer_gallery/index_by_theme.html as fallback
  5. \InputIfFileExists{../templates/beamerthemekit.sty}{\usepackage{../templates/beamerthemekit}}{\usetheme{Frankfurt}}
  6. \usefonttheme{professionalfonts}
  7. \usepackage{hyperref}
  8. \usepackage{lmodern}
  9. \usepackage{listings}
  10. \usepackage{wrapfig} % see http://en.wikibooks.org/wiki/LaTeX/Floats,_Figures_and_Captions
  11. \usepackage[utf8]{inputenc} % this is needed for german umlauts
  12. \usepackage[ngerman]{babel} % this is needed for german umlauts
  13. \usepackage[T1]{fontenc} % this is needed for correct output of umlauts in pdf
  14. \usepackage{verbatim}
  15. \usepackage{relsize}
  16. \usepackage{subfigure}
  17. \usepackage{algorithm,algpseudocode}
  18. \usepackage{minted} % needed for the inclusion of source code
  19. \usepackage{menukeys}
  20. \usepackage{xcolor}
  21. \usepackage{pifont}% http://ctan.org/pkg/pifont
  22. \newcommand{\cmark}{\ding{51}}%
  23. \newcommand{\xmark}{\ding{55}}%
  24. \usepackage{../templates/myStyle}
  25. \newcommand\tutor{Martin Thoma}
  26. \newcommand\tutNR{10}
  27. \newcommand\titleText{Programmieren-Tutorium Nr. \tutNR{} bei \tutor}
  28. \institute{Fakultät für Informatik}
  29. \hypersetup{pdftitle={\titleText}}
  30. \beamertemplatenavigationsymbolsempty
  31. \newcommand\InsertToC[1][]{
  32. \begin{frame}{Outline}
  33. \tableofcontents[subsectionstyle=show/show/show, subsubsectionstyle=show/show/show, #1]
  34. \end{frame}
  35. }
  36. \begin{document}
  37. \title{\titleText}
  38. \subtitle{Pakete}
  39. \author{\tutor}
  40. \date{\today}
  41. \subject{Programmieren}
  42. \frame{\titlepage}
  43. \frame{
  44. \frametitle{Inhaltsverzeichnis}
  45. \setcounter{tocdepth}{1}
  46. \tableofcontents
  47. \setcounter{tocdepth}{2}
  48. }
  49. \section{Einleitung}
  50. \subsection{Quiz}
  51. \begin{frame}{Quiz}
  52. \begin{minipage}[b]{0.45\linewidth}
  53. \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=String.java, frame=lines]{java}{String.java}
  54. \end{minipage}
  55. \hspace{0.5cm}
  56. \begin{minipage}[b]{0.45\linewidth}
  57. \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=World.java, frame=lines]{java}{World.java}
  58. \end{minipage}
  59. \begin{itemize}
  60. \item Gibt es einen Compiler-Fehler?
  61. \item Gibt es einen Laufzeit-Fehler?
  62. \item Gibt es eine Ausgabe? Welche?
  63. \end{itemize}
  64. \end{frame}
  65. \begin{frame}{Ergebnis}
  66. \myCode{Exception in thread "main" java.lang.NoSuchMethodError: main}\\
  67. Es gibt nun keine \\
  68. \myCode{public static void main(java.lang.String[] args) \{}\\
  69. \begin{block}{Lehre}
  70. Keine Java-internen Typen umschreiben.
  71. \end{block}
  72. \end{frame}
  73. \section{ÜB 2}
  74. \subsection{Nachbesprechung ÜB 2}
  75. \begin{frame}{Allgmeines}
  76. \begin{block}{Musterlösung}
  77. Inoffizielle Musterlösung von Simon und mir ist unter
  78. \href{http://goo.gl/BfA6i}{http://goo.gl/BfA6i} erhältlich.\\
  79. Bitte dort anschauen.
  80. \end{block}
  81. \end{frame}
  82. \begin{frame}{Allgmeines}
  83. \begin{block}{Stil}
  84. \begin{itemize}[<+->]
  85. \item Niemals \myCode{if (variable == true)}, sondern \myCode{if (variable)}
  86. \item "`Dead Code"' - also Code der niemals erreicht wird - wird bestraft
  87. \item Große Probleme ($\rightarrow$ lange Methoden) aufsplitten
  88. \end{itemize}
  89. \end{block}
  90. \begin{itemize}[<+->]
  91. \item Die bereitgestellten Code-Vorlagen sind keine Musterlösungen!
  92. \item Kein "`TODO"' in Abgaben
  93. \item Aufgabe B1 (Histogramm) war fehlerhaft: Natürlich muss der Kontrast nur "`nicht-negativ"' sein und nicht "`positiv"'
  94. \item Laufvariablen müssen nicht immer \myCode{i} und \myCode{j} heißen
  95. \item Schaut euch die hochgeladeten Dateien im Praktomat an
  96. \item Redundanter Code ist schlecht $\Rightarrow$ Besser: Neue Methode anlegen
  97. \end{itemize}
  98. \end{frame}
  99. \begin{frame}{Allgemeines}
  100. \begin{block}{Genau lesen}
  101. \begin{itemize}[<+->]
  102. \item \textbf{A.1.1 Konstruktor von Bike}: "`Modifizieren Sie
  103. den Konstruktor der Klasse Bike, indem Sie aus der
  104. Signatur das Argument, nach dem bisher der Preis
  105. gesetzt wird, entfernen."'
  106. \item \textbf{A.1.2 Setter für Gears} "`Schreiben Sie den
  107. Konstruktor so um, dass er die Methode setSprockets
  108. benutzt, um einen konsistenten Anfangszustand zu
  109. garantieren."'
  110. \item \textbf{A.2.1 Tribonacci-Folge}: "`Geben Sie \textbf{nur} die
  111. siebenunddreißigste Tribonacci-Zahl auf der Konsole
  112. aus."'
  113. \item[$\Rightarrow$] Es werden automatische Tests durchgeführt.
  114. Stimmt die Ausgabe nicht exakt - also jedes einzelne
  115. (Leer)zeichen -, schlägt der Test fehl.
  116. \end{itemize}
  117. \end{block}
  118. \end{frame}
  119. \begin{frame}{Tipp für BikeShop}
  120. \myCode{\href{http://docs.oracle.com/javase/7/docs/api/java/lang/System.html\#arraycopy(java.lang.Object, int, java.lang.Object, int, int)}{System.arraycopy(warehouse, 0, newStock, 0, warehouse.length);}}
  121. \end{frame}
  122. \begin{frame}{setSprockets}
  123. \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Gears.java, frame=lines, firstline=25, lastline=51]{java}{Gears.java}
  124. \end{frame}
  125. \begin{frame}{Einheiten}
  126. Einheiten \textbf{immer} angeben, da \dots
  127. \begin{itemize}[<+->]
  128. \item nie klar ist, welche Einheit gemeint ist
  129. \item es ein richtig ärgerlicher Fehler ist
  130. \item fehlende Einheiten viel Geld kosten können ($\rightarrow$ \href{http://www.youtube.com/watch?v=q2L5\_swAT5A}{Video: NASA Measuring Failure} - Mars Orbiter)
  131. \end{itemize}
  132. \end{frame}
  133. \begin{frame}{Attribute}
  134. \begin{alertblock}{Attribute}
  135. \begin{itemize}
  136. \item Attribute sind Eigenschaften eines Objekts oder einer Klasse
  137. \item Attribute sind keine Hilfsvariablen
  138. \end{itemize}
  139. \end{alertblock}
  140. \end{frame}
  141. \begin{frame}{Vergleiche mit floats}
  142. Nicht jede Zahl kann als Gleitkomma-Zahl dargestellt werden:
  143. \includegraphics[height=50mm]{Gleitkommazahlen.png}\\
  144. \tiny{Quelle: \href{http://de.wikipedia.org/wiki/Datei:Gleitkommazahlen.svg}{de.wikipedia.org/wiki/Datei:Gleitkommazahlen.svg}}\\
  145. \end{frame}
  146. \begin{frame}{Vergleiche mit floats}
  147. Zusätzlich sollte man bei der Camera-Aufgabe von $\varepsilon = 10^6$ ausgehen.\\
  148. Die Vergleiche müssen also etwa so aussehen:
  149. \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\small, firstnumber=24, firstline=24, lastline=33]{java}{Camera.java}
  150. \end{frame}
  151. \begin{frame}{Camera.java: isLeftContrastHigher}
  152. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, firstnumber=35, firstline=35, lastline=55]{java}{Camera.java}
  153. \end{frame}
  154. \begin{frame}{Camera.java: Eigentlicher Code}
  155. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, firstnumber=57, firstline=57, lastline=87]{java}{Camera.java}
  156. \end{frame}
  157. \begin{frame}{Gerüchteküche}
  158. Bringt es einen Vorteil, eine schwere Aufgabe nicht zu bearbeiten?
  159. \begin{itemize}[<+->]
  160. \item Es gibt für jede Teilaufgabe ein Punktekontingent
  161. \item Bearbeitet ihr eine Teilaufgabe nicht, ziehe ich alle Punkte ab
  162. \item Bearbeitet ihr einen Teil einer Teilaufgabe nicht, ziehe
  163. ich mindestens so viele Punkte ab, wie derjenige mit dem
  164. höchstem Abzug abgezogen bekommen hat
  165. \item Wenn der Code nicht das tut, was gefordert wird, kann ich
  166. auch alles abziehen
  167. \item[$\Rightarrow$] Nein, es bringt keinen Vorteil
  168. \end{itemize}
  169. \end{frame}
  170. \section{Vorlesungsergänzungen}
  171. \subsection{Pakete}
  172. \begin{frame}{Pakete}
  173. \begin{itemize}[<+->]
  174. \item Dienen der Strukturierung des Quelltextes
  175. \item Sollen Namenskonflikte vermeiden (z.B. Klasse \myCode{Person}
  176. in einem Paket \myCode{uni} ist wohl anders als Klasse
  177. \myCode{Person} im Paket \myCode{politik})
  178. \item Können über \myCode{.jar}-Dateien eingebunden werden
  179. \item Könnt ihr über \keys{\shift + Alt + N} und \menu{Package}
  180. oder mit einem Rechtsklick in Eclipse erzeugen:
  181. \includegraphics[height=30mm]{new-package.png}\\
  182. \item Eine Klasse ist Teil eines Paketes, wenn sie \dots
  183. \begin{itemize}
  184. \item in dem Ordner mit dem Paketnamen liegt
  185. \item sie \myCode{package <paketname>;} ganz am Anfang stehen hat
  186. \end{itemize}
  187. \end{itemize}
  188. \end{frame}
  189. \begin{frame}{Pakete}
  190. \begin{block}{Namenskonventionen}
  191. \begin{itemize}
  192. \item Pakete werden klein geschrieben
  193. \item Pakete können "`Unterpakete"' haben. Dies wird durch
  194. einen Punkt angedeutet:
  195. \begin{itemize}
  196. \item \href{http://docs.oracle.com/javase/7/docs/api/overview-summary.html}{Offizielle Pakete}:
  197. \item \href{http://docs.oracle.com/javase/7/docs/api/java/io/package-summary.html}{java.io}
  198. \item \href{http://docs.oracle.com/javase/7/docs/api/java/lang/package-summary.html}{java.lang} - hat z.B. \myCode{Byte}, \myCode{Integer}, \dots
  199. \item \href{http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/package-summary.html}{java.lang.annotation}
  200. \end{itemize}
  201. \end{itemize}
  202. \end{block}
  203. \end{frame}
  204. \begin{frame}{Pakete: protected}
  205. \begin{tabular}{l||c|c|c|c}
  206. Modifier & Class & Package & Subclass & World\\
  207. \hline\hline
  208. \myCode{public} & \cmark & \cmark & \cmark & \cmark \\
  209. \myCode{protected} & \cmark & \cmark & \cmark & \xmark \\
  210. no modifier & \cmark & \cmark & \xmark & \xmark \\
  211. \myCode{private} & \cmark & \xmark & \xmark & \xmark
  212. \end{tabular}
  213. \small{Weitere Informationen: \href{http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html}{Controlling Access to Members of a Class}}
  214. \pause
  215. \begin{block}{Tipp}
  216. \myCode{private} macht fast immer Sinn. Wenn ihr nicht wisst,
  217. ob ihr \myCode{private} oder \myCode{protected} nehmen sollt,
  218. nehmt protected. Kein modifier macht selten Sinn. Das sieht
  219. so aus, als ob ihr es dem Zufall überlasst.
  220. \end{block}
  221. \end{frame}
  222. \subsection{foreach-Schleife}
  223. \begin{frame}{foreach in Java: Allgemeines}
  224. Foreach \dots
  225. \begin{itemize}[<+->]
  226. \item wird in Java-Kreisen manchmal auch "`Enhanced for loop"' genannt
  227. \item geht alle Elemente einer
  228. \href{http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html}{Collection}
  229. durch zu gehen (genauer: \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html}{Iterable})
  230. \item sollte verwendet werden, wenn man es verwenden kann
  231. \item ist auch in der \href{http://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html}{Dokumentation} (Nur in 1.5?)
  232. und im \href{http://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html}{Tutorial}
  233. \item ist in der \href{http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html\#jls-14.14.2}{JLS SE7} spezifiziert
  234. \item ist Teil des \href{http://docs.oracle.com/javase/tutorial/extra/certification/javase-7-programmer1.html}{Programmer Level I Exams}
  235. für das "`Programmer Language Certification"'
  236. \end{itemize}
  237. \end{frame}
  238. \begin{frame}{foreach in Java: Beispiel}
  239. \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\small, firstline=3, lastline=13]{java}{foreach.java}
  240. \end{frame}
  241. \section{ÜB 3}
  242. \subsection{Hinweise zu ÜB 3}
  243. \begin{frame}{Hinweise zu ÜB 3}
  244. \begin{itemize}[<+->]
  245. \item Nur Klassen und Methoden aus \myCode{java.lang} sind erlaubt
  246. \item \textbf{Keine} Textausgabe und keine Schreibzugriffe auf Dateien
  247. \item JavaDoc und Datenkapselung ($\rightarrow$ \myCode{private}) sind nun Pflicht
  248. \item Pakete sollten nun verwendet werden
  249. \item[$\Rightarrow$] Achtung beim Upload in den Praktomaten! vgl. tutorium-05.pdf, Folien 23-24
  250. \item[A.1.1] Nur die \myCode{statements.csv} als Abgabe!
  251. \item[A.2] \myCode{StrangeClass.java} soll wirklich \textbf{nirgends} "`f"' und kein "`d"' haben
  252. \item[A.3] Levenshtein-Distanz $\rightarrow$ nächste Folie
  253. \item[A.4] Geometrie $\rightarrow$ übernächste Folie
  254. \item[B.1] Der Kommentar, warum ihr die Modifier (\myCode{private, public, protected})
  255. verwendet, soll natürlich direkt zum jeweiligen modifier und NICHT in
  256. eine extra Textdatei!
  257. \end{itemize}
  258. \end{frame}
  259. \subsection{Levenshtein-Distanz}
  260. \begin{frame}{A.3 Levenshtein-Distanz}
  261. \begin{itemize}[<+->]
  262. \item Wer hat sichs angeschaut?
  263. \item Verstanden? Falls nicht sind folgende Seiten einen Versuch wert:
  264. \begin{itemize}
  265. \item \href{http://oldfashionedsoftware.com/tag/levenshtein-distance/}{Guter Artikel}, aber nur bis "`Some Code, Finally"' relevant
  266. \item \href{http://de.wikipedia.org/wiki/Levenshtein-Distanz}{de-Wikipedia}
  267. \item \href{http://en.wikipedia.org/wiki/Levenshtein_Distance\#Computing_Levenshtein_distance}{en-Wiki} mit Pseudocode
  268. \item \href{http://www-igm.univ-mlv.fr/~lecroq/seqcomp/node2.html}{eine Visualisierung}
  269. \end{itemize}
  270. \begin{alertblock}{Achtung!}
  271. Der Algorithmus muss modifiziert werden. Durch die Modifikationen entspricht
  272. der Algorithmus nicht mehr den Varianten, die sich im Internet finden lassen.
  273. Ohne diese Modifikationen kann ich euch keine Punkte geben!
  274. \end{alertblock}
  275. \end{itemize}
  276. \end{frame}
  277. \subsection{A.4 Geometrie}
  278. \begin{frame}{A.4 Geometrie}
  279. \begin{itemize}[<+->]
  280. \item Manhattan-Distanz:\\
  281. \includegraphics[height=30mm]{ManhattanDistance.pdf}\\
  282. \tiny{Quelle: \href{http://commons.wikimedia.org/wiki/File:Manhattan\_distance.svg}{commons.wikipedia.org/wiki/File:Manhattan\_distance.svg}}
  283. \end{itemize}
  284. \end{frame}
  285. \section{Praxis}
  286. \subsection{Aufgaben}
  287. \begin{frame}{Aufgaben}
  288. Siehe Blätter 5, 6 und 7 in \menu{prog-official > tut\_aufgaben\_ws1112}
  289. \end{frame}
  290. \section{Abspann}
  291. \subsection{Tutorium 7}
  292. \begin{frame}{Tutorium 7}
  293. \begin{block}{ÜB 4: Achtung}
  294. \begin{itemize}
  295. \item Sehr große Aufgabe (viele Methoden / Klassen)
  296. \item Die meisten Methoden benötigen nur ein bis vier Zeilen
  297. \end{itemize}
  298. \end{block}
  299. \begin{block}{Themenvorschläge fürs nächste mal}
  300. \begin{itemize}
  301. \item \href{http://docs.oracle.com/javase/7/docs/technotes/guides/language/assert.html}{Assertions}
  302. \item Verkettete Listen
  303. \item Allgemeine Übungsaufgaben
  304. \end{itemize}
  305. \end{block}
  306. \end{frame}
  307. \subsection{Nachhilfe}
  308. \begin{frame}{Nachhilfe}
  309. \begin{itemize}[<+->]
  310. \item Falls ihr Nachhilfe braucht, meldet euch bei mir oder
  311. dem Übungsleiter (Florian Merz)
  312. \item Euch wird dann ein Nachhilfelehrer vermittelt
  313. \item Die Kosten müsst ihr mit dem Nachhilfelehrer aushandeln
  314. \end{itemize}
  315. \end{frame}
  316. \subsection{Kommende Tutorien}
  317. \begin{frame}{Kommende Tutorien}
  318. \begin{itemize}
  319. \item[8.] 26.11.2012
  320. \item[7.] 03.12.2012
  321. \item[6.] 10.12.2012
  322. \item[5.] 17.12.2012: Video "`Library"' zeigen
  323. \item[-] 24.12.2012: Heiligabend - \href{http://www.fmc.uni-karlsruhe.de/faq/wann-sind-die-weihnachtsferien}{Kein Tutorium}
  324. \item[-] 31.12.2012: Silvester - Kein Tutorium
  325. \item[4.] 07.01.2013
  326. \item[3.] 14.01.2013
  327. \item[2.] 21.01.2013
  328. \item[1.] 28.01.2013: Abschlussprüfunsvorbereitung
  329. \item[0.] 04.02.2013: Abschlussprüfunsvorbereitung
  330. \item[-] 10.02.2013: Ende der Vorlesungszeit des WS 2012/2013 (\href{http://www.kit.edu/studieren/2873.php}{Quelle})
  331. \end{itemize}
  332. \end{frame}
  333. \framedgraphic{Vielen Dank für eure Aufmerksamkeit!}{../images/programmers-users.jpg}
  334. \end{document}