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{menukeys}
22
\usepackage{xcolor}
23
\usepackage{pifont}% http://ctan.org/pkg/pifont
24
\newcommand{\cmark}{\ding{51}}%
25
\newcommand{\xmark}{\ding{55}}%
26
\usepackage{../templates/myStyle}
27
28
\newcommand\tutor{Martin Thoma}
29
\newcommand\tutNR{10}
30
\newcommand\titleText{Programmieren-Tutorium Nr. \tutNR{} bei \tutor}
31
\institute{Fakultät für Informatik}
32
33
\hypersetup{pdftitle={\titleText}}
34
\beamertemplatenavigationsymbolsempty
35
36
\newcommand\InsertToC[1][]{
37
\begin{frame}{Outline}
38
\tableofcontents[subsectionstyle=show/show/show, subsubsectionstyle=show/show/show, #1]
39
\end{frame}
40
}
41
42
\begin{document}
43
\title{\titleText}
44
\subtitle{Pakete}
45
\author{\tutor}
46
\date{\today}
47
\subject{Programmieren}
48
49
\frame{\titlepage}
50
51
\frame{
52
\frametitle{Inhaltsverzeichnis}
53
\setcounter{tocdepth}{1}
54
\tableofcontents
55
\setcounter{tocdepth}{2}
56
}
57
58
\section{Einleitung}
59
\subsection{Quiz}
60
\begin{frame}{Quiz}
61
\begin{minipage}[b]{0.45\linewidth}
62
\inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=String.java, frame=lines]{java}{String.java}
63
\end{minipage}
64
\hspace{0.5cm}
65
\begin{minipage}[b]{0.45\linewidth}
66
\inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=World.java, frame=lines]{java}{World.java}
67
\end{minipage}
68
\begin{itemize}
69
\item Gibt es einen Compiler-Fehler?
70
\item Gibt es einen Laufzeit-Fehler?
71
\item Gibt es eine Ausgabe? Welche?
72
\end{itemize}
73
\end{frame}
74
75
\begin{frame}{Ergebnis}
76
\myCode{Exception in thread "main" java.lang.NoSuchMethodError: main}\\
77
Es gibt nun keine \\
78
\myCode{public static void main(java.lang.String[] args) \{}\\
79
\begin{block}{Lehre}
80
Keine Java-internen Typen umschreiben.
81
\end{block}
82
\end{frame}
83
84
85
\section{ÜB 2}
86
\subsection{Nachbesprechung ÜB 2}
87
\begin{frame}{Allgmeines}
88
\begin{block}{Musterlösung}
89
Inoffizielle Musterlösung von Simon und mir ist unter
90
\href{http://goo.gl/BfA6i}{http://goo.gl/BfA6i} erhältlich.\\
91
Bitte dort anschauen.
92
\end{block}
93
\end{frame}
94
95
\begin{frame}{Allgmeines}
96
\begin{block}{Stil}
97
\begin{itemize}[<+->]
98
\item Niemals \myCode{if (variable == true)}, sondern \myCode{if (variable)}
99
\item "`Dead Code"' - also Code der niemals erreicht wird - wird bestraft
100
\item Große Probleme ($\rightarrow$ lange Methoden) aufsplitten
101
\end{itemize}
102
\end{block}
103
104
\begin{itemize}[<+->]
105
\item Die bereitgestellten Code-Vorlagen sind keine Musterlösungen!
106
\item Kein "`TODO"' in Abgaben
107
\item Aufgabe B1 (Histogramm) war fehlerhaft: Natürlich muss der Kontrast nur "`nicht-negativ"' sein und nicht "`positiv"'
108
\item Laufvariablen müssen nicht immer \myCode{i} und \myCode{j} heißen
109
\item Schaut euch die hochgeladeten Dateien im Praktomat an
110
\item Redundanter Code ist schlecht $\Rightarrow$ Besser: Neue Methode anlegen
111
\end{itemize}
112
\end{frame}
113
114
\begin{frame}{Allgemeines}
115
\begin{block}{Genau lesen}
116
\begin{itemize}[<+->]
117
\item \textbf{A.1.1 Konstruktor von Bike}: "`Modifizieren Sie
118
den Konstruktor der Klasse Bike, indem Sie aus der
119
Signatur das Argument, nach dem bisher der Preis
120
gesetzt wird, entfernen."'
121
\item \textbf{A.1.2 Setter für Gears} "`Schreiben Sie den
122
Konstruktor so um, dass er die Methode setSprockets
123
benutzt, um einen konsistenten Anfangszustand zu
124
garantieren."'
125
\item \textbf{A.2.1 Tribonacci-Folge}: "`Geben Sie \textbf{nur} die
126
siebenunddreißigste Tribonacci-Zahl auf der Konsole
127
aus."'
128
\item[$\Rightarrow$] Es werden automatische Tests durchgeführt.
129
Stimmt die Ausgabe nicht exakt - also jedes einzelne
130
(Leer)zeichen -, schlägt der Test fehl.
131
\end{itemize}
132
\end{block}
133
\end{frame}
134
135
\begin{frame}{Tipp für BikeShop}
136
\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);}}
137
\end{frame}
138
139
\begin{frame}{setSprockets}
140
\inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\tiny, label=Gears.java, frame=lines, firstline=25, lastline=51]{java}{Gears.java}
141
\end{frame}
142
143
\begin{frame}{Einheiten}
144
Einheiten \textbf{immer} angeben, da \dots
145
\begin{itemize}[<+->]
146
\item nie klar ist, welche Einheit gemeint ist
147
\item es ein richtig ärgerlicher Fehler ist
148
\item fehlende Einheiten viel Geld kosten können ($\rightarrow$ \href{http://www.youtube.com/watch?v=q2L5\_swAT5A}{Video: NASA Measuring Failure} - Mars Orbiter)
149
\end{itemize}
150
\end{frame}
151
152
\begin{frame}{Attribute}
153
\begin{alertblock}{Attribute}
154
\begin{itemize}
155
\item Attribute sind Eigenschaften eines Objekts oder einer Klasse
156
\item Attribute sind keine Hilfsvariablen
157
\end{itemize}
158
\end{alertblock}
159
\end{frame}
160
161
\begin{frame}{Vergleiche mit floats}
162
Nicht jede Zahl kann als Gleitkomma-Zahl dargestellt werden:
163
\includegraphics[height=50mm]{Gleitkommazahlen.png}\\
164
\tiny{Quelle: \href{http://de.wikipedia.org/wiki/Datei:Gleitkommazahlen.svg}{de.wikipedia.org/wiki/Datei:Gleitkommazahlen.svg}}\\
165
166
167
\end{frame}
168
169
\begin{frame}{Vergleiche mit floats}
170
Zusätzlich sollte man bei der Camera-Aufgabe von $\varepsilon = 10^6$ ausgehen.\\
171
Die Vergleiche müssen also etwa so aussehen:
172
\inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\small, firstnumber=24, firstline=24, lastline=33]{java}{Camera.java}
173
\end{frame}
174
175
\begin{frame}{Camera.java: isLeftContrastHigher}
176
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, firstnumber=35, firstline=35, lastline=55]{java}{Camera.java}
177
\end{frame}
178
179
\begin{frame}{Camera.java: Eigentlicher Code}
180
\inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny, firstnumber=57, firstline=57, lastline=87]{java}{Camera.java}
181
\end{frame}
182
183
\begin{frame}{Gerüchteküche}
184
Bringt es einen Vorteil, eine schwere Aufgabe nicht zu bearbeiten?
185
\begin{itemize}[<+->]
186
\item Es gibt für jede Teilaufgabe ein Punktekontingent
187
\item Bearbeitet ihr eine Teilaufgabe nicht, ziehe ich alle Punkte ab
188
\item Bearbeitet ihr einen Teil einer Teilaufgabe nicht, ziehe
189
ich mindestens so viele Punkte ab, wie derjenige mit dem
190
höchstem Abzug abgezogen bekommen hat
191
\item Wenn der Code nicht das tut, was gefordert wird, kann ich
192
auch alles abziehen
193
\item[$\Rightarrow$] Nein, es bringt keinen Vorteil
194
\end{itemize}
195
\end{frame}
196
197
\section{Vorlesungsergänzungen}
198
\subsection{Pakete}
199
\begin{frame}{Pakete}
200
\begin{itemize}[<+->]
201
\item Dienen der Strukturierung des Quelltextes
202
\item Sollen Namenskonflikte vermeiden (z.B. Klasse \myCode{Person}
203
in einem Paket \myCode{uni} ist wohl anders als Klasse
204
\myCode{Person} im Paket \myCode{politik})
205
\item Können über \myCode{.jar}-Dateien eingebunden werden
206
\item Könnt ihr über \keys{\shift + Alt + N} und \menu{Package}
207
oder mit einem Rechtsklick in Eclipse erzeugen:
208
\includegraphics[height=30mm]{new-package.png}\\
209
\item Eine Klasse ist Teil eines Paketes, wenn sie \dots
210
\begin{itemize}
211
\item in dem Ordner mit dem Paketnamen liegt
212
\item sie \myCode{package <paketname>;} ganz am Anfang stehen hat
213
\end{itemize}
214
\end{itemize}
215
\end{frame}
216
217
\begin{frame}{Pakete}
218
\begin{block}{Namenskonventionen}
219
\begin{itemize}
220
\item Pakete werden klein geschrieben
221
\item Pakete können "`Unterpakete"' haben. Dies wird durch
222
einen Punkt angedeutet:
223
\begin{itemize}
224
\item \href{http://docs.oracle.com/javase/7/docs/api/overview-summary.html}{Offizielle Pakete}:
225
\item \href{http://docs.oracle.com/javase/7/docs/api/java/io/package-summary.html}{java.io}
226
\item \href{http://docs.oracle.com/javase/7/docs/api/java/lang/package-summary.html}{java.lang} - hat z.B. \myCode{Byte}, \myCode{Integer}, \dots
227
\item \href{http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/package-summary.html}{java.lang.annotation}
228
\end{itemize}
229
\end{itemize}
230
\end{block}
231
\end{frame}
232
233
\begin{frame}{Pakete: protected}
234
\begin{tabular}{l||c|c|c|c}
235
Modifier & Class & Package & Subclass & World\\
236
\hline\hline
237
\myCode{public} & \cmark & \cmark & \cmark & \cmark \\
238
\myCode{protected} & \cmark & \cmark & \cmark & \xmark \\
239
no modifier & \cmark & \cmark & \xmark & \xmark \\
240
\myCode{private} & \cmark & \xmark & \xmark & \xmark
241
\end{tabular}
242
243
\small{Weitere Informationen: \href{http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html}{Controlling Access to Members of a Class}}
244
\pause
245
\begin{block}{Tipp}
246
\myCode{private} macht fast immer Sinn. Wenn ihr nicht wisst,
247
ob ihr \myCode{private} oder \myCode{protected} nehmen sollt,
248
nehmt protected. Kein modifier macht selten Sinn. Das sieht
249
so aus, als ob ihr es dem Zufall überlasst.
250
\end{block}
251
\end{frame}
252
253
\subsection{foreach-Schleife}
254
\begin{frame}{foreach in Java: Allgemeines}
255
Foreach \dots
256
\begin{itemize}[<+->]
257
\item wird in Java-Kreisen manchmal auch "`Enhanced for loop"' genannt
258
\item geht alle Elemente einer
259
\href{http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html}{Collection}
260
durch zu gehen (genauer: \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html}{Iterable})
261
\item sollte verwendet werden, wenn man es verwenden kann
262
\item ist auch in der \href{http://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html}{Dokumentation} (Nur in 1.5?)
263
und im \href{http://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html}{Tutorial}
264
\item ist in der \href{http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html\#jls-14.14.2}{JLS SE7} spezifiziert
265
\item ist Teil des \href{http://docs.oracle.com/javase/tutorial/extra/certification/javase-7-programmer1.html}{Programmer Level I Exams}
266
für das "`Programmer Language Certification"'
267
\end{itemize}
268
\end{frame}
269
\begin{frame}{foreach in Java: Beispiel}
270
\inputminted[linenos=false, numbersep=5pt, tabsize=4, fontsize=\small, firstline=3, lastline=13]{java}{foreach.java}
271
\end{frame}
272
273
\section{ÜB 3}
274
\subsection{Hinweise zu ÜB 3}
275
\begin{frame}{Hinweise zu ÜB 3}
276
\begin{itemize}[<+->]
277
\item Nur Klassen und Methoden aus \myCode{java.lang} sind erlaubt
278
\item \textbf{Keine} Textausgabe und keine Schreibzugriffe auf Dateien
279
\item JavaDoc und Datenkapselung ($\rightarrow$ \myCode{private}) sind nun Pflicht
280
\item Pakete sollten nun verwendet werden
281
\item[$\Rightarrow$] Achtung beim Upload in den Praktomaten! vgl. tutorium-05.pdf, Folien 23-24
282
\item[A.1.1] Nur die \myCode{statements.csv} als Abgabe!
283
\item[A.2] \myCode{StrangeClass.java} soll wirklich \textbf{nirgends} "`f"' und kein "`d"' haben
284
\item[A.3] Levenshtein-Distanz $\rightarrow$ nächste Folie
285
\item[A.4] Geometrie $\rightarrow$ übernächste Folie
286
\item[B.1] Der Kommentar, warum ihr die Modifier (\myCode{private, public, protected})
287
verwendet, soll natürlich direkt zum jeweiligen modifier und NICHT in
288
eine extra Textdatei!
289
\end{itemize}
290
\end{frame}
291
292
\subsection{Levenshtein-Distanz}
293
\begin{frame}{A.3 Levenshtein-Distanz}
294
\begin{itemize}[<+->]
295
\item Wer hat sichs angeschaut?
296
\item Verstanden? Falls nicht sind folgende Seiten einen Versuch wert:
297
\begin{itemize}
298
\item \href{http://oldfashionedsoftware.com/tag/levenshtein-distance/}{Guter Artikel}, aber nur bis "`Some Code, Finally"' relevant
299
\item \href{http://de.wikipedia.org/wiki/Levenshtein-Distanz}{de-Wikipedia}
300
\item \href{http://en.wikipedia.org/wiki/Levenshtein_Distance\#Computing_Levenshtein_distance}{en-Wiki} mit Pseudocode
301
\item \href{http://www-igm.univ-mlv.fr/~lecroq/seqcomp/node2.html}{eine Visualisierung}
302
\end{itemize}
303
\begin{alertblock}{Achtung!}
304
Der Algorithmus muss modifiziert werden. Durch die Modifikationen entspricht
305
der Algorithmus nicht mehr den Varianten, die sich im Internet finden lassen.
306
Ohne diese Modifikationen kann ich euch keine Punkte geben!
307
\end{alertblock}
308
\end{itemize}
309
\end{frame}
310
311
\subsection{A.4 Geometrie}
312
\begin{frame}{A.4 Geometrie}
313
\begin{itemize}[<+->]
314
\item Manhattan-Distanz:\\
315
\includegraphics[height=30mm]{ManhattanDistance.pdf}\\
316
\tiny{Quelle: \href{http://commons.wikimedia.org/wiki/File:Manhattan\_distance.svg}{commons.wikipedia.org/wiki/File:Manhattan\_distance.svg}}
317
\end{itemize}
318
\end{frame}
319
320
\section{Praxis}
321
\subsection{Aufgaben}
322
\begin{frame}{Aufgaben}
323
Siehe Blätter 5, 6 und 7 in \menu{prog-official > tut\_aufgaben\_ws1112}
324
\end{frame}
325
326
\section{Abspann}
327
\subsection{Tutorium 7}
328
\begin{frame}{Tutorium 7}
329
\begin{block}{ÜB 4: Achtung}
330
\begin{itemize}
331
\item Sehr große Aufgabe (viele Methoden / Klassen)
332
\item Die meisten Methoden benötigen nur ein bis vier Zeilen
333
\end{itemize}
334
\end{block}
335
336
\begin{block}{Themenvorschläge fürs nächste mal}
337
\begin{itemize}
338
\item \href{http://docs.oracle.com/javase/7/docs/technotes/guides/language/assert.html}{Assertions}
339
\item Verkettete Listen
340
\item Allgemeine Übungsaufgaben
341
\end{itemize}
342
\end{block}
343
\end{frame}
344
345
\subsection{Nachhilfe}
346
\begin{frame}{Nachhilfe}
347
\begin{itemize}[<+->]
348
\item Falls ihr Nachhilfe braucht, meldet euch bei mir oder
349
dem Übungsleiter (Florian Merz)
350
\item Euch wird dann ein Nachhilfelehrer vermittelt
351
\item Die Kosten müsst ihr mit dem Nachhilfelehrer aushandeln
352
\end{itemize}
353
\end{frame}
354
355
\subsection{Kommende Tutorien}
356
\begin{frame}{Kommende Tutorien}
357
\begin{itemize}
358
\item[8.] 26.11.2012
359
\item[7.] 03.12.2012
360
\item[6.] 10.12.2012
361
\item[5.] 17.12.2012: Video "`Library"' zeigen
362
\item[-] 24.12.2012: Heiligabend - \href{http://www.fmc.uni-karlsruhe.de/faq/wann-sind-die-weihnachtsferien}{Kein Tutorium}
363
\item[-] 31.12.2012: Silvester - Kein Tutorium
364
\item[4.] 07.01.2013
365
\item[3.] 14.01.2013
366
\item[2.] 21.01.2013
367
\item[1.] 28.01.2013: Abschlussprüfunsvorbereitung
368
\item[0.] 04.02.2013: Abschlussprüfunsvorbereitung
369
\item[-] 10.02.2013: Ende der Vorlesungszeit des WS 2012/2013 (\href{http://www.kit.edu/studieren/2873.php}{Quelle})
370
\end{itemize}
371
\end{frame}
372
373
\framedgraphic{Vielen Dank für eure Aufmerksamkeit!}{../images/programmers-users.jpg}
374
375
\end{document}
376
377