Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download

📚 The CoCalc Library - books, templates and other resources

132940 views
License: OTHER
1
\documentclass[usepdftitle=false,hyperref={pdfpagelabels=false}]{beamer}
2
3
% use KIT-Theme
4
% see http://sdqweb.ipd.kit.edu/wiki/Dokumentvorlagen
5
%\usetheme{Frankfurt} % see http://deic.uab.es/~iblanes/beamer_gallery/index_by_theme.html as fallback
6
\InputIfFileExists{../templates/beamerthemekit.sty}{\usepackage{../templates/beamerthemekit}}{\usetheme{Frankfurt}}
7
\usefonttheme{professionalfonts}
8
9
\usepackage{hyperref}
10
\usepackage{lmodern}
11
\usepackage{listings}
12
\usepackage{wrapfig} % see http://en.wikibooks.org/wiki/LaTeX/Floats,_Figures_and_Captions
13
\usepackage[utf8]{inputenc} % this is needed for german umlauts
14
\usepackage[ngerman]{babel} % this is needed for german umlauts
15
\usepackage[T1]{fontenc} % this is needed for correct output of umlauts in pdf
16
\usepackage{verbatim}
17
\usepackage{relsize}
18
\usepackage{subfigure}
19
\usepackage{algorithm,algpseudocode}
20
\usepackage{minted} % needed for the inclusion of source code
21
\usepackage{xcolor}
22
\usepackage{menukeys}
23
\usepackage{../templates/myStyle}
24
25
\newcommand\tutor{Martin Thoma}
26
\newcommand\tutNR{10}
27
\newcommand\titleText{Programmieren-Tutorium Nr. \tutNR{} bei \tutor}
28
\institute{Fakultät für Informatik}
29
30
\hypersetup{pdftitle={\titleText}}
31
\beamertemplatenavigationsymbolsempty
32
33
\newcommand\InsertToC[1][]{
34
\begin{frame}{Outline}
35
\tableofcontents[subsectionstyle=show/show/show, subsubsectionstyle=show/show/show, #1]
36
\end{frame}
37
}
38
39
\begin{document}
40
\title{\titleText}
41
\subtitle{Eclipse, Arrays, Kontrollstrukturen und Konventionen}
42
\author{\tutor}
43
\date{\today}
44
\subject{Programmieren}
45
46
\frame{\titlepage}
47
48
\frame{
49
\frametitle{Inhaltsverzeichnis}
50
\setcounter{tocdepth}{1}
51
\tableofcontents
52
\setcounter{tocdepth}{2}
53
}
54
55
%\AtBeginSection[]{
56
% \InsertToC[sections={\thesection}] % shows only subsubsections of one subsection
57
%}
58
59
\section{Einleitung}
60
\subsection{Quiz}
61
\begin{frame}{Quiz}
62
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small]{java}{Quiz.java}
63
\begin{itemize}
64
\item Was ist die Ausgabe?
65
\item Gibt es einen Compiler-Fehler?
66
\item Gibt es einen Laufzeit-Fehler?
67
\end{itemize}
68
\end{frame}
69
70
\subsection{Quiz: Antwort}
71
\begin{frame}{Quiz: Antwort}
72
Ein Compiler-Fehler:
73
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small]{console}{Quiz-Answer.sh-session}
74
\end{frame}
75
76
77
78
\section{Eclipse}
79
\subsection{Frühere Folien}
80
\begin{frame}{Frühere Folien}
81
\begin{itemize}
82
\item Installation (für Windows): \href{http://www.eclipse.org/}{eclipse.org}
83
\item \menu{Window > Open Perspective > Java}
84
\item \menu{Window > Show Toolbar}
85
\item \menu{Window > Preferences > General > Editors > Text Editors}
86
\begin{itemize}
87
\item Show line numbers
88
\item Print margin column: 120
89
\end{itemize}
90
\end{itemize}
91
\end{frame}
92
93
\subsection{Checkstyle: Installation}
94
\begin{frame}{Checkstyle: Installation}
95
\begin{itemize}
96
\item Internetverbindung wird benötigt!
97
\item \menu{Help > Install New Software}
98
\item Work with: \myCode{http://eclipse-cs.sf.net/update/}
99
\item Klick auf \menu{Add...}
100
\item Name: "`Checkstyle"'
101
\item Warten
102
\item Nun sollten zwei Einträge erscheinen
103
\item "`Checkstyle"' auswählen
104
\item auf \menu{Next} klicken (und dann nochmal)
105
\item "`I accept the terms of the licence agreement"'
106
\item auf \menu{Finish} klicken und dann herunterladen lassen
107
\item "`Warning: You are installing software [...]"' $\rightarrow$ klick auf \menu{OK}
108
\item Eclipse neustarten lassen (Klick auf \menu{Yes})
109
\end{itemize}
110
\end{frame}
111
112
\subsection{Checkstyle: Einrichten}
113
\begin{frame}{Checkstyle: Einrichten}
114
\begin{itemize}
115
\item "`Checkstyle.xml"' herunterladen: \href{https://raw.github.com/MartinThoma/prog-ws1213/master/Dokumente/whitespace-checks.xml}{tinyurl.com/checkstyle-ws}
116
\end{itemize}
117
Bei jeden Java-Projekt wieder:
118
\begin{itemize}
119
\item \menu{Project > Properties > Checkstyle}
120
\item Check "`checkstyle active for this project"'
121
\item Reiter \menu{Local Check Configurations}
122
\item \menu{New\dots}
123
\begin{itemize}
124
\item Type: "`Internal Configuration"'
125
\item Name: "`KIT Checkstyle"'
126
\item \menu{Import} $\rightarrow$ "`checkstyle.xml"' auswählen
127
\item \menu{OK} klicken
128
\end{itemize}
129
\item Reiter \menu{Main} auswählen
130
\item "`KIT Checkstyle - (Local)"' auswählen
131
\item \menu{OK} klicken
132
\item "`The project needs to be rebuild [...]"' $\rightarrow$ \menu{Yes}
133
\end{itemize}
134
\end{frame}
135
136
\begin{frame}{Checkstyle: Einrichten}
137
Nochmal mit Screenshots: \href{http://martin-thoma.com/checkstyle/}{martin-thoma.com/checkstyle}
138
\end{frame}
139
140
\section{Arrays}
141
\subsection{Was sind Arrays ...}
142
\begin{frame}{Was sind Arrays ...}
143
... und wozu braucht man sie?
144
\begin{itemize}
145
\item viele Werte in einem Variablennamen
146
\item Elemente haben alle den selben Typ
147
\item[$\Rightarrow$] zu jeden Typen gibt es Arrays
148
\end{itemize}
149
\end{frame}
150
151
\subsection{Visualisierung}
152
\begin{frame}{Visualisierung}
153
\includegraphics[height=30mm]{array.pdf}
154
\begin{itemize}
155
\item Indices: 0, 1, 2, 3, 4
156
\item Länge des Arrays: 5
157
\item Erstes Element: d
158
\end{itemize}
159
\end{frame}
160
161
\subsection{Minimalbeispiele}
162
\begin{frame}{Minimalbeispiele}
163
Deklarieren:
164
\inputminted[linenos=false, numbersep=5pt, tabsize=4,firstline=1, lastline=1, fontsize=\small]{java}{singleLines.java}
165
\vspace{5 mm}
166
Deklarieren und instanziieren:
167
\inputminted[linenos=false, numbersep=5pt, tabsize=4,firstline=2, lastline=2, fontsize=\small]{java}{singleLines.java}
168
\vspace{5 mm}
169
Deklarieren und initialisieren:
170
\inputminted[linenos=false, numbersep=5pt, tabsize=4,firstline=3, lastline=4, fontsize=\small]{java}{singleLines.java}
171
\end{frame}
172
173
\subsection{Konvention}
174
\begin{frame}{Konvention}
175
\begin{itemize}
176
\item[(A)] Geht, soll man aber nicht machen:
177
\inputminted[linenos=false, numbersep=5pt, tabsize=4,firstline=6, lastline=6, fontsize=\small]{java}{singleLines.java}
178
\item[(B)] So ist es gut:
179
\inputminted[linenos=false, numbersep=5pt, tabsize=4,firstline=5, lastline=5, fontsize=\small]{java}{singleLines.java}
180
\end{itemize}
181
182
\only<2->{
183
Warum ist Variante (B) besser?
184
\begin{itemize}
185
\item<3-> Der Entwicker kann sofort den Typen sehen
186
\item<4-> \href{http://stackoverflow.com/q/13175193/562769}{Konvention}
187
\end{itemize}
188
}
189
\end{frame}
190
191
\subsection{Ressourcen}
192
\begin{frame}{Ressourcen}
193
\begin{itemize}
194
\item \href{http://docs.oracle.com/javase/specs/jls/se7/jls7.pdf}{JLS 7}: Ab S. 291
195
\item \href{http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html}{Java 7 API}
196
\item \href{http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html}{Java Tutorial}
197
\end{itemize}
198
\end{frame}
199
200
\section{Random Style Guide}
201
\subsection{Antipattern: Yoda-Conditions}
202
\begin{frame}{Antipattern: Yoda-Conditions}
203
\includegraphics[width=60mm]{yoda-condition.png}\\
204
\begin{quote}
205
Using \myCode{if(constant == variable)} instead of
206
\myCode{if(variable == constant)}, like \myCode{if(4 == foo)}.
207
Because it's like saying ``if blue is the sky'' or ``if tall
208
is the man''.
209
\end{quote}
210
Source: \href{http://www.codinghorror.com/blog/2012/07/new-programming-jargon.html}{codinghorror.com}\\
211
212
Bitte nicht machen!
213
\end{frame}
214
215
\subsection{Deklarationen}
216
\begin{frame}{Deklarationen}
217
\begin{itemize}
218
\item 1 $\frac{\text{Deklaration}}{\text{Zeile}}$\\
219
\vspace{4mm}
220
Nicht so:
221
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=19, lastline=19]{java}{JavaDoc.java}
222
\vspace{4mm}
223
Sondern so:
224
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=21, lastline=22]{java}{JavaDoc.java}
225
\item Variablen immer dort initialisieren, wo sie deklariert werden\\
226
Ausnahme: Initialisierungswert ist von vorherigen Berechnungen abhängig
227
\end{itemize}
228
\end{frame}
229
230
\subsection{Antipattern: Stringly Typed}
231
\begin{frame}{Antipattern: Stringly Typed}
232
\begin{wrapfigure}{r}{3.1cm}
233
\includegraphics[width=3cm]{stringly-typed.jpg}
234
\end{wrapfigure}
235
236
Used to describe an implementation that \\
237
needlessly relies on strings.\\
238
\vspace{2cm}
239
Excessively stringly typed code is usually\\
240
a pain to understand and detonates at \\
241
runtime with errors that the compiler would \\
242
normally find.
243
244
Source: \href{http://www.codinghorror.com/blog/2012/07/new-programming-jargon.html}{codinghorror.com}
245
\end{frame}
246
247
\section{Getter/Setter}
248
\subsection{Allgemeines}
249
\begin{frame}{Allgemeines}
250
Getter und Setter sind \dots
251
\begin{itemize}[<+->]
252
\item \dots Methoden
253
\item \dots ein "`Interface"'
254
\item \dots \href{http://de.wikipedia.org/wiki/Zugriffsfunktion}{Zugriffsfunktionen} zur Abfrage und Änderung
255
\end{itemize}
256
\end{frame}
257
258
\subsection{Warum Getter/Setter?}
259
\begin{frame}{Warum Getter/Setter?}
260
Vorteile von Getter und Setter-Methoden sind \dots
261
\begin{itemize}[<+->]
262
\item \dots (später auftretende) Nebenbedingungen beim get / set
263
\item \dots Validierung bei set
264
\item \dots Verbergen der Implementierung $\rightarrow$ Geheimnisprinzip
265
\end{itemize}
266
\end{frame}
267
268
\subsection{Modifikatoren}
269
\begin{frame}{Modifikatoren}
270
\begin{block}{Zugriffsmodifikatoren}
271
Mit Hilfe von \textbf{Zugriffsmodifikatoren} (access modifiers) lassen sich die
272
\textbf{Sichtbarkeiten} von Programmteilen regeln:
273
\begin{itemize}
274
\item \textbf{public} Element: Element ist für alle Klassen sichtbar
275
\item<2-> \textbf{private} Element: Element ist nur innerhalb seiner Klasse sichtbar
276
\item<3-> \textbf{protected} Element: Element ist nur innerhalb seiner Klasse, deren
277
Subklassen und allen Klassen im selben Paket sichtbar
278
$\rightarrow$ später mehr dazu
279
\item<4-> \textbf{kein Modifier}: Element ist nur innerhalb seiner Klasse und der
280
Klassen im selben Paket sichtbar
281
$\rightarrow$ hier nicht so wichtig
282
\end{itemize}
283
\end{block}
284
\only<5->{
285
Ab nun:
286
\begin{itemize}
287
\item Attribute sind (fast) immer private
288
\item Methoden können auch private sein
289
\end{itemize}
290
}
291
\end{frame}
292
293
\subsection{Modifikatoren: Beispiel}
294
\begin{frame}{Modifikatoren: Beispiel}
295
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, frame=lines, label=Student.java, firstline=1, lastline=10]{java}{Visibility.java}
296
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, frame=lines, label=Main.java, firstline=12, lastline=19]{java}{Visibility.java}
297
\end{frame}
298
299
\subsection{Modifikatoren: Beispiel}
300
\begin{frame}{Modifikatoren: Beispiel}
301
\begin{alertblock}{Neues Problem}
302
Jetzt können wir Namen, Semester und Matrikelnummer von außen gar nicht mehr
303
auslesen!
304
\end{alertblock}
305
\only<2->{
306
\begin{block}{Auch hierzu gibt es aber eine Lösung:}
307
Mit \textbf{getter-Methoden} kann man den Lesezugriff auf Attribute
308
wieder erlauben.
309
\end{block}
310
}
311
\end{frame}
312
313
\subsection{Modifikatoren: Beispiel}
314
\begin{frame}{Modifikatoren: Beispiel}
315
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, frame=lines, label=Student.java, firstline=21, lastline=30]{java}{Visibility.java}
316
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, frame=lines, label=Student.java, firstline=32, lastline=39]{java}{Visibility.java}
317
\end{frame}
318
319
\subsection{Eclipse-Tipp}
320
\begin{frame}{Eclipse-Tipp}
321
\menu{Source > Generate Getters and Setters\dots}\\
322
\includegraphics[width=62mm]{eclipse-getter-setter.png}
323
\end{frame}
324
325
\section{Konventionen}
326
\subsection{Kommentare}
327
\begin{frame}{Kommentare}
328
Typen:
329
\begin{itemize}
330
\item Implementierungskommentare: \item \myCode{/* blah */} und \myCode{// blah}
331
\item Dokumentationskommentare: \myCode{/** blah */}
332
\end{itemize}
333
334
\begin{quote}
335
Comments should not be enclosed in large boxes drawn with asterisks or other characters.
336
Comments should never include special characters such as form-feed and backspace.
337
\end{quote}
338
Source: \href{http://www.oracle.com/technetwork/java/codeconventions-150003.pdf}{Java Code Conventions}, S. 7 - 9
339
\end{frame}
340
341
\subsection{JavaDoc: Verwendung}
342
\begin{frame}{JavaDoc: Verwendung}
343
Soll fast überall benutzt werden:
344
\begin{itemize}
345
\item Über jeder Klasse
346
\item Über jedem Attribut
347
\item Über jeder Methode (mit Annotations)
348
\end{itemize}
349
\end{frame}
350
351
\subsection{JavaDoc: Annotations}
352
\begin{frame}{JavaDoc: Annotations}
353
Es gibt folgende Annotations
354
\begin{itemize}
355
\item \myCode{@param}: Für die Parameter aller Methoden
356
\item \myCode{@return}: Für den Rückgabewert vom Methoden
357
\item \myCode{@author}: Nur für \myCode{class} und \myCode{interface}, erforderlich
358
\end{itemize}
359
\vspace{0.5cm}
360
Weitere Annotations:
361
\begin{itemize}
362
\item \myCode{@throws}: Angabe möglicher Fehlermeldungen
363
\end{itemize}
364
\end{frame}
365
366
\subsection{JavaDoc: Negativ-Beispiel}
367
\begin{frame}{JavaDoc: Negativ-Beispiel}
368
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=1, lastline=6]{java}{JavaDoc.java}
369
370
\begin{itemize}
371
\item Was ist hier schlecht?
372
\item Wie könnte man es verbessern?
373
\end{itemize}
374
\end{frame}
375
376
\subsection{JavaDoc: Positiv-Beispiel}
377
\begin{frame}{JavaDoc: Positiv-Beispiel}
378
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=9, lastline=16]{java}{JavaDoc.java}
379
\end{frame}
380
381
\section{Kontrollstrukturen}
382
\subsection{if-Abfragen}
383
\begin{frame}{if-Abfragen}
384
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=1, lastline=5]{java}{Kontrollstrukturen.java}
385
386
KEINE Schleife! $\rightarrow$ \href{http://if-schleife.de/}{if-schleife.de}
387
\end{frame}
388
389
\subsection{if-Abfragen: else if}
390
\begin{frame}{if-Abfragen: else if}
391
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=7, lastline=13]{java}{Kontrollstrukturen.java}
392
\end{frame}
393
394
\subsection{if-Abfragen: Quiz}
395
\begin{frame}{if-Abfragen: Quiz}
396
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, frame=lines]{java}{QuizIf.java}
397
\end{frame}
398
399
\subsection{for-Schleifen}
400
\begin{frame}{for-Schleifen}
401
\begin{itemize}
402
\item Syntax: \myCode{for ([INITIALISIERUNG; BEDINGUNG; UPDATE]) \{ \dots \}}
403
\end{itemize}
404
405
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=39, lastline=41]{java}{Kontrollstrukturen.java}
406
\end{frame}
407
408
\subsection{while-Schleifen}
409
\begin{frame}{while-Schleifen}
410
\begin{itemize}
411
\item Syntax: \myCode{while ([BEDINGUNG]) \{ \dots \}}
412
\end{itemize}
413
414
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=35, lastline=37]{java}{Kontrollstrukturen.java}
415
\end{frame}
416
417
\subsection{do-while-Schleifen}
418
\begin{frame}{do-while-Schleifen}
419
\begin{itemize}
420
\item Syntax: \myCode{do \{ \dots \} while ([BEDINGUNG]);}
421
\item Wo ist der Unterschied zu \myCode{while}?
422
\end{itemize}
423
424
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\small, firstline=43, lastline=49]{java}{Kontrollstrukturen.java}
425
\end{frame}
426
427
\subsection{Switch-Anweisung}
428
\begin{frame}{Switch-Anweisung}
429
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, frame=lines, firstline=15, lastline=33, label=World.java]{java}{Kontrollstrukturen.java}
430
\end{frame}
431
432
\section{Praxis}
433
\subsection{Praxis}
434
\begin{frame}{Praxis}
435
Falls noch Zeit bleibt \dots
436
\end{frame}
437
438
\section{Abspann}
439
\subsection{Kommende Tutorien}
440
\begin{frame}{Kommende Tutorien}
441
\begin{itemize}
442
\item[11.] 05.11.2012
443
\item[10.] 12.11.2012
444
\item[9.] 19.11.2012
445
\item[8.] 26.11.2012
446
\item[7.] 03.12.2012
447
\item[6.] 10.12.2012
448
\item[5.] 17.12.2012: Video "`Library"' zeigen
449
\item[-] 24.12.2012: Heiligabend - \href{http://www.fmc.uni-karlsruhe.de/faq/wann-sind-die-weihnachtsferien}{Kein Tutorium}
450
\item[-] 31.12.2012: Silvester - Kein Tutorium
451
\item[4.] 07.01.2013
452
\item[3.] 14.01.2013
453
\item[2.] 21.01.2013
454
\item[1.] 28.01.2013
455
\item[0.] 04.02.2013
456
\item[-] 10.02.2013: Ende der Vorlesungszeit des WS 2012/2013 (\href{http://www.kit.edu/studieren/2873.php}{Quelle})
457
\end{itemize}
458
\end{frame}
459
460
\framedgraphic{Vielen Dank für eure Aufmerksamkeit!}{../images/geekandpoke-2010-10.jpg}
461
462
\end{document}
463
464