mirror of
https://github.com/MartinThoma/LaTeX-examples.git
synced 2025-04-26 06:48:04 +02:00
462 lines
16 KiB
TeX
462 lines
16 KiB
TeX
\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{xcolor}
|
|
\usepackage{menukeys}
|
|
\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{Eclipse, Arrays, Kontrollstrukturen und Konventionen}
|
|
\author{\tutor}
|
|
\date{\today}
|
|
\subject{Programmieren}
|
|
|
|
\frame{\titlepage}
|
|
|
|
\frame{
|
|
\frametitle{Inhaltsverzeichnis}
|
|
\setcounter{tocdepth}{1}
|
|
\tableofcontents
|
|
\setcounter{tocdepth}{2}
|
|
}
|
|
|
|
%\AtBeginSection[]{
|
|
% \InsertToC[sections={\thesection}] % shows only subsubsections of one subsection
|
|
%}
|
|
|
|
\section{Einleitung}
|
|
\subsection{Quiz}
|
|
\begin{frame}{Quiz}
|
|
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small]{java}{Quiz.java}
|
|
\begin{itemize}
|
|
\item Was ist die Ausgabe?
|
|
\item Gibt es einen Compiler-Fehler?
|
|
\item Gibt es einen Laufzeit-Fehler?
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\subsection{Quiz: Antwort}
|
|
\begin{frame}{Quiz: Antwort}
|
|
Ein Compiler-Fehler:
|
|
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small]{console}{Quiz-Answer.sh-session}
|
|
\end{frame}
|
|
|
|
|
|
|
|
\section{Eclipse}
|
|
\subsection{Frühere Folien}
|
|
\begin{frame}{Frühere Folien}
|
|
\begin{itemize}
|
|
\item Installation (für Windows): \href{http://www.eclipse.org/}{eclipse.org}
|
|
\item \menu{Window > Open Perspective > Java}
|
|
\item \menu{Window > Show Toolbar}
|
|
\item \menu{Window > Preferences > General > Editors > Text Editors}
|
|
\begin{itemize}
|
|
\item Show line numbers
|
|
\item Print margin column: 120
|
|
\end{itemize}
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\subsection{Checkstyle: Installation}
|
|
\begin{frame}{Checkstyle: Installation}
|
|
\begin{itemize}
|
|
\item Internetverbindung wird benötigt!
|
|
\item \menu{Help > Install New Software}
|
|
\item Work with: \myCode{http://eclipse-cs.sf.net/update/}
|
|
\item Klick auf \menu{Add...}
|
|
\item Name: "`Checkstyle"'
|
|
\item Warten
|
|
\item Nun sollten zwei Einträge erscheinen
|
|
\item "`Checkstyle"' auswählen
|
|
\item auf \menu{Next} klicken (und dann nochmal)
|
|
\item "`I accept the terms of the licence agreement"'
|
|
\item auf \menu{Finish} klicken und dann herunterladen lassen
|
|
\item "`Warning: You are installing software [...]"' $\rightarrow$ klick auf \menu{OK}
|
|
\item Eclipse neustarten lassen (Klick auf \menu{Yes})
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\subsection{Checkstyle: Einrichten}
|
|
\begin{frame}{Checkstyle: Einrichten}
|
|
\begin{itemize}
|
|
\item "`Checkstyle.xml"' herunterladen: \href{https://raw.github.com/MartinThoma/prog-ws1213/master/Dokumente/whitespace-checks.xml}{tinyurl.com/checkstyle-ws}
|
|
\end{itemize}
|
|
Bei jeden Java-Projekt wieder:
|
|
\begin{itemize}
|
|
\item \menu{Project > Properties > Checkstyle}
|
|
\item Check "`checkstyle active for this project"'
|
|
\item Reiter \menu{Local Check Configurations}
|
|
\item \menu{New\dots}
|
|
\begin{itemize}
|
|
\item Type: "`Internal Configuration"'
|
|
\item Name: "`KIT Checkstyle"'
|
|
\item \menu{Import} $\rightarrow$ "`checkstyle.xml"' auswählen
|
|
\item \menu{OK} klicken
|
|
\end{itemize}
|
|
\item Reiter \menu{Main} auswählen
|
|
\item "`KIT Checkstyle - (Local)"' auswählen
|
|
\item \menu{OK} klicken
|
|
\item "`The project needs to be rebuild [...]"' $\rightarrow$ \menu{Yes}
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Checkstyle: Einrichten}
|
|
Nochmal mit Screenshots: \href{http://martin-thoma.com/checkstyle/}{martin-thoma.com/checkstyle}
|
|
\end{frame}
|
|
|
|
\section{Arrays}
|
|
\subsection{Was sind Arrays ...}
|
|
\begin{frame}{Was sind Arrays ...}
|
|
... und wozu braucht man sie?
|
|
\begin{itemize}
|
|
\item viele Werte in einem Variablennamen
|
|
\item Elemente haben alle den selben Typ
|
|
\item[$\Rightarrow$] zu jeden Typen gibt es Arrays
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\subsection{Visualisierung}
|
|
\begin{frame}{Visualisierung}
|
|
\includegraphics[height=30mm]{array.pdf}
|
|
\begin{itemize}
|
|
\item Indices: 0, 1, 2, 3, 4
|
|
\item Länge des Arrays: 5
|
|
\item Erstes Element: d
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\subsection{Minimalbeispiele}
|
|
\begin{frame}{Minimalbeispiele}
|
|
Deklarieren:
|
|
\inputminted[linenos=false, numbersep=5pt, tabsize=4,firstline=1, lastline=1, fontsize=\small]{java}{singleLines.java}
|
|
\vspace{5 mm}
|
|
Deklarieren und instanziieren:
|
|
\inputminted[linenos=false, numbersep=5pt, tabsize=4,firstline=2, lastline=2, fontsize=\small]{java}{singleLines.java}
|
|
\vspace{5 mm}
|
|
Deklarieren und initialisieren:
|
|
\inputminted[linenos=false, numbersep=5pt, tabsize=4,firstline=3, lastline=4, fontsize=\small]{java}{singleLines.java}
|
|
\end{frame}
|
|
|
|
\subsection{Konvention}
|
|
\begin{frame}{Konvention}
|
|
\begin{itemize}
|
|
\item[(A)] Geht, soll man aber nicht machen:
|
|
\inputminted[linenos=false, numbersep=5pt, tabsize=4,firstline=6, lastline=6, fontsize=\small]{java}{singleLines.java}
|
|
\item[(B)] So ist es gut:
|
|
\inputminted[linenos=false, numbersep=5pt, tabsize=4,firstline=5, lastline=5, fontsize=\small]{java}{singleLines.java}
|
|
\end{itemize}
|
|
|
|
\only<2->{
|
|
Warum ist Variante (B) besser?
|
|
\begin{itemize}
|
|
\item<3-> Der Entwicker kann sofort den Typen sehen
|
|
\item<4-> \href{http://stackoverflow.com/q/13175193/562769}{Konvention}
|
|
\end{itemize}
|
|
}
|
|
\end{frame}
|
|
|
|
\subsection{Ressourcen}
|
|
\begin{frame}{Ressourcen}
|
|
\begin{itemize}
|
|
\item \href{http://docs.oracle.com/javase/specs/jls/se7/jls7.pdf}{JLS 7}: Ab S. 291
|
|
\item \href{http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html}{Java 7 API}
|
|
\item \href{http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html}{Java Tutorial}
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\section{Random Style Guide}
|
|
\subsection{Antipattern: Yoda-Conditions}
|
|
\begin{frame}{Antipattern: Yoda-Conditions}
|
|
\includegraphics[width=60mm]{yoda-condition.png}\\
|
|
\begin{quote}
|
|
Using \myCode{if(constant == variable)} instead of
|
|
\myCode{if(variable == constant)}, like \myCode{if(4 == foo)}.
|
|
Because it's like saying ``if blue is the sky'' or ``if tall
|
|
is the man''.
|
|
\end{quote}
|
|
Source: \href{http://www.codinghorror.com/blog/2012/07/new-programming-jargon.html}{codinghorror.com}\\
|
|
|
|
Bitte nicht machen!
|
|
\end{frame}
|
|
|
|
\subsection{Deklarationen}
|
|
\begin{frame}{Deklarationen}
|
|
\begin{itemize}
|
|
\item 1 $\frac{\text{Deklaration}}{\text{Zeile}}$\\
|
|
\vspace{4mm}
|
|
Nicht so:
|
|
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=19, lastline=19]{java}{JavaDoc.java}
|
|
\vspace{4mm}
|
|
Sondern so:
|
|
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=21, lastline=22]{java}{JavaDoc.java}
|
|
\item Variablen immer dort initialisieren, wo sie deklariert werden\\
|
|
Ausnahme: Initialisierungswert ist von vorherigen Berechnungen abhängig
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\subsection{Antipattern: Stringly Typed}
|
|
\begin{frame}{Antipattern: Stringly Typed}
|
|
\begin{wrapfigure}{r}{3.1cm}
|
|
\includegraphics[width=3cm]{stringly-typed.jpg}
|
|
\end{wrapfigure}
|
|
|
|
Used to describe an implementation that \\
|
|
needlessly relies on strings.\\
|
|
\vspace{2cm}
|
|
Excessively stringly typed code is usually\\
|
|
a pain to understand and detonates at \\
|
|
runtime with errors that the compiler would \\
|
|
normally find.
|
|
|
|
Source: \href{http://www.codinghorror.com/blog/2012/07/new-programming-jargon.html}{codinghorror.com}
|
|
\end{frame}
|
|
|
|
\section{Getter/Setter}
|
|
\subsection{Allgemeines}
|
|
\begin{frame}{Allgemeines}
|
|
Getter und Setter sind \dots
|
|
\begin{itemize}[<+->]
|
|
\item \dots Methoden
|
|
\item \dots ein "`Interface"'
|
|
\item \dots \href{http://de.wikipedia.org/wiki/Zugriffsfunktion}{Zugriffsfunktionen} zur Abfrage und Änderung
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\subsection{Warum Getter/Setter?}
|
|
\begin{frame}{Warum Getter/Setter?}
|
|
Vorteile von Getter und Setter-Methoden sind \dots
|
|
\begin{itemize}[<+->]
|
|
\item \dots (später auftretende) Nebenbedingungen beim get / set
|
|
\item \dots Validierung bei set
|
|
\item \dots Verbergen der Implementierung $\rightarrow$ Geheimnisprinzip
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\subsection{Modifikatoren}
|
|
\begin{frame}{Modifikatoren}
|
|
\begin{block}{Zugriffsmodifikatoren}
|
|
Mit Hilfe von \textbf{Zugriffsmodifikatoren} (access modifiers) lassen sich die
|
|
\textbf{Sichtbarkeiten} von Programmteilen regeln:
|
|
\begin{itemize}
|
|
\item \textbf{public} Element: Element ist für alle Klassen sichtbar
|
|
\item<2-> \textbf{private} Element: Element ist nur innerhalb seiner Klasse sichtbar
|
|
\item<3-> \textbf{protected} Element: Element ist nur innerhalb seiner Klasse, deren
|
|
Subklassen und allen Klassen im selben Paket sichtbar
|
|
$\rightarrow$ später mehr dazu
|
|
\item<4-> \textbf{kein Modifier}: Element ist nur innerhalb seiner Klasse und der
|
|
Klassen im selben Paket sichtbar
|
|
$\rightarrow$ hier nicht so wichtig
|
|
\end{itemize}
|
|
\end{block}
|
|
\only<5->{
|
|
Ab nun:
|
|
\begin{itemize}
|
|
\item Attribute sind (fast) immer private
|
|
\item Methoden können auch private sein
|
|
\end{itemize}
|
|
}
|
|
\end{frame}
|
|
|
|
\subsection{Modifikatoren: Beispiel}
|
|
\begin{frame}{Modifikatoren: Beispiel}
|
|
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, frame=lines, label=Student.java, firstline=1, lastline=10]{java}{Visibility.java}
|
|
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, frame=lines, label=Main.java, firstline=12, lastline=19]{java}{Visibility.java}
|
|
\end{frame}
|
|
|
|
\subsection{Modifikatoren: Beispiel}
|
|
\begin{frame}{Modifikatoren: Beispiel}
|
|
\begin{alertblock}{Neues Problem}
|
|
Jetzt können wir Namen, Semester und Matrikelnummer von außen gar nicht mehr
|
|
auslesen!
|
|
\end{alertblock}
|
|
\only<2->{
|
|
\begin{block}{Auch hierzu gibt es aber eine Lösung:}
|
|
Mit \textbf{getter-Methoden} kann man den Lesezugriff auf Attribute
|
|
wieder erlauben.
|
|
\end{block}
|
|
}
|
|
\end{frame}
|
|
|
|
\subsection{Modifikatoren: Beispiel}
|
|
\begin{frame}{Modifikatoren: Beispiel}
|
|
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, frame=lines, label=Student.java, firstline=21, lastline=30]{java}{Visibility.java}
|
|
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, frame=lines, label=Student.java, firstline=32, lastline=39]{java}{Visibility.java}
|
|
\end{frame}
|
|
|
|
\subsection{Eclipse-Tipp}
|
|
\begin{frame}{Eclipse-Tipp}
|
|
\menu{Source > Generate Getters and Setters\dots}\\
|
|
\includegraphics[width=62mm]{eclipse-getter-setter.png}
|
|
\end{frame}
|
|
|
|
\section{Konventionen}
|
|
\subsection{Kommentare}
|
|
\begin{frame}{Kommentare}
|
|
Typen:
|
|
\begin{itemize}
|
|
\item Implementierungskommentare: \item \myCode{/* blah */} und \myCode{// blah}
|
|
\item Dokumentationskommentare: \myCode{/** blah */}
|
|
\end{itemize}
|
|
|
|
\begin{quote}
|
|
Comments should not be enclosed in large boxes drawn with asterisks or other characters.
|
|
Comments should never include special characters such as form-feed and backspace.
|
|
\end{quote}
|
|
Source: \href{http://www.oracle.com/technetwork/java/codeconventions-150003.pdf}{Java Code Conventions}, S. 7 - 9
|
|
\end{frame}
|
|
|
|
\subsection{JavaDoc: Verwendung}
|
|
\begin{frame}{JavaDoc: Verwendung}
|
|
Soll fast überall benutzt werden:
|
|
\begin{itemize}
|
|
\item Über jeder Klasse
|
|
\item Über jedem Attribut
|
|
\item Über jeder Methode (mit Annotations)
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\subsection{JavaDoc: Annotations}
|
|
\begin{frame}{JavaDoc: Annotations}
|
|
Es gibt folgende Annotations
|
|
\begin{itemize}
|
|
\item \myCode{@param}: Für die Parameter aller Methoden
|
|
\item \myCode{@return}: Für den Rückgabewert vom Methoden
|
|
\item \myCode{@author}: Nur für \myCode{class} und \myCode{interface}, erforderlich
|
|
\end{itemize}
|
|
\vspace{0.5cm}
|
|
Weitere Annotations:
|
|
\begin{itemize}
|
|
\item \myCode{@throws}: Angabe möglicher Fehlermeldungen
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\subsection{JavaDoc: Negativ-Beispiel}
|
|
\begin{frame}{JavaDoc: Negativ-Beispiel}
|
|
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=1, lastline=6]{java}{JavaDoc.java}
|
|
|
|
\begin{itemize}
|
|
\item Was ist hier schlecht?
|
|
\item Wie könnte man es verbessern?
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\subsection{JavaDoc: Positiv-Beispiel}
|
|
\begin{frame}{JavaDoc: Positiv-Beispiel}
|
|
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=9, lastline=16]{java}{JavaDoc.java}
|
|
\end{frame}
|
|
|
|
\section{Kontrollstrukturen}
|
|
\subsection{if-Abfragen}
|
|
\begin{frame}{if-Abfragen}
|
|
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=1, lastline=5]{java}{Kontrollstrukturen.java}
|
|
|
|
KEINE Schleife! $\rightarrow$ \href{http://if-schleife.de/}{if-schleife.de}
|
|
\end{frame}
|
|
|
|
\subsection{if-Abfragen: else if}
|
|
\begin{frame}{if-Abfragen: else if}
|
|
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=7, lastline=13]{java}{Kontrollstrukturen.java}
|
|
\end{frame}
|
|
|
|
\subsection{if-Abfragen: Quiz}
|
|
\begin{frame}{if-Abfragen: Quiz}
|
|
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, frame=lines]{java}{QuizIf.java}
|
|
\end{frame}
|
|
|
|
\subsection{for-Schleifen}
|
|
\begin{frame}{for-Schleifen}
|
|
\begin{itemize}
|
|
\item Syntax: \myCode{for ([INITIALISIERUNG; BEDINGUNG; UPDATE]) \{ \dots \}}
|
|
\end{itemize}
|
|
|
|
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=39, lastline=41]{java}{Kontrollstrukturen.java}
|
|
\end{frame}
|
|
|
|
\subsection{while-Schleifen}
|
|
\begin{frame}{while-Schleifen}
|
|
\begin{itemize}
|
|
\item Syntax: \myCode{while ([BEDINGUNG]) \{ \dots \}}
|
|
\end{itemize}
|
|
|
|
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=35, lastline=37]{java}{Kontrollstrukturen.java}
|
|
\end{frame}
|
|
|
|
\subsection{do-while-Schleifen}
|
|
\begin{frame}{do-while-Schleifen}
|
|
\begin{itemize}
|
|
\item Syntax: \myCode{do \{ \dots \} while ([BEDINGUNG]);}
|
|
\item Wo ist der Unterschied zu \myCode{while}?
|
|
\end{itemize}
|
|
|
|
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=43, lastline=49]{java}{Kontrollstrukturen.java}
|
|
\end{frame}
|
|
|
|
\subsection{Switch-Anweisung}
|
|
\begin{frame}{Switch-Anweisung}
|
|
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, frame=lines, firstline=15, lastline=33, label=World.java]{java}{Kontrollstrukturen.java}
|
|
\end{frame}
|
|
|
|
\section{Praxis}
|
|
\subsection{Praxis}
|
|
\begin{frame}{Praxis}
|
|
Falls noch Zeit bleibt \dots
|
|
\end{frame}
|
|
|
|
\section{Abspann}
|
|
\subsection{Kommende Tutorien}
|
|
\begin{frame}{Kommende Tutorien}
|
|
\begin{itemize}
|
|
\item[11.] 05.11.2012
|
|
\item[10.] 12.11.2012
|
|
\item[9.] 19.11.2012
|
|
\item[8.] 26.11.2012
|
|
\item[7.] 03.12.2012
|
|
\item[6.] 10.12.2012
|
|
\item[5.] 17.12.2012: 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
|
|
\item[0.] 04.02.2013
|
|
\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{Vielen Dank für eure Aufmerksamkeit!}{../images/geekandpoke-2010-10.jpg}
|
|
|
|
\end{document}
|