tutorium-05.tex 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  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{graphicx}
  22. \usepackage{wrapfig}
  23. \usepackage{../templates/myStyle}
  24. \newcommand\tutor{Martin Thoma}
  25. \newcommand\tutNR{10}
  26. \newcommand\titleText{Programmieren-Tutorium Nr. \tutNR{} bei \tutor}
  27. \institute{Fakultät für Informatik}
  28. \hypersetup{pdftitle={\titleText}}
  29. \beamertemplatenavigationsymbolsempty
  30. \newcommand\InsertToC[1][]{
  31. \begin{frame}{Outline}
  32. \tableofcontents[subsectionstyle=show/show/show, subsubsectionstyle=show/show/show, #1]
  33. \end{frame}
  34. }
  35. \begin{document}
  36. \title{\titleText}
  37. \subtitle{Coding Style, Arrays}
  38. \author{\tutor}
  39. \date{\today}
  40. \subject{Programmieren}
  41. \frame{\titlepage}
  42. \frame{
  43. \frametitle{Inhaltsverzeichnis}
  44. \setcounter{tocdepth}{1}
  45. \tableofcontents
  46. \setcounter{tocdepth}{2}
  47. }
  48. \section{Einleitung}
  49. \subsection{Quiz}
  50. \begin{frame}{Quiz}
  51. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, label=QuizArray.java, frame=lines]{java}{QuizArray.java}
  52. \begin{itemize}
  53. \item Gibt es einen Compiler-Fehler?
  54. \item Gibt es einen Laufzeit-Fehler?
  55. \item Gibt es eine Ausgabe? Welche?
  56. \end{itemize}
  57. \end{frame}
  58. \begin{frame}{Quiz: Antwort}
  59. \begin{block}{Quelltext}
  60. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{QuizArray.java}
  61. \end{block}
  62. \begin{block}{Ausgabe}
  63. myArray1: geh du alter sack\\
  64. myArray2: geh du alter sack
  65. \end{block}
  66. \end{frame}
  67. \begin{frame}{Shallow copy und deep copy}
  68. \includegraphics*[height=5cm,angle=-90]{so-obj1.pdf}
  69. \begin{minipage}[b]{0.45\linewidth}
  70. \begin{figure}[htb]
  71. \includegraphics*[height=5cm,angle=-90]{so-obj1-shallow-copy.pdf}
  72. \caption{shallow copy}
  73. \label{UploadForm}
  74. \end{figure}
  75. \end{minipage}
  76. \hspace{0.5cm}
  77. \begin{minipage}[b]{0.45\linewidth}
  78. \begin{figure}[htb]
  79. \includegraphics*[height=5cm,angle=-90]{so-obj1-deep-copy.pdf}
  80. \caption{deep copy}
  81. \label{UploadForm}
  82. \end{figure}
  83. \end{minipage}
  84. \tiny{Weitere infos auf \href{http://stackoverflow.com/a/9835954/562769}{stackoverflow.com}}
  85. \end{frame}
  86. \begin{frame}{Shallow copy und deep copy}
  87. \begin{itemize}
  88. \item Java macht standardmäßig eine "`shallow copy"'
  89. \item Wenn ihr eine "`deep copy"' wollt, müsst ihr das selbst machen
  90. \end{itemize}
  91. \begin{alertblock}{Lehre aus dem Quiz}
  92. Beim kopieren von Objekten (alles außer \myCode{boolean}, \myCode{byte},
  93. \myCode{int}, \myCode{long}, \myCode{float}, \myCode{double} -
  94. oder einfacher, alles was mit einem Großbuchstaben beginnt)
  95. ist Vorsicht geboten.
  96. \end{alertblock}
  97. \end{frame}
  98. \begin{frame}{Shallow copy und deep copy}
  99. Deep copy sieht im Beispiel so aus:
  100. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, label=QuizArray.java, frame=lines]{java}{QuizArray-solution.java}
  101. \end{frame}
  102. \section{Coding Style}
  103. \subsection{Magic Numbers}
  104. \begin{frame}{Magic Numbers}
  105. \begin{alertblock}{Definition: Magic numbers}
  106. Unique values with unexplained meaning or multiple occurrences
  107. which could (preferably) be replaced with named constants.
  108. \end{alertblock}
  109. Warum sind Konstanten besser als magic numbers?
  110. \begin{itemize}
  111. \item Code wird lesbarer
  112. \item Code wird leichter erweiterbar
  113. \item Kein (nennenswerter) Geschwindigkeits- oder Speicherplatznachteil
  114. \end{itemize}
  115. \begin{block}{Faustregel}
  116. Alle Zahlen, bis auf \myCode{0}, \myCode{1} und \myCode{-1}
  117. sollten mittels Konstanten verwendet werden.
  118. \end{block}
  119. \end{frame}
  120. \begin{frame}{Magic Numbers: Beispiel mit magic numbers}
  121. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{ConnectFourGame-bad.java}
  122. \end{frame}
  123. \begin{frame}{Magic Numbers: Beispiel mit magic Konstanten}
  124. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{ConnectFourGame.java}
  125. \end{frame}
  126. \section{Praxis}
  127. \subsection{Durchschnitt}
  128. \begin{frame}{Durchschnitt: Aufgabe}
  129. Schreiben Sie eine Methode \myCode{float getAverage(int[] numbers) \{ \dots \}},
  130. die den Durchschnitt der Zahlen im Array \myCode{numbers} berechnet.
  131. \end{frame}
  132. \begin{frame}{Durchschnitt: Lösung}
  133. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small]{java}{AverageCalculation.java}
  134. \end{frame}
  135. \subsection{Flughafenkürzel}
  136. \begin{frame}{Flughafenkürzel: Aufgabe}
  137. Wir haben ein Array mit IATA-Codes (Flughafenkürzel) gegeben und
  138. möchten den Inhalt auf der Konsole ausgeben.
  139. \end{frame}
  140. \begin{frame}{Flughafenkürzel: Lösung}
  141. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small]{java}{IataCode.java}
  142. \end{frame}
  143. \begin{frame}{Flughafenkürzel: Ausgabe}
  144. Kein Compiler- oder Laufzeitfehler, obwohl \myCode{iataCodes[3]}
  145. nicht initialisiert ist!
  146. \begin{block}{Ausgabe}
  147. MUC\\
  148. BER\\
  149. AGB\\
  150. null
  151. \end{block}
  152. \end{frame}
  153. \begin{frame}{Flughafenkürzel: Umgekehrte Reihenfolge}
  154. Modifiziere das Programm so, dass die Kürzel in umgekehrter
  155. Reihenfolge ausgegeben werden.
  156. \begin{block}{Lösung von vorhin}
  157. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{IataCode.java}
  158. \end{block}
  159. \end{frame}
  160. \begin{frame}{Flughafenkürzel: Umgekehrte Reihenfolge - Lösung}
  161. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small]{java}{IataCode-2.java}
  162. \end{frame}
  163. \begin{frame}{Flughafenkürzel: Jumping}
  164. Modifiziere das Programm so, dass nur jedes dritte Element
  165. ausgegeben wird.
  166. \begin{block}{Lösung von vorhin}
  167. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{IataCode.java}
  168. \end{block}
  169. \end{frame}
  170. \begin{frame}{Flughafenkürzel: Jumping - Lösung}
  171. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small]{java}{IataCode-3.java}
  172. \end{frame}
  173. \subsection{Praxis: Bilder}
  174. \begin{frame}{Praxis: Bilder}
  175. Gegeben ist ein Schwarz-Weiß Bild \myCode{int[][] image}.
  176. \begin{enumerate}
  177. \item Was repräsentiert \myCode{image[2][42]}?
  178. \item Schreiben Sie eine Methode, die die durchschnittliche
  179. Farbe von \myCode{image} berechnet und zurückgibt.
  180. \end{enumerate}
  181. \end{frame}
  182. \begin{frame}{Praxis: Bilder - Lösung}
  183. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{Bilder.java}
  184. Mögliche Probleme:
  185. \begin{itemize}
  186. \item Ein \myCode{int} für \myCode{sum} ist eventuell zu klein
  187. \item 255 Grauwerte, \myCode{int} hat maximalwert von 2.147.483.64
  188. \item[$\Rightarrow$] $\frac{2147483647}{255} \approx 8.4 \cdot 10^6$
  189. \item[$\Rightarrow$] maximal 8.4 Millionen Pixel
  190. \item[$\Rightarrow$] $\sqrt{8.4 \cdot 10^6} \approx 2900$
  191. \item[$\Rightarrow$] maximale Auflösung von $2900 \times 2900$ Pixel
  192. \item Eventuell \myCode{int[][] image = new int[0][0];}
  193. \end{itemize}
  194. \end{frame}
  195. \subsection{Praxis: Sieb des Erasthostenes}
  196. \begin{frame}{Praxis: Sieb des Erasthostenes}
  197. Implementieren Sie das Sieb des Erasthostenes.
  198. \end{frame}
  199. \section{Allgemeine Hinweise zu ÜB}
  200. \subsection{Praktomat}
  201. \begin{frame}{Praktomat}
  202. \begin{itemize}
  203. \item Fragen frühzeitig stellen!
  204. \item Wenn ihr Pakete verwendet, am Anfang eurer Dateien
  205. also \myCode{package AB\_2;} oder ähnliches steht,
  206. müsst ihr die korrekte Ordnerstruktur in den Praktomat
  207. hochladen
  208. \item In Eclipse im Fenster "`Navigation"' den Ordner "`src"'
  209. auswählen
  210. \item \menu{File > Export\dots > File system}
  211. \item Zip-Datei aus dem exportiertem src-Ordner erstellen
  212. \item Zip-Datei hochladen
  213. \end{itemize}
  214. \end{frame}
  215. \framedgraphic{Projekt mit Eclipse exportieren}{eclipse-export-project.png}
  216. \begin{frame}{Allgemeines}
  217. \begin{itemize}
  218. \item Eclipse-Warnungen beherzigen und die Ursache dafür beseitigen
  219. \item Formattieren: \keys{Strg + A} und \keys{Strg + \shift + F}
  220. \item Encoding: \menu{Project > Properties > Ressource > Text file encoding > UTF-8}
  221. \end{itemize}
  222. \end{frame}
  223. \section{Hinweise zum ÜB 3}
  224. \subsection{ÜB 3}
  225. \begin{frame}{ÜB 3}
  226. \begin{itemize}
  227. \item A1:
  228. \begin{itemize}
  229. \item Pro Aufgabe jeweils eine Textdatei(\myCode{A1.txt}, \myCode{B1.txt})
  230. \item Schaut euch meinen Artikel \href{http://martin-thoma.com/java-puzzle-1-pre-and-postincrement/}{Java Puzzle \#1: Pre- and Postincrement} an
  231. \end{itemize}
  232. \item A2: Buchstaben "`d"' und "`f"' nicht verwenden
  233. \end{itemize}
  234. \end{frame}
  235. \section{Abspann}
  236. \subsection{Comic}
  237. \framedgraphic{Abgaben um 11:55 Uhr}{ub-2-abgabge.png}
  238. \framedgraphic{Vielen Dank für eure Aufmerksamkeit!}{../images/geekandpoke-2010-01-commenting.jpg}
  239. \end{document}