tutorium-08.tex 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. \documentclass[usepdftitle=false,hyperref={pdfpagelabels=false}]{beamer}
  2. \usepackage{../templates/myStyle}
  3. \begin{document}
  4. \title{\titleText}
  5. \subtitle{JUnit, Vererbung, toString(), Interfaces}
  6. \author{\tutor}
  7. \date{\today}
  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: Vererbung}
  19. \begin{minipage}[b]{0.45\linewidth}
  20. \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Animal.java, frame=lines]{java}{Animal.java}
  21. \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Jungle.java, frame=lines]{java}{Jungle.java}
  22. \end{minipage}
  23. \hspace{0.5cm}
  24. \begin{minipage}[b]{0.45\linewidth}
  25. \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Tiger.java, frame=lines]{java}{Tiger.java}
  26. \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Cat.java, frame=lines]{java}{Cat.java}
  27. \begin{itemize}
  28. \item Gibt es einen Compiler-Fehler?
  29. \item Gibt es einen Laufzeit-Fehler?
  30. \item Gibt es eine Ausgabe? Welche?
  31. \end{itemize}
  32. \end{minipage}
  33. \end{frame}
  34. \begin{frame}{Quiz: Antwort}
  35. \begin{minipage}[b]{0.45\linewidth}
  36. \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Animal.java, frame=lines]{java}{Animal.java}
  37. \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Jungle.java, frame=lines]{java}{Jungle.java}
  38. \end{minipage}
  39. \hspace{0.5cm}
  40. \begin{minipage}[b]{0.45\linewidth}
  41. \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Tiger.java, frame=lines]{java}{Tiger.java}
  42. \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Cat.java, frame=lines]{java}{Cat.java}
  43. \begin{itemize}
  44. \item null
  45. \item Cat:null
  46. \item Cat:null
  47. \item null
  48. \item null
  49. \end{itemize}
  50. \end{minipage}
  51. \end{frame}
  52. \begin{frame}{Erklärung}
  53. \begin{itemize}
  54. \item Zeile 2 und 3: \myCode{sound} im Konstruktor von \myCode{Cat} ist eine
  55. lokale Variable, kein Attribut
  56. \item In Java werden nur Methoden vererbt
  57. \begin{itemize}
  58. \item Klassen: Signatur und Implementierung
  59. \item Interfaces: Nur Signatur
  60. \end{itemize}
  61. \end{itemize}
  62. Mehr dazu später
  63. \end{frame}
  64. \section{JUnit}
  65. \subsection{Allgemeines}
  66. \begin{frame}{JUnit: Allgemeines}
  67. JUnit \dots
  68. \begin{itemize}[<+->]
  69. \item ist ein Java-Paket
  70. \item ist ein Framework zum Testen von Java-Programmen
  71. \item ist SEHR verbreitet
  72. \item dient der Erstellung von Unit-Tests
  73. \item wurde von Erich Gamma und Kent Beck erstellt
  74. \end{itemize}
  75. \end{frame}
  76. \subsection{Beispiel}
  77. \begin{frame}{JUnit: Beispiel}
  78. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, label=LevenshteinCompilationTest.java, frame=lines]{java}{LevenshteinCompilationTest.java}
  79. \end{frame}
  80. \framedgraphic{Eclipse: JUnit}{Eclipse-JUnit-new-test.png}
  81. \framedgraphic{Eclipse: JUnit}{Eclipse-JUnit-project-explorer.png}
  82. \framedgraphic{Eclipse: JUnit}{Eclipse-JUnit-execution-button.png}
  83. \framedgraphic{Eclipse: JUnit}{Eclipse-JUnit-execution-result.png}
  84. \framedgraphic{Eclipse: JUnit}{Eclipse-JUnit-detailed-results.png}
  85. \framedgraphic{Eclipse: JUnit}{Eclipse-JUnit-new-filter-trace.png}
  86. \subsection{Fehler}
  87. \begin{frame}{JUnit: Fehler}
  88. \begin{alertblock}{Fehler}
  89. The import org.junit cannot be resolved
  90. \end{alertblock}
  91. \begin{block}{Lösung}
  92. \begin{itemize}
  93. \item \href{https://github.com/KentBeck/junit/downloads}{Hier} junit-4.11.jar mit Hamcrest herunterladen
  94. \item \menu{Project > Properties > Java Build Path > Libraries > Add External JARs...}
  95. \item \texttt{junit-4.11.jar} auswählen
  96. \item Auf OK klicken
  97. \end{itemize}
  98. \end{block}
  99. \end{frame}
  100. \section{Vererbung}
  101. \subsection{Allgemeines}
  102. \begin{frame}{Allgemeines}
  103. Vererbung \dots
  104. \begin{itemize}[<+->]
  105. \item ist ein Schlüsselelement der OOP
  106. \item ist in Java eingeschränkt: Eine Klasse erbt in Java
  107. von genau einer anderen Klasse
  108. \begin{itemize}
  109. \item alle Klassen erben von \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html}{Object}
  110. \end{itemize}
  111. \item dient der Spezialisierung
  112. \end{itemize}
  113. \end{frame}
  114. \begin{frame}{Beispiel}
  115. Wo kann Vererbung nützlich sein?
  116. \begin{itemize}[<+->]
  117. \item Oberklasse Liste, Unterklassen SinglyLinkedList und
  118. DoubleLinkedList
  119. \begin{itemize}
  120. \item \myCode{contains()} ist gleich
  121. \item \myCode{append()} ist unterschiedlich
  122. \item \myCode{remove()} ist unterschiedlich
  123. \end{itemize}
  124. \item Oberklasse Animal, Unterklassen Säugetier, Tiger, Schlange, Bär, \dots
  125. \item Brettspiele:
  126. \begin{itemize}
  127. \item Klasse Spielbrett; Unterklassen: Schachbrett, Dame-Brett, Mensch-ärgere-dich-nicht
  128. \item Klasse Spielfigur; Unterklassen: Bauer, Dame, Springer, Turm
  129. \item Klasse Spiellogik; Unterklassen: DameLogik, SchachLogik
  130. \end{itemize}
  131. \end{itemize}
  132. \end{frame}
  133. \framedgraphic{Beispiel}{Klassendiagramm.pdf}
  134. \begin{frame}{Vererbung: Beispiel in Java}
  135. \begin{minipage}[b]{0.45\linewidth}
  136. \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Animal.java, frame=lines]{java}{Animal.java}
  137. \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Jungle.java, frame=lines]{java}{Jungle.java}
  138. \end{minipage}
  139. \hspace{0.5cm}
  140. \begin{minipage}[b]{0.45\linewidth}
  141. \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Tiger.java, frame=lines]{java}{Tiger.java}
  142. \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Cat.java, frame=lines]{java}{Cat.java}
  143. \end{minipage}
  144. \end{frame}
  145. \begin{frame}{Allgemeines}
  146. \begin{block}{\href{http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html\#jls-8.4.8}{JLS 8.4.8}}
  147. A class C inherits from its direct superclass and direct
  148. superinterfaces all abstract and non-abstract methods of the
  149. superclass and superinterfaces that are public, protected, or
  150. declared with default access in the same package as C, and are
  151. neither overridden (§8.4.8.1) nor hidden (§8.4.8.2) by a
  152. declaration in the class.
  153. \end{block}
  154. \end{frame}
  155. \section{toString()}
  156. \subsection{Allgemeines}
  157. \begin{frame}{toString()}
  158. \begin{itemize}[<+->]
  159. \item Jedes Objekt hat eine Methode \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html\#toString()}{toString()}
  160. \item Diese wird von \myCode{Object} vererbt
  161. \item und \st{kann} sollte überschrieben werden
  162. \end{itemize}
  163. \end{frame}
  164. \begin{frame}{Information aus den Javadoc}
  165. Wie sollte toString() aussehen?
  166. \begin{itemize}
  167. \item Eine kurze textuelle Repräsentation des Objekts
  168. \item Soll von Menschen gelesen werden
  169. \item Per Standard: \myCode{getClass().getName() + '@' + Integer.toHexString(hashCode())}
  170. \end{itemize}
  171. \end{frame}
  172. \begin{frame}{Beispiel}
  173. \inputminted[linenos=true, numbersep=5pt, tabsize=4, label=Node.java, frame=lines]{java}{Node.java}
  174. \end{frame}
  175. \section{Interfaces}
  176. \subsection{Allgemeines}
  177. \begin{frame}{Interfaces: Allgemeines}
  178. \begin{itemize}[<+->]
  179. \item auf Deutsch: Schnittstelle
  180. \item es werden nur Methodensignaturen vererbt
  181. \item die Implementierung muss komplett selbst durchgeführt werden!
  182. \item wird wie Klassen in einer eigenen "`MeinInterface.java"' Datei gespeichert
  183. \end{itemize}
  184. \pause[\thebeamerpauses]
  185. \begin{block}{Namenskonvention}
  186. Der Name einer Schnittstelle endet oft mit -able.
  187. \end{block}
  188. \end{frame}
  189. \subsection{Beispiel}
  190. \begin{frame}{Interfaces: Beispiel}
  191. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, label=Bicycle.java, frame=lines]{java}{Bicycle.java}
  192. \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, label=ACMEBicycle.java, frame=lines]{java}{ACMEBicycle.java}
  193. \small{Quelle: \href{http://docs.oracle.com/javase/tutorial/java/concepts/interface.html}{docs.oracle.com}: What Is an Interface?}\\
  194. Weitere Informationen: \href{http://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html}{docs.oracle.com}: Interfaces
  195. \end{frame}
  196. \subsection{Real World Examples}
  197. \begin{frame}{Real World Examples}
  198. \begin{itemize}
  199. \item \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html}{Comperable}: Vergleichen mit \myCode{<}
  200. \item \href{http://docs.oracle.com/javase/7/docs/api/java/util/List.html}{List}: Viele Listenoperationen
  201. \item \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html}{Iterable}: foreach
  202. \item \href{http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html}{Serializable}: Speichern / verschicken übers Netzwerk
  203. \item \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html}{Runnable}: Multithreading
  204. \end{itemize}
  205. \end{frame}
  206. \subsection{Weitere Informationen}
  207. \begin{frame}{Interfaces: Weitere Informationen}
  208. \begin{itemize}
  209. \item \href{http://docs.oracle.com/javase/specs/jls/se7/html/jls-9.html}{JLS 7}
  210. \item \href{http://openbook.galileodesign.de/javainsel5/javainsel06_010.htm}{Galileo openbook}
  211. \end{itemize}
  212. \end{frame}
  213. \section{Nachbesprechung ÜB 3}
  214. \subsection{Allgemeines}
  215. \begin{frame}{Allgemeines}
  216. Lösungen sind \href{https://github.com/MartinThoma/prog-ws1213/tree/master/Blatt-03}{hier} zu finden.
  217. \end{frame}
  218. \begin{frame}{Allgemeines}
  219. \begin{itemize}[<+->]
  220. \item \myCode{\href{http://docs.oracle.com/javase/7/docs/api/java/lang/String.html\#charAt(int)}{char charAt(int index)}}:
  221. Returns the char value at the specified index.
  222. \item \myCode{\href{http://docs.oracle.com/javase/7/docs/api/java/lang/String.html\#matches(java.lang.String)}{public boolean matches(String regex)}}
  223. Tells whether or not this string matches the given regular expression.
  224. \item \myCode{\href{http://docs.oracle.com/javase/7/docs/api/java/lang/String.html\#substring(int, int)}{String substring(int beginIndex,
  225. int endIndex)}} Returns a new string that is a substring of this string.
  226. \end{itemize}
  227. \pause[\thebeamerpauses]
  228. \begin{block}{Eclipse-Tipp}
  229. Wenn Eclipse euch im Projektordner einen Fehler anzeigt, aber
  230. keine Datei fehlerhaft ist, solltet ihr mal einen
  231. Blick in \menu{Window > Show View > Problem} werfen.
  232. \end{block}
  233. \end{frame}
  234. \section{Abspann}
  235. \subsection{Kommende Tutorien}
  236. \begin{frame}{Kommende Tutorien}
  237. \begin{itemize}
  238. \item[5.] 17.12.2012: Generics?, Video "`Library"' zeigen
  239. \item[-] 24.12.2012: Heiligabend - \href{http://www.fmc.uni-karlsruhe.de/faq/wann-sind-die-weihnachtsferien}{Kein Tutorium}
  240. \item[-] 31.12.2012: Silvester - Kein Tutorium
  241. \item[4.] 07.01.2013
  242. \item[3.] 14.01.2013
  243. \item[2.] 21.01.2013
  244. \item[1.] 28.01.2013: Abschlussprüfunsvorbereitung
  245. \item[0.] 04.02.2013: Abschlussprüfunsvorbereitung
  246. \item[-] 10.02.2013: Ende der Vorlesungszeit des WS 2012/2013 (\href{http://www.kit.edu/studieren/2873.php}{Quelle})
  247. \end{itemize}
  248. \end{frame}
  249. \framedgraphic{Beware of physicist fathers}{../images/Beware-of-physicist-fathers.png}
  250. \end{document}