📚 The CoCalc Library - books, templates and other resources
cocalc-examples / martinthoma-latex-examples / presentations / Programmieren-Tutorium / Tutorium-08 / tutorium-08.tex
132940 viewsLicense: OTHER
\documentclass[usepdftitle=false,hyperref={pdfpagelabels=false}]{beamer}1\usepackage{../templates/myStyle}23\begin{document}4\title{\titleText}5\subtitle{JUnit, Vererbung, toString(), Interfaces}6\author{\tutor}7\date{\today}8\subject{Programmieren}910\frame{\titlepage}1112\frame{13\frametitle{Inhaltsverzeichnis}14\setcounter{tocdepth}{1}15\tableofcontents16\setcounter{tocdepth}{2}17}1819\section{Einleitung}20\subsection{Quiz}21\begin{frame}{Quiz: Vererbung}22\begin{minipage}[b]{0.45\linewidth}23\inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Animal.java, frame=lines]{java}{Animal.java}24\inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Jungle.java, frame=lines]{java}{Jungle.java}25\end{minipage}26\hspace{0.5cm}27\begin{minipage}[b]{0.45\linewidth}28\inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Tiger.java, frame=lines]{java}{Tiger.java}29\inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Cat.java, frame=lines]{java}{Cat.java}30\begin{itemize}31\item Gibt es einen Compiler-Fehler?32\item Gibt es einen Laufzeit-Fehler?33\item Gibt es eine Ausgabe? Welche?34\end{itemize}35\end{minipage}36\end{frame}3738\begin{frame}{Quiz: Antwort}39\begin{minipage}[b]{0.45\linewidth}40\inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Animal.java, frame=lines]{java}{Animal.java}41\inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Jungle.java, frame=lines]{java}{Jungle.java}42\end{minipage}43\hspace{0.5cm}44\begin{minipage}[b]{0.45\linewidth}45\inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Tiger.java, frame=lines]{java}{Tiger.java}46\inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Cat.java, frame=lines]{java}{Cat.java}47\begin{itemize}48\item null49\item Cat:null50\item Cat:null51\item null52\item null53\end{itemize}54\end{minipage}55\end{frame}5657\begin{frame}{Erklärung}58\begin{itemize}59\item Zeile 2 und 3: \myCode{sound} im Konstruktor von \myCode{Cat} ist eine60lokale Variable, kein Attribut61\item In Java werden nur Methoden vererbt62\begin{itemize}63\item Klassen: Signatur und Implementierung64\item Interfaces: Nur Signatur65\end{itemize}66\end{itemize}6768Mehr dazu später69\end{frame}7071\section{JUnit}72\subsection{Allgemeines}73\begin{frame}{JUnit: Allgemeines}74JUnit \dots75\begin{itemize}[<+->]76\item ist ein Java-Paket77\item ist ein Framework zum Testen von Java-Programmen78\item ist SEHR verbreitet79\item dient der Erstellung von Unit-Tests80\item wurde von Erich Gamma und Kent Beck erstellt81\end{itemize}82\end{frame}8384\subsection{Beispiel}85\begin{frame}{JUnit: Beispiel}86\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, label=LevenshteinCompilationTest.java, frame=lines]{java}{LevenshteinCompilationTest.java}87\end{frame}8889\framedgraphic{Eclipse: JUnit}{Eclipse-JUnit-new-test.png}90\framedgraphic{Eclipse: JUnit}{Eclipse-JUnit-project-explorer.png}91\framedgraphic{Eclipse: JUnit}{Eclipse-JUnit-execution-button.png}92\framedgraphic{Eclipse: JUnit}{Eclipse-JUnit-execution-result.png}93\framedgraphic{Eclipse: JUnit}{Eclipse-JUnit-detailed-results.png}94\framedgraphic{Eclipse: JUnit}{Eclipse-JUnit-new-filter-trace.png}9596\subsection{Fehler}97\begin{frame}{JUnit: Fehler}98\begin{alertblock}{Fehler}99The import org.junit cannot be resolved100\end{alertblock}101\begin{block}{Lösung}102\begin{itemize}103\item \href{https://github.com/KentBeck/junit/downloads}{Hier} junit-4.11.jar mit Hamcrest herunterladen104\item \menu{Project > Properties > Java Build Path > Libraries > Add External JARs...}105\item \texttt{junit-4.11.jar} auswählen106\item Auf OK klicken107\end{itemize}108\end{block}109\end{frame}110111\section{Vererbung}112\subsection{Allgemeines}113\begin{frame}{Allgemeines}114Vererbung \dots115\begin{itemize}[<+->]116\item ist ein Schlüsselelement der OOP117\item ist in Java eingeschränkt: Eine Klasse erbt in Java118von genau einer anderen Klasse119\begin{itemize}120\item alle Klassen erben von \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html}{Object}121\end{itemize}122\item dient der Spezialisierung123\end{itemize}124\end{frame}125126\begin{frame}{Beispiel}127Wo kann Vererbung nützlich sein?128\begin{itemize}[<+->]129\item Oberklasse Liste, Unterklassen SinglyLinkedList und130DoubleLinkedList131\begin{itemize}132\item \myCode{contains()} ist gleich133\item \myCode{append()} ist unterschiedlich134\item \myCode{remove()} ist unterschiedlich135\end{itemize}136\item Oberklasse Animal, Unterklassen Säugetier, Tiger, Schlange, Bär, \dots137\item Brettspiele:138\begin{itemize}139\item Klasse Spielbrett; Unterklassen: Schachbrett, Dame-Brett, Mensch-ärgere-dich-nicht140\item Klasse Spielfigur; Unterklassen: Bauer, Dame, Springer, Turm141\item Klasse Spiellogik; Unterklassen: DameLogik, SchachLogik142\end{itemize}143\end{itemize}144\end{frame}145146\framedgraphic{Beispiel}{Klassendiagramm.pdf}147148\begin{frame}{Vererbung: Beispiel in Java}149\begin{minipage}[b]{0.45\linewidth}150\inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Animal.java, frame=lines]{java}{Animal.java}151\inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Jungle.java, frame=lines]{java}{Jungle.java}152\end{minipage}153\hspace{0.5cm}154\begin{minipage}[b]{0.45\linewidth}155\inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Tiger.java, frame=lines]{java}{Tiger.java}156\inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Cat.java, frame=lines]{java}{Cat.java}157\end{minipage}158\end{frame}159160\begin{frame}{Allgemeines}161\begin{block}{\href{http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html\#jls-8.4.8}{JLS 8.4.8}}162A class C inherits from its direct superclass and direct163superinterfaces all abstract and non-abstract methods of the164superclass and superinterfaces that are public, protected, or165declared with default access in the same package as C, and are166neither overridden (§8.4.8.1) nor hidden (§8.4.8.2) by a167declaration in the class.168\end{block}169\end{frame}170171\section{toString()}172\subsection{Allgemeines}173\begin{frame}{toString()}174\begin{itemize}[<+->]175\item Jedes Objekt hat eine Methode \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html\#toString()}{toString()}176\item Diese wird von \myCode{Object} vererbt177\item und \st{kann} sollte überschrieben werden178\end{itemize}179\end{frame}180181\begin{frame}{Information aus den Javadoc}182Wie sollte toString() aussehen?183\begin{itemize}184\item Eine kurze textuelle Repräsentation des Objekts185\item Soll von Menschen gelesen werden186\item Per Standard: \myCode{getClass().getName() + '@' + Integer.toHexString(hashCode())}187\end{itemize}188\end{frame}189190\begin{frame}{Beispiel}191\inputminted[linenos=true, numbersep=5pt, tabsize=4, label=Node.java, frame=lines]{java}{Node.java}192\end{frame}193194\section{Interfaces}195\subsection{Allgemeines}196\begin{frame}{Interfaces: Allgemeines}197\begin{itemize}[<+->]198\item auf Deutsch: Schnittstelle199\item es werden nur Methodensignaturen vererbt200\item die Implementierung muss komplett selbst durchgeführt werden!201\item wird wie Klassen in einer eigenen "`MeinInterface.java"' Datei gespeichert202\end{itemize}203\pause[\thebeamerpauses]204\begin{block}{Namenskonvention}205Der Name einer Schnittstelle endet oft mit -able.206\end{block}207\end{frame}208209\subsection{Beispiel}210\begin{frame}{Interfaces: Beispiel}211\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, label=Bicycle.java, frame=lines]{java}{Bicycle.java}212\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, label=ACMEBicycle.java, frame=lines]{java}{ACMEBicycle.java}213\small{Quelle: \href{http://docs.oracle.com/javase/tutorial/java/concepts/interface.html}{docs.oracle.com}: What Is an Interface?}\\214Weitere Informationen: \href{http://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html}{docs.oracle.com}: Interfaces215\end{frame}216217\subsection{Real World Examples}218\begin{frame}{Real World Examples}219\begin{itemize}220\item \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html}{Comperable}: Vergleichen mit \myCode{<}221\item \href{http://docs.oracle.com/javase/7/docs/api/java/util/List.html}{List}: Viele Listenoperationen222\item \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html}{Iterable}: foreach223\item \href{http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html}{Serializable}: Speichern / verschicken übers Netzwerk224\item \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html}{Runnable}: Multithreading225\end{itemize}226\end{frame}227228\subsection{Weitere Informationen}229\begin{frame}{Interfaces: Weitere Informationen}230\begin{itemize}231\item \href{http://docs.oracle.com/javase/specs/jls/se7/html/jls-9.html}{JLS 7}232\item \href{http://openbook.galileodesign.de/javainsel5/javainsel06_010.htm}{Galileo openbook}233\end{itemize}234\end{frame}235236\section{Nachbesprechung ÜB 3}237\subsection{Allgemeines}238\begin{frame}{Allgemeines}239Lösungen sind \href{https://github.com/MartinThoma/prog-ws1213/tree/master/Blatt-03}{hier} zu finden.240\end{frame}241\begin{frame}{Allgemeines}242\begin{itemize}[<+->]243\item \myCode{\href{http://docs.oracle.com/javase/7/docs/api/java/lang/String.html\#charAt(int)}{char charAt(int index)}}:244Returns the char value at the specified index.245\item \myCode{\href{http://docs.oracle.com/javase/7/docs/api/java/lang/String.html\#matches(java.lang.String)}{public boolean matches(String regex)}}246Tells whether or not this string matches the given regular expression.247\item \myCode{\href{http://docs.oracle.com/javase/7/docs/api/java/lang/String.html\#substring(int, int)}{String substring(int beginIndex,248int endIndex)}} Returns a new string that is a substring of this string.249\end{itemize}250\pause[\thebeamerpauses]251\begin{block}{Eclipse-Tipp}252Wenn Eclipse euch im Projektordner einen Fehler anzeigt, aber253keine Datei fehlerhaft ist, solltet ihr mal einen254Blick in \menu{Window > Show View > Problem} werfen.255\end{block}256\end{frame}257258\section{Abspann}259\subsection{Kommende Tutorien}260\begin{frame}{Kommende Tutorien}261\begin{itemize}262\item[5.] 17.12.2012: Generics?, Video "`Library"' zeigen263\item[-] 24.12.2012: Heiligabend - \href{http://www.fmc.uni-karlsruhe.de/faq/wann-sind-die-weihnachtsferien}{Kein Tutorium}264\item[-] 31.12.2012: Silvester - Kein Tutorium265\item[4.] 07.01.2013266\item[3.] 14.01.2013267\item[2.] 21.01.2013268\item[1.] 28.01.2013: Abschlussprüfunsvorbereitung269\item[0.] 04.02.2013: Abschlussprüfunsvorbereitung270\item[-] 10.02.2013: Ende der Vorlesungszeit des WS 2012/2013 (\href{http://www.kit.edu/studieren/2873.php}{Quelle})271\end{itemize}272\end{frame}273274\framedgraphic{Beware of physicist fathers}{../images/Beware-of-physicist-fathers.png}275276\end{document}277278279