📚 The CoCalc Library - books, templates and other resources
cocalc-examples / martinthoma-latex-examples / presentations / Programmieren-Tutorium / Tutorium-06 / tutorium-06.tex
132930 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{menukeys}21\usepackage{xcolor}22\usepackage{pifont}% http://ctan.org/pkg/pifont23\newcommand{\cmark}{\ding{51}}%24\newcommand{\xmark}{\ding{55}}%25\usepackage{../templates/myStyle}2627\newcommand\tutor{Martin Thoma}28\newcommand\tutNR{10}29\newcommand\titleText{Programmieren-Tutorium Nr. \tutNR{} bei \tutor}30\institute{Fakultät für Informatik}3132\hypersetup{pdftitle={\titleText}}33\beamertemplatenavigationsymbolsempty3435\newcommand\InsertToC[1][]{36\begin{frame}{Outline}37\tableofcontents[subsectionstyle=show/show/show, subsubsectionstyle=show/show/show, #1]38\end{frame}39}4041\begin{document}42\title{\titleText}43\subtitle{Pakete}44\author{\tutor}45\date{\today}46\subject{Programmieren}4748\frame{\titlepage}4950\frame{51\frametitle{Inhaltsverzeichnis}52\setcounter{tocdepth}{1}53\tableofcontents54\setcounter{tocdepth}{2}55}5657\section{Einleitung}58\subsection{Quiz}59\begin{frame}{Quiz}60\begin{minipage}[b]{0.45\linewidth}61\inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=String.java, frame=lines]{java}{String.java}62\end{minipage}63\hspace{0.5cm}64\begin{minipage}[b]{0.45\linewidth}65\inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=World.java, frame=lines]{java}{World.java}66\end{minipage}67\begin{itemize}68\item Gibt es einen Compiler-Fehler?69\item Gibt es einen Laufzeit-Fehler?70\item Gibt es eine Ausgabe? Welche?71\end{itemize}72\end{frame}7374\begin{frame}{Ergebnis}75\myCode{Exception in thread "main" java.lang.NoSuchMethodError: main}\\76Es gibt nun keine \\77\myCode{public static void main(java.lang.String[] args) \{}\\78\begin{block}{Lehre}79Keine Java-internen Typen umschreiben.80\end{block}81\end{frame}828384\section{ÜB 2}85\subsection{Nachbesprechung ÜB 2}86\begin{frame}{Allgmeines}87\begin{block}{Musterlösung}88Inoffizielle Musterlösung von Simon und mir ist unter89\href{http://goo.gl/BfA6i}{http://goo.gl/BfA6i} erhältlich.\\90Bitte dort anschauen.91\end{block}92\end{frame}9394\begin{frame}{Allgmeines}95\begin{block}{Stil}96\begin{itemize}[<+->]97\item Niemals \myCode{if (variable == true)}, sondern \myCode{if (variable)}98\item "`Dead Code"' - also Code der niemals erreicht wird - wird bestraft99\item Große Probleme ($\rightarrow$ lange Methoden) aufsplitten100\end{itemize}101\end{block}102103\begin{itemize}[<+->]104\item Die bereitgestellten Code-Vorlagen sind keine Musterlösungen!105\item Kein "`TODO"' in Abgaben106\item Aufgabe B1 (Histogramm) war fehlerhaft: Natürlich muss der Kontrast nur "`nicht-negativ"' sein und nicht "`positiv"'107\item Laufvariablen müssen nicht immer \myCode{i} und \myCode{j} heißen108\item Schaut euch die hochgeladeten Dateien im Praktomat an109\item Redundanter Code ist schlecht $\Rightarrow$ Besser: Neue Methode anlegen110\end{itemize}111\end{frame}112113\begin{frame}{Allgemeines}114\begin{block}{Genau lesen}115\begin{itemize}[<+->]116\item \textbf{A.1.1 Konstruktor von Bike}: "`Modifizieren Sie117den Konstruktor der Klasse Bike, indem Sie aus der118Signatur das Argument, nach dem bisher der Preis119gesetzt wird, entfernen."'120\item \textbf{A.1.2 Setter für Gears} "`Schreiben Sie den121Konstruktor so um, dass er die Methode setSprockets122benutzt, um einen konsistenten Anfangszustand zu123garantieren."'124\item \textbf{A.2.1 Tribonacci-Folge}: "`Geben Sie \textbf{nur} die125siebenunddreißigste Tribonacci-Zahl auf der Konsole126aus."'127\item[$\Rightarrow$] Es werden automatische Tests durchgeführt.128Stimmt die Ausgabe nicht exakt - also jedes einzelne129(Leer)zeichen -, schlägt der Test fehl.130\end{itemize}131\end{block}132\end{frame}133134\begin{frame}{Tipp für BikeShop}135\myCode{\href{http://docs.oracle.com/javase/7/docs/api/java/lang/System.html\#arraycopy(java.lang.Object, int, java.lang.Object, int, int)}{System.arraycopy(warehouse, 0, newStock, 0, warehouse.length);}}136\end{frame}137138\begin{frame}{setSprockets}139\inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Gears.java, frame=lines, firstline=25, lastline=51]{java}{Gears.java}140\end{frame}141142\begin{frame}{Einheiten}143Einheiten \textbf{immer} angeben, da \dots144\begin{itemize}[<+->]145\item nie klar ist, welche Einheit gemeint ist146\item es ein richtig ärgerlicher Fehler ist147\item fehlende Einheiten viel Geld kosten können ($\rightarrow$ \href{http://www.youtube.com/watch?v=q2L5\_swAT5A}{Video: NASA Measuring Failure} - Mars Orbiter)148\end{itemize}149\end{frame}150151\begin{frame}{Attribute}152\begin{alertblock}{Attribute}153\begin{itemize}154\item Attribute sind Eigenschaften eines Objekts oder einer Klasse155\item Attribute sind keine Hilfsvariablen156\end{itemize}157\end{alertblock}158\end{frame}159160\begin{frame}{Vergleiche mit floats}161Nicht jede Zahl kann als Gleitkomma-Zahl dargestellt werden:162\includegraphics[height=50mm]{Gleitkommazahlen.png}\\163\tiny{Quelle: \href{http://de.wikipedia.org/wiki/Datei:Gleitkommazahlen.svg}{de.wikipedia.org/wiki/Datei:Gleitkommazahlen.svg}}\\164165166\end{frame}167168\begin{frame}{Vergleiche mit floats}169Zusätzlich sollte man bei der Camera-Aufgabe von $\varepsilon = 10^6$ ausgehen.\\170Die Vergleiche müssen also etwa so aussehen:171\inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\small, firstnumber=24, firstline=24, lastline=33]{java}{Camera.java}172\end{frame}173174\begin{frame}{Camera.java: isLeftContrastHigher}175\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, firstnumber=35, firstline=35, lastline=55]{java}{Camera.java}176\end{frame}177178\begin{frame}{Camera.java: Eigentlicher Code}179\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, firstnumber=57, firstline=57, lastline=87]{java}{Camera.java}180\end{frame}181182\begin{frame}{Gerüchteküche}183Bringt es einen Vorteil, eine schwere Aufgabe nicht zu bearbeiten?184\begin{itemize}[<+->]185\item Es gibt für jede Teilaufgabe ein Punktekontingent186\item Bearbeitet ihr eine Teilaufgabe nicht, ziehe ich alle Punkte ab187\item Bearbeitet ihr einen Teil einer Teilaufgabe nicht, ziehe188ich mindestens so viele Punkte ab, wie derjenige mit dem189höchstem Abzug abgezogen bekommen hat190\item Wenn der Code nicht das tut, was gefordert wird, kann ich191auch alles abziehen192\item[$\Rightarrow$] Nein, es bringt keinen Vorteil193\end{itemize}194\end{frame}195196\section{Vorlesungsergänzungen}197\subsection{Pakete}198\begin{frame}{Pakete}199\begin{itemize}[<+->]200\item Dienen der Strukturierung des Quelltextes201\item Sollen Namenskonflikte vermeiden (z.B. Klasse \myCode{Person}202in einem Paket \myCode{uni} ist wohl anders als Klasse203\myCode{Person} im Paket \myCode{politik})204\item Können über \myCode{.jar}-Dateien eingebunden werden205\item Könnt ihr über \keys{\shift + Alt + N} und \menu{Package}206oder mit einem Rechtsklick in Eclipse erzeugen:207\includegraphics[height=30mm]{new-package.png}\\208\item Eine Klasse ist Teil eines Paketes, wenn sie \dots209\begin{itemize}210\item in dem Ordner mit dem Paketnamen liegt211\item sie \myCode{package <paketname>;} ganz am Anfang stehen hat212\end{itemize}213\end{itemize}214\end{frame}215216\begin{frame}{Pakete}217\begin{block}{Namenskonventionen}218\begin{itemize}219\item Pakete werden klein geschrieben220\item Pakete können "`Unterpakete"' haben. Dies wird durch221einen Punkt angedeutet:222\begin{itemize}223\item \href{http://docs.oracle.com/javase/7/docs/api/overview-summary.html}{Offizielle Pakete}:224\item \href{http://docs.oracle.com/javase/7/docs/api/java/io/package-summary.html}{java.io}225\item \href{http://docs.oracle.com/javase/7/docs/api/java/lang/package-summary.html}{java.lang} - hat z.B. \myCode{Byte}, \myCode{Integer}, \dots226\item \href{http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/package-summary.html}{java.lang.annotation}227\end{itemize}228\end{itemize}229\end{block}230\end{frame}231232\begin{frame}{Pakete: protected}233\begin{tabular}{l||c|c|c|c}234Modifier & Class & Package & Subclass & World\\235\hline\hline236\myCode{public} & \cmark & \cmark & \cmark & \cmark \\237\myCode{protected} & \cmark & \cmark & \cmark & \xmark \\238no modifier & \cmark & \cmark & \xmark & \xmark \\239\myCode{private} & \cmark & \xmark & \xmark & \xmark240\end{tabular}241242\small{Weitere Informationen: \href{http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html}{Controlling Access to Members of a Class}}243\pause244\begin{block}{Tipp}245\myCode{private} macht fast immer Sinn. Wenn ihr nicht wisst,246ob ihr \myCode{private} oder \myCode{protected} nehmen sollt,247nehmt protected. Kein modifier macht selten Sinn. Das sieht248so aus, als ob ihr es dem Zufall überlasst.249\end{block}250\end{frame}251252\subsection{foreach-Schleife}253\begin{frame}{foreach in Java: Allgemeines}254Foreach \dots255\begin{itemize}[<+->]256\item wird in Java-Kreisen manchmal auch "`Enhanced for loop"' genannt257\item geht alle Elemente einer258\href{http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html}{Collection}259durch zu gehen (genauer: \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html}{Iterable})260\item sollte verwendet werden, wenn man es verwenden kann261\item ist auch in der \href{http://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html}{Dokumentation} (Nur in 1.5?)262und im \href{http://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html}{Tutorial}263\item ist in der \href{http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html\#jls-14.14.2}{JLS SE7} spezifiziert264\item ist Teil des \href{http://docs.oracle.com/javase/tutorial/extra/certification/javase-7-programmer1.html}{Programmer Level I Exams}265für das "`Programmer Language Certification"'266\end{itemize}267\end{frame}268\begin{frame}{foreach in Java: Beispiel}269\inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\small, firstline=3, lastline=13]{java}{foreach.java}270\end{frame}271272\section{ÜB 3}273\subsection{Hinweise zu ÜB 3}274\begin{frame}{Hinweise zu ÜB 3}275\begin{itemize}[<+->]276\item Nur Klassen und Methoden aus \myCode{java.lang} sind erlaubt277\item \textbf{Keine} Textausgabe und keine Schreibzugriffe auf Dateien278\item JavaDoc und Datenkapselung ($\rightarrow$ \myCode{private}) sind nun Pflicht279\item Pakete sollten nun verwendet werden280\item[$\Rightarrow$] Achtung beim Upload in den Praktomaten! vgl. tutorium-05.pdf, Folien 23-24281\item[A.1.1] Nur die \myCode{statements.csv} als Abgabe!282\item[A.2] \myCode{StrangeClass.java} soll wirklich \textbf{nirgends} "`f"' und kein "`d"' haben283\item[A.3] Levenshtein-Distanz $\rightarrow$ nächste Folie284\item[A.4] Geometrie $\rightarrow$ übernächste Folie285\item[B.1] Der Kommentar, warum ihr die Modifier (\myCode{private, public, protected})286verwendet, soll natürlich direkt zum jeweiligen modifier und NICHT in287eine extra Textdatei!288\end{itemize}289\end{frame}290291\subsection{Levenshtein-Distanz}292\begin{frame}{A.3 Levenshtein-Distanz}293\begin{itemize}[<+->]294\item Wer hat sichs angeschaut?295\item Verstanden? Falls nicht sind folgende Seiten einen Versuch wert:296\begin{itemize}297\item \href{http://oldfashionedsoftware.com/tag/levenshtein-distance/}{Guter Artikel}, aber nur bis "`Some Code, Finally"' relevant298\item \href{http://de.wikipedia.org/wiki/Levenshtein-Distanz}{de-Wikipedia}299\item \href{http://en.wikipedia.org/wiki/Levenshtein_Distance\#Computing_Levenshtein_distance}{en-Wiki} mit Pseudocode300\item \href{http://www-igm.univ-mlv.fr/~lecroq/seqcomp/node2.html}{eine Visualisierung}301\end{itemize}302\begin{alertblock}{Achtung!}303Der Algorithmus muss modifiziert werden. Durch die Modifikationen entspricht304der Algorithmus nicht mehr den Varianten, die sich im Internet finden lassen.305Ohne diese Modifikationen kann ich euch keine Punkte geben!306\end{alertblock}307\end{itemize}308\end{frame}309310\subsection{A.4 Geometrie}311\begin{frame}{A.4 Geometrie}312\begin{itemize}[<+->]313\item Manhattan-Distanz:\\314\includegraphics[height=30mm]{ManhattanDistance.pdf}\\315\tiny{Quelle: \href{http://commons.wikimedia.org/wiki/File:Manhattan\_distance.svg}{commons.wikipedia.org/wiki/File:Manhattan\_distance.svg}}316\end{itemize}317\end{frame}318319\section{Praxis}320\subsection{Aufgaben}321\begin{frame}{Aufgaben}322Siehe Blätter 5, 6 und 7 in \menu{prog-official > tut\_aufgaben\_ws1112}323\end{frame}324325\section{Abspann}326\subsection{Tutorium 7}327\begin{frame}{Tutorium 7}328\begin{block}{ÜB 4: Achtung}329\begin{itemize}330\item Sehr große Aufgabe (viele Methoden / Klassen)331\item Die meisten Methoden benötigen nur ein bis vier Zeilen332\end{itemize}333\end{block}334335\begin{block}{Themenvorschläge fürs nächste mal}336\begin{itemize}337\item \href{http://docs.oracle.com/javase/7/docs/technotes/guides/language/assert.html}{Assertions}338\item Verkettete Listen339\item Allgemeine Übungsaufgaben340\end{itemize}341\end{block}342\end{frame}343344\subsection{Nachhilfe}345\begin{frame}{Nachhilfe}346\begin{itemize}[<+->]347\item Falls ihr Nachhilfe braucht, meldet euch bei mir oder348dem Übungsleiter (Florian Merz)349\item Euch wird dann ein Nachhilfelehrer vermittelt350\item Die Kosten müsst ihr mit dem Nachhilfelehrer aushandeln351\end{itemize}352\end{frame}353354\subsection{Kommende Tutorien}355\begin{frame}{Kommende Tutorien}356\begin{itemize}357\item[8.] 26.11.2012358\item[7.] 03.12.2012359\item[6.] 10.12.2012360\item[5.] 17.12.2012: Video "`Library"' zeigen361\item[-] 24.12.2012: Heiligabend - \href{http://www.fmc.uni-karlsruhe.de/faq/wann-sind-die-weihnachtsferien}{Kein Tutorium}362\item[-] 31.12.2012: Silvester - Kein Tutorium363\item[4.] 07.01.2013364\item[3.] 14.01.2013365\item[2.] 21.01.2013366\item[1.] 28.01.2013: Abschlussprüfunsvorbereitung367\item[0.] 04.02.2013: Abschlussprüfunsvorbereitung368\item[-] 10.02.2013: Ende der Vorlesungszeit des WS 2012/2013 (\href{http://www.kit.edu/studieren/2873.php}{Quelle})369\end{itemize}370\end{frame}371372\framedgraphic{Vielen Dank für eure Aufmerksamkeit!}{../images/programmers-users.jpg}373374\end{document}375376377