📚 The CoCalc Library - books, templates and other resources
cocalc-examples / martinthoma-latex-examples / presentations / Programmieren-Tutorium / Tutorium-03 / tutorium-03.tex
132931 viewsLicense: OTHER
\documentclass[usepdftitle=false,hyperref={pdfpagelabels=false}]{beamer}12% use KIT-Theme3% see http://sdqweb.ipd.kit.edu/wiki/Dokumentvorlagen4%\usetheme{Frankfurt} % see http://deic.uab.es/~iblanes/beamer_gallery/index_by_theme.html as fallback5\InputIfFileExists{../templates/beamerthemekit.sty}{\usepackage{../templates/beamerthemekit}}{\usetheme{Frankfurt}}6\usefonttheme{professionalfonts}78\usepackage{hyperref}9\usepackage{lmodern}10\usepackage{listings}11\usepackage{wrapfig} % see http://en.wikibooks.org/wiki/LaTeX/Floats,_Figures_and_Captions12\usepackage[utf8]{inputenc} % this is needed for german umlauts13\usepackage[ngerman]{babel} % this is needed for german umlauts14\usepackage[T1]{fontenc} % this is needed for correct output of umlauts in pdf15\usepackage{verbatim}16\usepackage{relsize}17\usepackage{subfigure}18\usepackage{algorithm,algpseudocode}19\usepackage{minted} % needed for the inclusion of source code20\usepackage{xcolor}21\usepackage{menukeys}22\usepackage{../templates/myStyle}2324\newcommand\tutor{Martin Thoma}25\newcommand\tutNR{10}26\newcommand\titleText{Programmieren-Tutorium Nr. \tutNR{} bei \tutor}27\institute{Fakultät für Informatik}2829\hypersetup{pdftitle={\titleText}}30\beamertemplatenavigationsymbolsempty3132\newcommand\InsertToC[1][]{33\begin{frame}{Outline}34\tableofcontents[subsectionstyle=show/show/show, subsubsectionstyle=show/show/show, #1]35\end{frame}36}3738\begin{document}39\title{\titleText}40\subtitle{Eclipse, Arrays, Kontrollstrukturen und Konventionen}41\author{\tutor}42\date{\today}43\subject{Programmieren}4445\frame{\titlepage}4647\frame{48\frametitle{Inhaltsverzeichnis}49\setcounter{tocdepth}{1}50\tableofcontents51\setcounter{tocdepth}{2}52}5354%\AtBeginSection[]{55% \InsertToC[sections={\thesection}] % shows only subsubsections of one subsection56%}5758\section{Einleitung}59\subsection{Quiz}60\begin{frame}{Quiz}61\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small]{java}{Quiz.java}62\begin{itemize}63\item Was ist die Ausgabe?64\item Gibt es einen Compiler-Fehler?65\item Gibt es einen Laufzeit-Fehler?66\end{itemize}67\end{frame}6869\subsection{Quiz: Antwort}70\begin{frame}{Quiz: Antwort}71Ein Compiler-Fehler:72\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small]{console}{Quiz-Answer.sh-session}73\end{frame}74757677\section{Eclipse}78\subsection{Frühere Folien}79\begin{frame}{Frühere Folien}80\begin{itemize}81\item Installation (für Windows): \href{http://www.eclipse.org/}{eclipse.org}82\item \menu{Window > Open Perspective > Java}83\item \menu{Window > Show Toolbar}84\item \menu{Window > Preferences > General > Editors > Text Editors}85\begin{itemize}86\item Show line numbers87\item Print margin column: 12088\end{itemize}89\end{itemize}90\end{frame}9192\subsection{Checkstyle: Installation}93\begin{frame}{Checkstyle: Installation}94\begin{itemize}95\item Internetverbindung wird benötigt!96\item \menu{Help > Install New Software}97\item Work with: \myCode{http://eclipse-cs.sf.net/update/}98\item Klick auf \menu{Add...}99\item Name: "`Checkstyle"'100\item Warten101\item Nun sollten zwei Einträge erscheinen102\item "`Checkstyle"' auswählen103\item auf \menu{Next} klicken (und dann nochmal)104\item "`I accept the terms of the licence agreement"'105\item auf \menu{Finish} klicken und dann herunterladen lassen106\item "`Warning: You are installing software [...]"' $\rightarrow$ klick auf \menu{OK}107\item Eclipse neustarten lassen (Klick auf \menu{Yes})108\end{itemize}109\end{frame}110111\subsection{Checkstyle: Einrichten}112\begin{frame}{Checkstyle: Einrichten}113\begin{itemize}114\item "`Checkstyle.xml"' herunterladen: \href{https://raw.github.com/MartinThoma/prog-ws1213/master/Dokumente/whitespace-checks.xml}{tinyurl.com/checkstyle-ws}115\end{itemize}116Bei jeden Java-Projekt wieder:117\begin{itemize}118\item \menu{Project > Properties > Checkstyle}119\item Check "`checkstyle active for this project"'120\item Reiter \menu{Local Check Configurations}121\item \menu{New\dots}122\begin{itemize}123\item Type: "`Internal Configuration"'124\item Name: "`KIT Checkstyle"'125\item \menu{Import} $\rightarrow$ "`checkstyle.xml"' auswählen126\item \menu{OK} klicken127\end{itemize}128\item Reiter \menu{Main} auswählen129\item "`KIT Checkstyle - (Local)"' auswählen130\item \menu{OK} klicken131\item "`The project needs to be rebuild [...]"' $\rightarrow$ \menu{Yes}132\end{itemize}133\end{frame}134135\begin{frame}{Checkstyle: Einrichten}136Nochmal mit Screenshots: \href{http://martin-thoma.com/checkstyle/}{martin-thoma.com/checkstyle}137\end{frame}138139\section{Arrays}140\subsection{Was sind Arrays ...}141\begin{frame}{Was sind Arrays ...}142... und wozu braucht man sie?143\begin{itemize}144\item viele Werte in einem Variablennamen145\item Elemente haben alle den selben Typ146\item[$\Rightarrow$] zu jeden Typen gibt es Arrays147\end{itemize}148\end{frame}149150\subsection{Visualisierung}151\begin{frame}{Visualisierung}152\includegraphics[height=30mm]{array.pdf}153\begin{itemize}154\item Indices: 0, 1, 2, 3, 4155\item Länge des Arrays: 5156\item Erstes Element: d157\end{itemize}158\end{frame}159160\subsection{Minimalbeispiele}161\begin{frame}{Minimalbeispiele}162Deklarieren:163\inputminted[linenos=false, numbersep=5pt, tabsize=4,firstline=1, lastline=1, fontsize=\small]{java}{singleLines.java}164\vspace{5 mm}165Deklarieren und instanziieren:166\inputminted[linenos=false, numbersep=5pt, tabsize=4,firstline=2, lastline=2, fontsize=\small]{java}{singleLines.java}167\vspace{5 mm}168Deklarieren und initialisieren:169\inputminted[linenos=false, numbersep=5pt, tabsize=4,firstline=3, lastline=4, fontsize=\small]{java}{singleLines.java}170\end{frame}171172\subsection{Konvention}173\begin{frame}{Konvention}174\begin{itemize}175\item[(A)] Geht, soll man aber nicht machen:176\inputminted[linenos=false, numbersep=5pt, tabsize=4,firstline=6, lastline=6, fontsize=\small]{java}{singleLines.java}177\item[(B)] So ist es gut:178\inputminted[linenos=false, numbersep=5pt, tabsize=4,firstline=5, lastline=5, fontsize=\small]{java}{singleLines.java}179\end{itemize}180181\only<2->{182Warum ist Variante (B) besser?183\begin{itemize}184\item<3-> Der Entwicker kann sofort den Typen sehen185\item<4-> \href{http://stackoverflow.com/q/13175193/562769}{Konvention}186\end{itemize}187}188\end{frame}189190\subsection{Ressourcen}191\begin{frame}{Ressourcen}192\begin{itemize}193\item \href{http://docs.oracle.com/javase/specs/jls/se7/jls7.pdf}{JLS 7}: Ab S. 291194\item \href{http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html}{Java 7 API}195\item \href{http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html}{Java Tutorial}196\end{itemize}197\end{frame}198199\section{Random Style Guide}200\subsection{Antipattern: Yoda-Conditions}201\begin{frame}{Antipattern: Yoda-Conditions}202\includegraphics[width=60mm]{yoda-condition.png}\\203\begin{quote}204Using \myCode{if(constant == variable)} instead of205\myCode{if(variable == constant)}, like \myCode{if(4 == foo)}.206Because it's like saying ``if blue is the sky'' or ``if tall207is the man''.208\end{quote}209Source: \href{http://www.codinghorror.com/blog/2012/07/new-programming-jargon.html}{codinghorror.com}\\210211Bitte nicht machen!212\end{frame}213214\subsection{Deklarationen}215\begin{frame}{Deklarationen}216\begin{itemize}217\item 1 $\frac{\text{Deklaration}}{\text{Zeile}}$\\218\vspace{4mm}219Nicht so:220\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=19, lastline=19]{java}{JavaDoc.java}221\vspace{4mm}222Sondern so:223\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=21, lastline=22]{java}{JavaDoc.java}224\item Variablen immer dort initialisieren, wo sie deklariert werden\\225Ausnahme: Initialisierungswert ist von vorherigen Berechnungen abhängig226\end{itemize}227\end{frame}228229\subsection{Antipattern: Stringly Typed}230\begin{frame}{Antipattern: Stringly Typed}231\begin{wrapfigure}{r}{3.1cm}232\includegraphics[width=3cm]{stringly-typed.jpg}233\end{wrapfigure}234235Used to describe an implementation that \\236needlessly relies on strings.\\237\vspace{2cm}238Excessively stringly typed code is usually\\239a pain to understand and detonates at \\240runtime with errors that the compiler would \\241normally find.242243Source: \href{http://www.codinghorror.com/blog/2012/07/new-programming-jargon.html}{codinghorror.com}244\end{frame}245246\section{Getter/Setter}247\subsection{Allgemeines}248\begin{frame}{Allgemeines}249Getter und Setter sind \dots250\begin{itemize}[<+->]251\item \dots Methoden252\item \dots ein "`Interface"'253\item \dots \href{http://de.wikipedia.org/wiki/Zugriffsfunktion}{Zugriffsfunktionen} zur Abfrage und Änderung254\end{itemize}255\end{frame}256257\subsection{Warum Getter/Setter?}258\begin{frame}{Warum Getter/Setter?}259Vorteile von Getter und Setter-Methoden sind \dots260\begin{itemize}[<+->]261\item \dots (später auftretende) Nebenbedingungen beim get / set262\item \dots Validierung bei set263\item \dots Verbergen der Implementierung $\rightarrow$ Geheimnisprinzip264\end{itemize}265\end{frame}266267\subsection{Modifikatoren}268\begin{frame}{Modifikatoren}269\begin{block}{Zugriffsmodifikatoren}270Mit Hilfe von \textbf{Zugriffsmodifikatoren} (access modifiers) lassen sich die271\textbf{Sichtbarkeiten} von Programmteilen regeln:272\begin{itemize}273\item \textbf{public} Element: Element ist für alle Klassen sichtbar274\item<2-> \textbf{private} Element: Element ist nur innerhalb seiner Klasse sichtbar275\item<3-> \textbf{protected} Element: Element ist nur innerhalb seiner Klasse, deren276Subklassen und allen Klassen im selben Paket sichtbar277$\rightarrow$ später mehr dazu278\item<4-> \textbf{kein Modifier}: Element ist nur innerhalb seiner Klasse und der279Klassen im selben Paket sichtbar280$\rightarrow$ hier nicht so wichtig281\end{itemize}282\end{block}283\only<5->{284Ab nun:285\begin{itemize}286\item Attribute sind (fast) immer private287\item Methoden können auch private sein288\end{itemize}289}290\end{frame}291292\subsection{Modifikatoren: Beispiel}293\begin{frame}{Modifikatoren: Beispiel}294\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, frame=lines, label=Student.java, firstline=1, lastline=10]{java}{Visibility.java}295\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, frame=lines, label=Main.java, firstline=12, lastline=19]{java}{Visibility.java}296\end{frame}297298\subsection{Modifikatoren: Beispiel}299\begin{frame}{Modifikatoren: Beispiel}300\begin{alertblock}{Neues Problem}301Jetzt können wir Namen, Semester und Matrikelnummer von außen gar nicht mehr302auslesen!303\end{alertblock}304\only<2->{305\begin{block}{Auch hierzu gibt es aber eine Lösung:}306Mit \textbf{getter-Methoden} kann man den Lesezugriff auf Attribute307wieder erlauben.308\end{block}309}310\end{frame}311312\subsection{Modifikatoren: Beispiel}313\begin{frame}{Modifikatoren: Beispiel}314\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, frame=lines, label=Student.java, firstline=21, lastline=30]{java}{Visibility.java}315\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, frame=lines, label=Student.java, firstline=32, lastline=39]{java}{Visibility.java}316\end{frame}317318\subsection{Eclipse-Tipp}319\begin{frame}{Eclipse-Tipp}320\menu{Source > Generate Getters and Setters\dots}\\321\includegraphics[width=62mm]{eclipse-getter-setter.png}322\end{frame}323324\section{Konventionen}325\subsection{Kommentare}326\begin{frame}{Kommentare}327Typen:328\begin{itemize}329\item Implementierungskommentare: \item \myCode{/* blah */} und \myCode{// blah}330\item Dokumentationskommentare: \myCode{/** blah */}331\end{itemize}332333\begin{quote}334Comments should not be enclosed in large boxes drawn with asterisks or other characters.335Comments should never include special characters such as form-feed and backspace.336\end{quote}337Source: \href{http://www.oracle.com/technetwork/java/codeconventions-150003.pdf}{Java Code Conventions}, S. 7 - 9338\end{frame}339340\subsection{JavaDoc: Verwendung}341\begin{frame}{JavaDoc: Verwendung}342Soll fast überall benutzt werden:343\begin{itemize}344\item Über jeder Klasse345\item Über jedem Attribut346\item Über jeder Methode (mit Annotations)347\end{itemize}348\end{frame}349350\subsection{JavaDoc: Annotations}351\begin{frame}{JavaDoc: Annotations}352Es gibt folgende Annotations353\begin{itemize}354\item \myCode{@param}: Für die Parameter aller Methoden355\item \myCode{@return}: Für den Rückgabewert vom Methoden356\item \myCode{@author}: Nur für \myCode{class} und \myCode{interface}, erforderlich357\end{itemize}358\vspace{0.5cm}359Weitere Annotations:360\begin{itemize}361\item \myCode{@throws}: Angabe möglicher Fehlermeldungen362\end{itemize}363\end{frame}364365\subsection{JavaDoc: Negativ-Beispiel}366\begin{frame}{JavaDoc: Negativ-Beispiel}367\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=1, lastline=6]{java}{JavaDoc.java}368369\begin{itemize}370\item Was ist hier schlecht?371\item Wie könnte man es verbessern?372\end{itemize}373\end{frame}374375\subsection{JavaDoc: Positiv-Beispiel}376\begin{frame}{JavaDoc: Positiv-Beispiel}377\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=9, lastline=16]{java}{JavaDoc.java}378\end{frame}379380\section{Kontrollstrukturen}381\subsection{if-Abfragen}382\begin{frame}{if-Abfragen}383\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=1, lastline=5]{java}{Kontrollstrukturen.java}384385KEINE Schleife! $\rightarrow$ \href{http://if-schleife.de/}{if-schleife.de}386\end{frame}387388\subsection{if-Abfragen: else if}389\begin{frame}{if-Abfragen: else if}390\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=7, lastline=13]{java}{Kontrollstrukturen.java}391\end{frame}392393\subsection{if-Abfragen: Quiz}394\begin{frame}{if-Abfragen: Quiz}395\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, frame=lines]{java}{QuizIf.java}396\end{frame}397398\subsection{for-Schleifen}399\begin{frame}{for-Schleifen}400\begin{itemize}401\item Syntax: \myCode{for ([INITIALISIERUNG; BEDINGUNG; UPDATE]) \{ \dots \}}402\end{itemize}403404\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=39, lastline=41]{java}{Kontrollstrukturen.java}405\end{frame}406407\subsection{while-Schleifen}408\begin{frame}{while-Schleifen}409\begin{itemize}410\item Syntax: \myCode{while ([BEDINGUNG]) \{ \dots \}}411\end{itemize}412413\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=35, lastline=37]{java}{Kontrollstrukturen.java}414\end{frame}415416\subsection{do-while-Schleifen}417\begin{frame}{do-while-Schleifen}418\begin{itemize}419\item Syntax: \myCode{do \{ \dots \} while ([BEDINGUNG]);}420\item Wo ist der Unterschied zu \myCode{while}?421\end{itemize}422423\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=43, lastline=49]{java}{Kontrollstrukturen.java}424\end{frame}425426\subsection{Switch-Anweisung}427\begin{frame}{Switch-Anweisung}428\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, frame=lines, firstline=15, lastline=33, label=World.java]{java}{Kontrollstrukturen.java}429\end{frame}430431\section{Praxis}432\subsection{Praxis}433\begin{frame}{Praxis}434Falls noch Zeit bleibt \dots435\end{frame}436437\section{Abspann}438\subsection{Kommende Tutorien}439\begin{frame}{Kommende Tutorien}440\begin{itemize}441\item[11.] 05.11.2012442\item[10.] 12.11.2012443\item[9.] 19.11.2012444\item[8.] 26.11.2012445\item[7.] 03.12.2012446\item[6.] 10.12.2012447\item[5.] 17.12.2012: Video "`Library"' zeigen448\item[-] 24.12.2012: Heiligabend - \href{http://www.fmc.uni-karlsruhe.de/faq/wann-sind-die-weihnachtsferien}{Kein Tutorium}449\item[-] 31.12.2012: Silvester - Kein Tutorium450\item[4.] 07.01.2013451\item[3.] 14.01.2013452\item[2.] 21.01.2013453\item[1.] 28.01.2013454\item[0.] 04.02.2013455\item[-] 10.02.2013: Ende der Vorlesungszeit des WS 2012/2013 (\href{http://www.kit.edu/studieren/2873.php}{Quelle})456\end{itemize}457\end{frame}458459\framedgraphic{Vielen Dank für eure Aufmerksamkeit!}{../images/geekandpoke-2010-10.jpg}460461\end{document}462463464