tutorium-03.tex 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463
  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{xcolor}
  20. \usepackage{menukeys}
  21. \usepackage{../templates/myStyle}
  22. \newcommand\tutor{Martin Thoma}
  23. \newcommand\tutNR{10}
  24. \newcommand\titleText{Programmieren-Tutorium Nr. \tutNR{} bei \tutor}
  25. \institute{Fakultät für Informatik}
  26. \hypersetup{pdftitle={\titleText}}
  27. \beamertemplatenavigationsymbolsempty
  28. \newcommand\InsertToC[1][]{
  29. \begin{frame}{Outline}
  30. \tableofcontents[subsectionstyle=show/show/show, subsubsectionstyle=show/show/show, #1]
  31. \end{frame}
  32. }
  33. \begin{document}
  34. \title{\titleText}
  35. \subtitle{Eclipse, Arrays, Kontrollstrukturen und Konventionen}
  36. \author{\tutor}
  37. \date{\today}
  38. \subject{Programmieren}
  39. \frame{\titlepage}
  40. \frame{
  41. \frametitle{Inhaltsverzeichnis}
  42. \setcounter{tocdepth}{1}
  43. \tableofcontents
  44. \setcounter{tocdepth}{2}
  45. }
  46. %\AtBeginSection[]{
  47. % \InsertToC[sections={\thesection}] % shows only subsubsections of one subsection
  48. %}
  49. \section{Einleitung}
  50. \subsection{Quiz}
  51. \begin{frame}{Quiz}
  52. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small]{java}{Quiz.java}
  53. \begin{itemize}
  54. \item Was ist die Ausgabe?
  55. \item Gibt es einen Compiler-Fehler?
  56. \item Gibt es einen Laufzeit-Fehler?
  57. \end{itemize}
  58. \end{frame}
  59. \subsection{Quiz: Antwort}
  60. \begin{frame}{Quiz: Antwort}
  61. Ein Compiler-Fehler:
  62. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small]{console}{Quiz-Answer.sh-session}
  63. \end{frame}
  64. \section{Eclipse}
  65. \subsection{Frühere Folien}
  66. \begin{frame}{Frühere Folien}
  67. \begin{itemize}
  68. \item Installation (für Windows): \href{http://www.eclipse.org/}{eclipse.org}
  69. \item \menu{Window > Open Perspective > Java}
  70. \item \menu{Window > Show Toolbar}
  71. \item \menu{Window > Preferences > General > Editors > Text Editors}
  72. \begin{itemize}
  73. \item Show line numbers
  74. \item Print margin column: 120
  75. \end{itemize}
  76. \end{itemize}
  77. \end{frame}
  78. \subsection{Checkstyle: Installation}
  79. \begin{frame}{Checkstyle: Installation}
  80. \begin{itemize}
  81. \item Internetverbindung wird benötigt!
  82. \item \menu{Help > Install New Software}
  83. \item Work with: \myCode{http://eclipse-cs.sf.net/update/}
  84. \item Klick auf \menu{Add...}
  85. \item Name: "`Checkstyle"'
  86. \item Warten
  87. \item Nun sollten zwei Einträge erscheinen
  88. \item "`Checkstyle"' auswählen
  89. \item auf \menu{Next} klicken (und dann nochmal)
  90. \item "`I accept the terms of the licence agreement"'
  91. \item auf \menu{Finish} klicken und dann herunterladen lassen
  92. \item "`Warning: You are installing software [...]"' $\rightarrow$ klick auf \menu{OK}
  93. \item Eclipse neustarten lassen (Klick auf \menu{Yes})
  94. \end{itemize}
  95. \end{frame}
  96. \subsection{Checkstyle: Einrichten}
  97. \begin{frame}{Checkstyle: Einrichten}
  98. \begin{itemize}
  99. \item "`Checkstyle.xml"' herunterladen: \href{https://raw.github.com/MartinThoma/prog-ws1213/master/Dokumente/whitespace-checks.xml}{tinyurl.com/checkstyle-ws}
  100. \end{itemize}
  101. Bei jeden Java-Projekt wieder:
  102. \begin{itemize}
  103. \item \menu{Project > Properties > Checkstyle}
  104. \item Check "`checkstyle active for this project"'
  105. \item Reiter \menu{Local Check Configurations}
  106. \item \menu{New\dots}
  107. \begin{itemize}
  108. \item Type: "`Internal Configuration"'
  109. \item Name: "`KIT Checkstyle"'
  110. \item \menu{Import} $\rightarrow$ "`checkstyle.xml"' auswählen
  111. \item \menu{OK} klicken
  112. \end{itemize}
  113. \item Reiter \menu{Main} auswählen
  114. \item "`KIT Checkstyle - (Local)"' auswählen
  115. \item \menu{OK} klicken
  116. \item "`The project needs to be rebuild [...]"' $\rightarrow$ \menu{Yes}
  117. \end{itemize}
  118. \end{frame}
  119. \begin{frame}{Checkstyle: Einrichten}
  120. Nochmal mit Screenshots: \href{http://martin-thoma.com/checkstyle/}{martin-thoma.com/checkstyle}
  121. \end{frame}
  122. \section{Arrays}
  123. \subsection{Was sind Arrays ...}
  124. \begin{frame}{Was sind Arrays ...}
  125. ... und wozu braucht man sie?
  126. \begin{itemize}
  127. \item viele Werte in einem Variablennamen
  128. \item Elemente haben alle den selben Typ
  129. \item[$\Rightarrow$] zu jeden Typen gibt es Arrays
  130. \end{itemize}
  131. \end{frame}
  132. \subsection{Visualisierung}
  133. \begin{frame}{Visualisierung}
  134. \includegraphics[height=30mm]{array.pdf}
  135. \begin{itemize}
  136. \item Indices: 0, 1, 2, 3, 4
  137. \item Länge des Arrays: 5
  138. \item Erstes Element: d
  139. \end{itemize}
  140. \end{frame}
  141. \subsection{Minimalbeispiele}
  142. \begin{frame}{Minimalbeispiele}
  143. Deklarieren:
  144. \inputminted[linenos=false, numbersep=5pt, tabsize=4,firstline=1, lastline=1, fontsize=\small]{java}{singleLines.java}
  145. \vspace{5 mm}
  146. Deklarieren und instanziieren:
  147. \inputminted[linenos=false, numbersep=5pt, tabsize=4,firstline=2, lastline=2, fontsize=\small]{java}{singleLines.java}
  148. \vspace{5 mm}
  149. Deklarieren und initialisieren:
  150. \inputminted[linenos=false, numbersep=5pt, tabsize=4,firstline=3, lastline=4, fontsize=\small]{java}{singleLines.java}
  151. \end{frame}
  152. \subsection{Konvention}
  153. \begin{frame}{Konvention}
  154. \begin{itemize}
  155. \item[(A)] Geht, soll man aber nicht machen:
  156. \inputminted[linenos=false, numbersep=5pt, tabsize=4,firstline=6, lastline=6, fontsize=\small]{java}{singleLines.java}
  157. \item[(B)] So ist es gut:
  158. \inputminted[linenos=false, numbersep=5pt, tabsize=4,firstline=5, lastline=5, fontsize=\small]{java}{singleLines.java}
  159. \end{itemize}
  160. \only<2->{
  161. Warum ist Variante (B) besser?
  162. \begin{itemize}
  163. \item<3-> Der Entwicker kann sofort den Typen sehen
  164. \item<4-> \href{http://stackoverflow.com/q/13175193/562769}{Konvention}
  165. \end{itemize}
  166. }
  167. \end{frame}
  168. \subsection{Ressourcen}
  169. \begin{frame}{Ressourcen}
  170. \begin{itemize}
  171. \item \href{http://docs.oracle.com/javase/specs/jls/se7/jls7.pdf}{JLS 7}: Ab S. 291
  172. \item \href{http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html}{Java 7 API}
  173. \item \href{http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html}{Java Tutorial}
  174. \end{itemize}
  175. \end{frame}
  176. \section{Random Style Guide}
  177. \subsection{Antipattern: Yoda-Conditions}
  178. \begin{frame}{Antipattern: Yoda-Conditions}
  179. \includegraphics[width=60mm]{yoda-condition.png}\\
  180. \begin{quote}
  181. Using \myCode{if(constant == variable)} instead of
  182. \myCode{if(variable == constant)}, like \myCode{if(4 == foo)}.
  183. Because it's like saying ``if blue is the sky'' or ``if tall
  184. is the man''.
  185. \end{quote}
  186. Source: \href{http://www.codinghorror.com/blog/2012/07/new-programming-jargon.html}{codinghorror.com}\\
  187. Bitte nicht machen!
  188. \end{frame}
  189. \subsection{Deklarationen}
  190. \begin{frame}{Deklarationen}
  191. \begin{itemize}
  192. \item 1 $\frac{\text{Deklaration}}{\text{Zeile}}$\\
  193. \vspace{4mm}
  194. Nicht so:
  195. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=19, lastline=19]{java}{JavaDoc.java}
  196. \vspace{4mm}
  197. Sondern so:
  198. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=21, lastline=22]{java}{JavaDoc.java}
  199. \item Variablen immer dort initialisieren, wo sie deklariert werden\\
  200. Ausnahme: Initialisierungswert ist von vorherigen Berechnungen abhängig
  201. \end{itemize}
  202. \end{frame}
  203. \subsection{Antipattern: Stringly Typed}
  204. \begin{frame}{Antipattern: Stringly Typed}
  205. \begin{wrapfigure}{r}{3.1cm}
  206. \includegraphics[width=3cm]{stringly-typed.jpg}
  207. \end{wrapfigure}
  208. Used to describe an implementation that \\
  209. needlessly relies on strings.\\
  210. \vspace{2cm}
  211. Excessively stringly typed code is usually\\
  212. a pain to understand and detonates at \\
  213. runtime with errors that the compiler would \\
  214. normally find.
  215. Source: \href{http://www.codinghorror.com/blog/2012/07/new-programming-jargon.html}{codinghorror.com}
  216. \end{frame}
  217. \section{Getter/Setter}
  218. \subsection{Allgemeines}
  219. \begin{frame}{Allgemeines}
  220. Getter und Setter sind \dots
  221. \begin{itemize}[<+->]
  222. \item \dots Methoden
  223. \item \dots ein "`Interface"'
  224. \item \dots \href{http://de.wikipedia.org/wiki/Zugriffsfunktion}{Zugriffsfunktionen} zur Abfrage und Änderung
  225. \end{itemize}
  226. \end{frame}
  227. \subsection{Warum Getter/Setter?}
  228. \begin{frame}{Warum Getter/Setter?}
  229. Vorteile von Getter und Setter-Methoden sind \dots
  230. \begin{itemize}[<+->]
  231. \item \dots (später auftretende) Nebenbedingungen beim get / set
  232. \item \dots Validierung bei set
  233. \item \dots Verbergen der Implementierung $\rightarrow$ Geheimnisprinzip
  234. \end{itemize}
  235. \end{frame}
  236. \subsection{Modifikatoren}
  237. \begin{frame}{Modifikatoren}
  238. \begin{block}{Zugriffsmodifikatoren}
  239. Mit Hilfe von \textbf{Zugriffsmodifikatoren} (access modifiers) lassen sich die
  240. \textbf{Sichtbarkeiten} von Programmteilen regeln:
  241. \begin{itemize}
  242. \item \textbf{public} Element: Element ist für alle Klassen sichtbar
  243. \item<2-> \textbf{private} Element: Element ist nur innerhalb seiner Klasse sichtbar
  244. \item<3-> \textbf{protected} Element: Element ist nur innerhalb seiner Klasse, deren
  245. Subklassen und allen Klassen im selben Paket sichtbar
  246. $\rightarrow$ später mehr dazu
  247. \item<4-> \textbf{kein Modifier}: Element ist nur innerhalb seiner Klasse und der
  248. Klassen im selben Paket sichtbar
  249. $\rightarrow$ hier nicht so wichtig
  250. \end{itemize}
  251. \end{block}
  252. \only<5->{
  253. Ab nun:
  254. \begin{itemize}
  255. \item Attribute sind (fast) immer private
  256. \item Methoden können auch private sein
  257. \end{itemize}
  258. }
  259. \end{frame}
  260. \subsection{Modifikatoren: Beispiel}
  261. \begin{frame}{Modifikatoren: Beispiel}
  262. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, frame=lines, label=Student.java, firstline=1, lastline=10]{java}{Visibility.java}
  263. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, frame=lines, label=Main.java, firstline=12, lastline=19]{java}{Visibility.java}
  264. \end{frame}
  265. \subsection{Modifikatoren: Beispiel}
  266. \begin{frame}{Modifikatoren: Beispiel}
  267. \begin{alertblock}{Neues Problem}
  268. Jetzt können wir Namen, Semester und Matrikelnummer von außen gar nicht mehr
  269. auslesen!
  270. \end{alertblock}
  271. \only<2->{
  272. \begin{block}{Auch hierzu gibt es aber eine Lösung:}
  273. Mit \textbf{getter-Methoden} kann man den Lesezugriff auf Attribute
  274. wieder erlauben.
  275. \end{block}
  276. }
  277. \end{frame}
  278. \subsection{Modifikatoren: Beispiel}
  279. \begin{frame}{Modifikatoren: Beispiel}
  280. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, frame=lines, label=Student.java, firstline=21, lastline=30]{java}{Visibility.java}
  281. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, frame=lines, label=Student.java, firstline=32, lastline=39]{java}{Visibility.java}
  282. \end{frame}
  283. \subsection{Eclipse-Tipp}
  284. \begin{frame}{Eclipse-Tipp}
  285. \menu{Source > Generate Getters and Setters\dots}\\
  286. \includegraphics[width=62mm]{eclipse-getter-setter.png}
  287. \end{frame}
  288. \section{Konventionen}
  289. \subsection{Kommentare}
  290. \begin{frame}{Kommentare}
  291. Typen:
  292. \begin{itemize}
  293. \item Implementierungskommentare: \item \myCode{/* blah */} und \myCode{// blah}
  294. \item Dokumentationskommentare: \myCode{/** blah */}
  295. \end{itemize}
  296. \begin{quote}
  297. Comments should not be enclosed in large boxes drawn with asterisks or other characters.
  298. Comments should never include special characters such as form-feed and backspace.
  299. \end{quote}
  300. Source: \href{http://www.oracle.com/technetwork/java/codeconventions-150003.pdf}{Java Code Conventions}, S. 7 - 9
  301. \end{frame}
  302. \subsection{JavaDoc: Verwendung}
  303. \begin{frame}{JavaDoc: Verwendung}
  304. Soll fast überall benutzt werden:
  305. \begin{itemize}
  306. \item Über jeder Klasse
  307. \item Über jedem Attribut
  308. \item Über jeder Methode (mit Annotations)
  309. \end{itemize}
  310. \end{frame}
  311. \subsection{JavaDoc: Annotations}
  312. \begin{frame}{JavaDoc: Annotations}
  313. Es gibt folgende Annotations
  314. \begin{itemize}
  315. \item \myCode{@param}: Für die Parameter aller Methoden
  316. \item \myCode{@return}: Für den Rückgabewert vom Methoden
  317. \item \myCode{@author}: Nur für \myCode{class} und \myCode{interface}, erforderlich
  318. \end{itemize}
  319. \vspace{0.5cm}
  320. Weitere Annotations:
  321. \begin{itemize}
  322. \item \myCode{@throws}: Angabe möglicher Fehlermeldungen
  323. \end{itemize}
  324. \end{frame}
  325. \subsection{JavaDoc: Negativ-Beispiel}
  326. \begin{frame}{JavaDoc: Negativ-Beispiel}
  327. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=1, lastline=6]{java}{JavaDoc.java}
  328. \begin{itemize}
  329. \item Was ist hier schlecht?
  330. \item Wie könnte man es verbessern?
  331. \end{itemize}
  332. \end{frame}
  333. \subsection{JavaDoc: Positiv-Beispiel}
  334. \begin{frame}{JavaDoc: Positiv-Beispiel}
  335. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=9, lastline=16]{java}{JavaDoc.java}
  336. \end{frame}
  337. \section{Kontrollstrukturen}
  338. \subsection{if-Abfragen}
  339. \begin{frame}{if-Abfragen}
  340. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=1, lastline=5]{java}{Kontrollstrukturen.java}
  341. KEINE Schleife! $\rightarrow$ \href{http://if-schleife.de/}{if-schleife.de}
  342. \end{frame}
  343. \subsection{if-Abfragen: else if}
  344. \begin{frame}{if-Abfragen: else if}
  345. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=7, lastline=13]{java}{Kontrollstrukturen.java}
  346. \end{frame}
  347. \subsection{if-Abfragen: Quiz}
  348. \begin{frame}{if-Abfragen: Quiz}
  349. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, frame=lines]{java}{QuizIf.java}
  350. \end{frame}
  351. \subsection{for-Schleifen}
  352. \begin{frame}{for-Schleifen}
  353. \begin{itemize}
  354. \item Syntax: \myCode{for ([INITIALISIERUNG; BEDINGUNG; UPDATE]) \{ \dots \}}
  355. \end{itemize}
  356. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=39, lastline=41]{java}{Kontrollstrukturen.java}
  357. \end{frame}
  358. \subsection{while-Schleifen}
  359. \begin{frame}{while-Schleifen}
  360. \begin{itemize}
  361. \item Syntax: \myCode{while ([BEDINGUNG]) \{ \dots \}}
  362. \end{itemize}
  363. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=35, lastline=37]{java}{Kontrollstrukturen.java}
  364. \end{frame}
  365. \subsection{do-while-Schleifen}
  366. \begin{frame}{do-while-Schleifen}
  367. \begin{itemize}
  368. \item Syntax: \myCode{do \{ \dots \} while ([BEDINGUNG]);}
  369. \item Wo ist der Unterschied zu \myCode{while}?
  370. \end{itemize}
  371. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=43, lastline=49]{java}{Kontrollstrukturen.java}
  372. \end{frame}
  373. \subsection{Switch-Anweisung}
  374. \begin{frame}{Switch-Anweisung}
  375. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, frame=lines, firstline=15, lastline=33, label=World.java]{java}{Kontrollstrukturen.java}
  376. \end{frame}
  377. \section{Praxis}
  378. \subsection{Praxis}
  379. \begin{frame}{Praxis}
  380. Falls noch Zeit bleibt \dots
  381. \end{frame}
  382. \section{Abspann}
  383. \subsection{Kommende Tutorien}
  384. \begin{frame}{Kommende Tutorien}
  385. \begin{itemize}
  386. \item[11.] 05.11.2012
  387. \item[10.] 12.11.2012
  388. \item[9.] 19.11.2012
  389. \item[8.] 26.11.2012
  390. \item[7.] 03.12.2012
  391. \item[6.] 10.12.2012
  392. \item[5.] 17.12.2012: Video "`Library"' zeigen
  393. \item[-] 24.12.2012: Heiligabend - \href{http://www.fmc.uni-karlsruhe.de/faq/wann-sind-die-weihnachtsferien}{Kein Tutorium}
  394. \item[-] 31.12.2012: Silvester - Kein Tutorium
  395. \item[4.] 07.01.2013
  396. \item[3.] 14.01.2013
  397. \item[2.] 21.01.2013
  398. \item[1.] 28.01.2013
  399. \item[0.] 04.02.2013
  400. \item[-] 10.02.2013: Ende der Vorlesungszeit des WS 2012/2013 (\href{http://www.kit.edu/studieren/2873.php}{Quelle})
  401. \end{itemize}
  402. \end{frame}
  403. \framedgraphic{Vielen Dank für eure Aufmerksamkeit!}{../images/geekandpoke-2010-10.jpg}
  404. \end{document}