\documentclass[usepdftitle=false,hyperref={pdfpagelabels=false}]{beamer} % use KIT-Theme % see http://sdqweb.ipd.kit.edu/wiki/Dokumentvorlagen %\usetheme{Frankfurt} % see http://deic.uab.es/~iblanes/beamer_gallery/index_by_theme.html as fallback \InputIfFileExists{../templates/beamerthemekit.sty}{\usepackage{../templates/beamerthemekit}}{\usetheme{Frankfurt}} \usefonttheme{professionalfonts} \usepackage{hyperref} \usepackage{lmodern} \usepackage{listings} \usepackage{wrapfig} % see http://en.wikibooks.org/wiki/LaTeX/Floats,_Figures_and_Captions \usepackage[utf8]{inputenc} % this is needed for german umlauts \usepackage[ngerman]{babel} % this is needed for german umlauts \usepackage[T1]{fontenc} % this is needed for correct output of umlauts in pdf \usepackage{verbatim} \usepackage{relsize} \usepackage{subfigure} \usepackage{algorithm,algpseudocode} \usepackage{minted} % needed for the inclusion of source code \usepackage{menukeys} \usepackage{xcolor} \usepackage{graphicx} \usepackage{wrapfig} \usepackage{../templates/myStyle} \newcommand\tutor{Martin Thoma} \newcommand\tutNR{10} \newcommand\titleText{Programmieren-Tutorium Nr. \tutNR{} bei \tutor} \institute{Fakultät für Informatik} \hypersetup{pdftitle={\titleText}} \beamertemplatenavigationsymbolsempty \newcommand\InsertToC[1][]{ \begin{frame}{Outline} \tableofcontents[subsectionstyle=show/show/show, subsubsectionstyle=show/show/show, #1] \end{frame} } \begin{document} \title{\titleText} \subtitle{Coding Style, Arrays} \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} \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, label=QuizArray.java, frame=lines]{java}{QuizArray.java} \begin{itemize} \item Gibt es einen Compiler-Fehler? \item Gibt es einen Laufzeit-Fehler? \item Gibt es eine Ausgabe? Welche? \end{itemize} \end{frame} \begin{frame}{Quiz: Antwort} \begin{block}{Quelltext} \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{QuizArray.java} \end{block} \begin{block}{Ausgabe} myArray1: geh du alter sack\\ myArray2: geh du alter sack \end{block} \end{frame} \begin{frame}{Shallow copy und deep copy} \includegraphics*[height=5cm,angle=-90]{so-obj1.pdf} \begin{minipage}[b]{0.45\linewidth} \begin{figure}[htb] \includegraphics*[height=5cm,angle=-90]{so-obj1-shallow-copy.pdf} \caption{shallow copy} \label{UploadForm} \end{figure} \end{minipage} \hspace{0.5cm} \begin{minipage}[b]{0.45\linewidth} \begin{figure}[htb] \includegraphics*[height=5cm,angle=-90]{so-obj1-deep-copy.pdf} \caption{deep copy} \label{UploadForm} \end{figure} \end{minipage} \tiny{Weitere infos auf \href{http://stackoverflow.com/a/9835954/562769}{stackoverflow.com}} \end{frame} \begin{frame}{Shallow copy und deep copy} \begin{itemize} \item Java macht standardmäßig eine "`shallow copy"' \item Wenn ihr eine "`deep copy"' wollt, müsst ihr das selbst machen \end{itemize} \begin{alertblock}{Lehre aus dem Quiz} Beim kopieren von Objekten (alles außer \myCode{boolean}, \myCode{byte}, \myCode{int}, \myCode{long}, \myCode{float}, \myCode{double} - oder einfacher, alles was mit einem Großbuchstaben beginnt) ist Vorsicht geboten. \end{alertblock} \end{frame} \begin{frame}{Shallow copy und deep copy} Deep copy sieht im Beispiel so aus: \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, label=QuizArray.java, frame=lines]{java}{QuizArray-solution.java} \end{frame} \section{Coding Style} \subsection{Magic Numbers} \begin{frame}{Magic Numbers} \begin{alertblock}{Definition: Magic numbers} Unique values with unexplained meaning or multiple occurrences which could (preferably) be replaced with named constants. \end{alertblock} Warum sind Konstanten besser als magic numbers? \begin{itemize} \item Code wird lesbarer \item Code wird leichter erweiterbar \item Kein (nennenswerter) Geschwindigkeits- oder Speicherplatznachteil \end{itemize} \begin{block}{Faustregel} Alle Zahlen, bis auf \myCode{0}, \myCode{1} und \myCode{-1} sollten mittels Konstanten verwendet werden. \end{block} \end{frame} \begin{frame}{Magic Numbers: Beispiel mit magic numbers} \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{ConnectFourGame-bad.java} \end{frame} \begin{frame}{Magic Numbers: Beispiel mit magic Konstanten} \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{ConnectFourGame.java} \end{frame} \section{Praxis} \subsection{Durchschnitt} \begin{frame}{Durchschnitt: Aufgabe} Schreiben Sie eine Methode \myCode{float getAverage(int[] numbers) \{ \dots \}}, die den Durchschnitt der Zahlen im Array \myCode{numbers} berechnet. \end{frame} \begin{frame}{Durchschnitt: Lösung} \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small]{java}{AverageCalculation.java} \end{frame} \subsection{Flughafenkürzel} \begin{frame}{Flughafenkürzel: Aufgabe} Wir haben ein Array mit IATA-Codes (Flughafenkürzel) gegeben und möchten den Inhalt auf der Konsole ausgeben. \end{frame} \begin{frame}{Flughafenkürzel: Lösung} \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small]{java}{IataCode.java} \end{frame} \begin{frame}{Flughafenkürzel: Ausgabe} Kein Compiler- oder Laufzeitfehler, obwohl \myCode{iataCodes[3]} nicht initialisiert ist! \begin{block}{Ausgabe} MUC\\ BER\\ AGB\\ null \end{block} \end{frame} \begin{frame}{Flughafenkürzel: Umgekehrte Reihenfolge} Modifiziere das Programm so, dass die Kürzel in umgekehrter Reihenfolge ausgegeben werden. \begin{block}{Lösung von vorhin} \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{IataCode.java} \end{block} \end{frame} \begin{frame}{Flughafenkürzel: Umgekehrte Reihenfolge - Lösung} \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small]{java}{IataCode-2.java} \end{frame} \begin{frame}{Flughafenkürzel: Jumping} Modifiziere das Programm so, dass nur jedes dritte Element ausgegeben wird. \begin{block}{Lösung von vorhin} \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{IataCode.java} \end{block} \end{frame} \begin{frame}{Flughafenkürzel: Jumping - Lösung} \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small]{java}{IataCode-3.java} \end{frame} \subsection{Praxis: Bilder} \begin{frame}{Praxis: Bilder} Gegeben ist ein Schwarz-Weiß Bild \myCode{int[][] image}. \begin{enumerate} \item Was repräsentiert \myCode{image[2][42]}? \item Schreiben Sie eine Methode, die die durchschnittliche Farbe von \myCode{image} berechnet und zurückgibt. \end{enumerate} \end{frame} \begin{frame}{Praxis: Bilder - Lösung} \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{Bilder.java} Mögliche Probleme: \begin{itemize} \item Ein \myCode{int} für \myCode{sum} ist eventuell zu klein \item 255 Grauwerte, \myCode{int} hat maximalwert von 2.147.483.64 \item[$\Rightarrow$] $\frac{2147483647}{255} \approx 8.4 \cdot 10^6$ \item[$\Rightarrow$] maximal 8.4 Millionen Pixel \item[$\Rightarrow$] $\sqrt{8.4 \cdot 10^6} \approx 2900$ \item[$\Rightarrow$] maximale Auflösung von $2900 \times 2900$ Pixel \item Eventuell \myCode{int[][] image = new int[0][0];} \end{itemize} \end{frame} \subsection{Praxis: Sieb des Erasthostenes} \begin{frame}{Praxis: Sieb des Erasthostenes} Implementieren Sie das Sieb des Erasthostenes. \end{frame} \section{Allgemeine Hinweise zu ÜB} \subsection{Praktomat} \begin{frame}{Praktomat} \begin{itemize} \item Fragen frühzeitig stellen! \item Wenn ihr Pakete verwendet, am Anfang eurer Dateien also \myCode{package AB\_2;} oder ähnliches steht, müsst ihr die korrekte Ordnerstruktur in den Praktomat hochladen \item In Eclipse im Fenster "`Navigation"' den Ordner "`src"' auswählen \item \menu{File > Export\dots > File system} \item Zip-Datei aus dem exportiertem src-Ordner erstellen \item Zip-Datei hochladen \end{itemize} \end{frame} \framedgraphic{Projekt mit Eclipse exportieren}{eclipse-export-project.png} \begin{frame}{Allgemeines} \begin{itemize} \item Eclipse-Warnungen beherzigen und die Ursache dafür beseitigen \item Formattieren: \keys{Strg + A} und \keys{Strg + \shift + F} \item Encoding: \menu{Project > Properties > Ressource > Text file encoding > UTF-8} \end{itemize} \end{frame} \section{Hinweise zum ÜB 3} \subsection{ÜB 3} \begin{frame}{ÜB 3} \begin{itemize} \item A1: \begin{itemize} \item Pro Aufgabe jeweils eine Textdatei(\myCode{A1.txt}, \myCode{B1.txt}) \item Schaut euch meinen Artikel \href{http://martin-thoma.com/java-puzzle-1-pre-and-postincrement/}{Java Puzzle \#1: Pre- and Postincrement} an \end{itemize} \item A2: Buchstaben "`d"' und "`f"' nicht verwenden \end{itemize} \end{frame} \section{Abspann} \subsection{Comic} \framedgraphic{Abgaben um 11:55 Uhr}{ub-2-abgabge.png} \framedgraphic{Vielen Dank für eure Aufmerksamkeit!}{../images/geekandpoke-2010-01-commenting.jpg} \end{document}