123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278 |
- \documentclass[usepdftitle=false,hyperref={pdfpagelabels=false}]{beamer}
- \usepackage{../templates/myStyle}
- \begin{document}
- \title{\titleText}
- \subtitle{JUnit, Vererbung, toString(), Interfaces}
- \author{\tutor}
- \date{\today}
- \subject{Programmieren}
- \frame{\titlepage}
- \frame{
- \frametitle{Inhaltsverzeichnis}
- \setcounter{tocdepth}{1}
- \tableofcontents
- \setcounter{tocdepth}{2}
- }
- \section{Einleitung}
- \subsection{Quiz}
- \begin{frame}{Quiz: Vererbung}
- \begin{minipage}[b]{0.45\linewidth}
- \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Animal.java, frame=lines]{java}{Animal.java}
- \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Jungle.java, frame=lines]{java}{Jungle.java}
- \end{minipage}
- \hspace{0.5cm}
- \begin{minipage}[b]{0.45\linewidth}
- \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Tiger.java, frame=lines]{java}{Tiger.java}
- \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Cat.java, frame=lines]{java}{Cat.java}
- \begin{itemize}
- \item Gibt es einen Compiler-Fehler?
- \item Gibt es einen Laufzeit-Fehler?
- \item Gibt es eine Ausgabe? Welche?
- \end{itemize}
- \end{minipage}
- \end{frame}
- \begin{frame}{Quiz: Antwort}
- \begin{minipage}[b]{0.45\linewidth}
- \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Animal.java, frame=lines]{java}{Animal.java}
- \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Jungle.java, frame=lines]{java}{Jungle.java}
- \end{minipage}
- \hspace{0.5cm}
- \begin{minipage}[b]{0.45\linewidth}
- \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Tiger.java, frame=lines]{java}{Tiger.java}
- \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Cat.java, frame=lines]{java}{Cat.java}
- \begin{itemize}
- \item null
- \item Cat:null
- \item Cat:null
- \item null
- \item null
- \end{itemize}
- \end{minipage}
- \end{frame}
- \begin{frame}{Erklärung}
- \begin{itemize}
- \item Zeile 2 und 3: \myCode{sound} im Konstruktor von \myCode{Cat} ist eine
- lokale Variable, kein Attribut
- \item In Java werden nur Methoden vererbt
- \begin{itemize}
- \item Klassen: Signatur und Implementierung
- \item Interfaces: Nur Signatur
- \end{itemize}
- \end{itemize}
- Mehr dazu später
- \end{frame}
- \section{JUnit}
- \subsection{Allgemeines}
- \begin{frame}{JUnit: Allgemeines}
- JUnit \dots
- \begin{itemize}[<+->]
- \item ist ein Java-Paket
- \item ist ein Framework zum Testen von Java-Programmen
- \item ist SEHR verbreitet
- \item dient der Erstellung von Unit-Tests
- \item wurde von Erich Gamma und Kent Beck erstellt
- \end{itemize}
- \end{frame}
- \subsection{Beispiel}
- \begin{frame}{JUnit: Beispiel}
- \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, label=LevenshteinCompilationTest.java, frame=lines]{java}{LevenshteinCompilationTest.java}
- \end{frame}
- \framedgraphic{Eclipse: JUnit}{Eclipse-JUnit-new-test.png}
- \framedgraphic{Eclipse: JUnit}{Eclipse-JUnit-project-explorer.png}
- \framedgraphic{Eclipse: JUnit}{Eclipse-JUnit-execution-button.png}
- \framedgraphic{Eclipse: JUnit}{Eclipse-JUnit-execution-result.png}
- \framedgraphic{Eclipse: JUnit}{Eclipse-JUnit-detailed-results.png}
- \framedgraphic{Eclipse: JUnit}{Eclipse-JUnit-new-filter-trace.png}
- \subsection{Fehler}
- \begin{frame}{JUnit: Fehler}
- \begin{alertblock}{Fehler}
- The import org.junit cannot be resolved
- \end{alertblock}
- \begin{block}{Lösung}
- \begin{itemize}
- \item \href{https://github.com/KentBeck/junit/downloads}{Hier} junit-4.11.jar mit Hamcrest herunterladen
- \item \menu{Project > Properties > Java Build Path > Libraries > Add External JARs...}
- \item \texttt{junit-4.11.jar} auswählen
- \item Auf OK klicken
- \end{itemize}
- \end{block}
- \end{frame}
- \section{Vererbung}
- \subsection{Allgemeines}
- \begin{frame}{Allgemeines}
- Vererbung \dots
- \begin{itemize}[<+->]
- \item ist ein Schlüsselelement der OOP
- \item ist in Java eingeschränkt: Eine Klasse erbt in Java
- von genau einer anderen Klasse
- \begin{itemize}
- \item alle Klassen erben von \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html}{Object}
- \end{itemize}
- \item dient der Spezialisierung
- \end{itemize}
- \end{frame}
- \begin{frame}{Beispiel}
- Wo kann Vererbung nützlich sein?
- \begin{itemize}[<+->]
- \item Oberklasse Liste, Unterklassen SinglyLinkedList und
- DoubleLinkedList
- \begin{itemize}
- \item \myCode{contains()} ist gleich
- \item \myCode{append()} ist unterschiedlich
- \item \myCode{remove()} ist unterschiedlich
- \end{itemize}
- \item Oberklasse Animal, Unterklassen Säugetier, Tiger, Schlange, Bär, \dots
- \item Brettspiele:
- \begin{itemize}
- \item Klasse Spielbrett; Unterklassen: Schachbrett, Dame-Brett, Mensch-ärgere-dich-nicht
- \item Klasse Spielfigur; Unterklassen: Bauer, Dame, Springer, Turm
- \item Klasse Spiellogik; Unterklassen: DameLogik, SchachLogik
- \end{itemize}
- \end{itemize}
- \end{frame}
- \framedgraphic{Beispiel}{Klassendiagramm.pdf}
- \begin{frame}{Vererbung: Beispiel in Java}
- \begin{minipage}[b]{0.45\linewidth}
- \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Animal.java, frame=lines]{java}{Animal.java}
- \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Jungle.java, frame=lines]{java}{Jungle.java}
- \end{minipage}
- \hspace{0.5cm}
- \begin{minipage}[b]{0.45\linewidth}
- \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Tiger.java, frame=lines]{java}{Tiger.java}
- \inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Cat.java, frame=lines]{java}{Cat.java}
- \end{minipage}
- \end{frame}
- \begin{frame}{Allgemeines}
- \begin{block}{\href{http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html\#jls-8.4.8}{JLS 8.4.8}}
- A class C inherits from its direct superclass and direct
- superinterfaces all abstract and non-abstract methods of the
- superclass and superinterfaces that are public, protected, or
- declared with default access in the same package as C, and are
- neither overridden (§8.4.8.1) nor hidden (§8.4.8.2) by a
- declaration in the class.
- \end{block}
- \end{frame}
- \section{toString()}
- \subsection{Allgemeines}
- \begin{frame}{toString()}
- \begin{itemize}[<+->]
- \item Jedes Objekt hat eine Methode \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html\#toString()}{toString()}
- \item Diese wird von \myCode{Object} vererbt
- \item und \st{kann} sollte überschrieben werden
- \end{itemize}
- \end{frame}
- \begin{frame}{Information aus den Javadoc}
- Wie sollte toString() aussehen?
- \begin{itemize}
- \item Eine kurze textuelle Repräsentation des Objekts
- \item Soll von Menschen gelesen werden
- \item Per Standard: \myCode{getClass().getName() + '@' + Integer.toHexString(hashCode())}
- \end{itemize}
- \end{frame}
- \begin{frame}{Beispiel}
- \inputminted[linenos=true, numbersep=5pt, tabsize=4, label=Node.java, frame=lines]{java}{Node.java}
- \end{frame}
- \section{Interfaces}
- \subsection{Allgemeines}
- \begin{frame}{Interfaces: Allgemeines}
- \begin{itemize}[<+->]
- \item auf Deutsch: Schnittstelle
- \item es werden nur Methodensignaturen vererbt
- \item die Implementierung muss komplett selbst durchgeführt werden!
- \item wird wie Klassen in einer eigenen "`MeinInterface.java"' Datei gespeichert
- \end{itemize}
- \pause[\thebeamerpauses]
- \begin{block}{Namenskonvention}
- Der Name einer Schnittstelle endet oft mit -able.
- \end{block}
- \end{frame}
- \subsection{Beispiel}
- \begin{frame}{Interfaces: Beispiel}
- \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, label=Bicycle.java, frame=lines]{java}{Bicycle.java}
- \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, label=ACMEBicycle.java, frame=lines]{java}{ACMEBicycle.java}
- \small{Quelle: \href{http://docs.oracle.com/javase/tutorial/java/concepts/interface.html}{docs.oracle.com}: What Is an Interface?}\\
- Weitere Informationen: \href{http://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html}{docs.oracle.com}: Interfaces
- \end{frame}
- \subsection{Real World Examples}
- \begin{frame}{Real World Examples}
- \begin{itemize}
- \item \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html}{Comperable}: Vergleichen mit \myCode{<}
- \item \href{http://docs.oracle.com/javase/7/docs/api/java/util/List.html}{List}: Viele Listenoperationen
- \item \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html}{Iterable}: foreach
- \item \href{http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html}{Serializable}: Speichern / verschicken übers Netzwerk
- \item \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html}{Runnable}: Multithreading
- \end{itemize}
- \end{frame}
- \subsection{Weitere Informationen}
- \begin{frame}{Interfaces: Weitere Informationen}
- \begin{itemize}
- \item \href{http://docs.oracle.com/javase/specs/jls/se7/html/jls-9.html}{JLS 7}
- \item \href{http://openbook.galileodesign.de/javainsel5/javainsel06_010.htm}{Galileo openbook}
- \end{itemize}
- \end{frame}
- \section{Nachbesprechung ÜB 3}
- \subsection{Allgemeines}
- \begin{frame}{Allgemeines}
- Lösungen sind \href{https://github.com/MartinThoma/prog-ws1213/tree/master/Blatt-03}{hier} zu finden.
- \end{frame}
- \begin{frame}{Allgemeines}
- \begin{itemize}[<+->]
- \item \myCode{\href{http://docs.oracle.com/javase/7/docs/api/java/lang/String.html\#charAt(int)}{char charAt(int index)}}:
- Returns the char value at the specified index.
- \item \myCode{\href{http://docs.oracle.com/javase/7/docs/api/java/lang/String.html\#matches(java.lang.String)}{public boolean matches(String regex)}}
- Tells whether or not this string matches the given regular expression.
- \item \myCode{\href{http://docs.oracle.com/javase/7/docs/api/java/lang/String.html\#substring(int, int)}{String substring(int beginIndex,
- int endIndex)}} Returns a new string that is a substring of this string.
- \end{itemize}
- \pause[\thebeamerpauses]
- \begin{block}{Eclipse-Tipp}
- Wenn Eclipse euch im Projektordner einen Fehler anzeigt, aber
- keine Datei fehlerhaft ist, solltet ihr mal einen
- Blick in \menu{Window > Show View > Problem} werfen.
- \end{block}
- \end{frame}
- \section{Abspann}
- \subsection{Kommende Tutorien}
- \begin{frame}{Kommende Tutorien}
- \begin{itemize}
- \item[5.] 17.12.2012: Generics?, Video "`Library"' zeigen
- \item[-] 24.12.2012: Heiligabend - \href{http://www.fmc.uni-karlsruhe.de/faq/wann-sind-die-weihnachtsferien}{Kein Tutorium}
- \item[-] 31.12.2012: Silvester - Kein Tutorium
- \item[4.] 07.01.2013
- \item[3.] 14.01.2013
- \item[2.] 21.01.2013
- \item[1.] 28.01.2013: Abschlussprüfunsvorbereitung
- \item[0.] 04.02.2013: Abschlussprüfunsvorbereitung
- \item[-] 10.02.2013: Ende der Vorlesungszeit des WS 2012/2013 (\href{http://www.kit.edu/studieren/2873.php}{Quelle})
- \end{itemize}
- \end{frame}
- \framedgraphic{Beware of physicist fathers}{../images/Beware-of-physicist-fathers.png}
- \end{document}
|