2
0
Fork 0
mirror of https://github.com/MartinThoma/LaTeX-examples.git synced 2025-04-26 06:48:04 +02:00

Remove trailing spaces

The commands

find . -type f -name '*.md' -exec sed --in-place 's/[[:space:]]\+$//' {} \+

and

find . -type f -name '*.tex' -exec sed --in-place 's/[[:space:]]\+$//' {} \+

were used to do so.
This commit is contained in:
Martin Thoma 2015-10-14 14:25:34 +02:00
parent c578b25d2f
commit 7740f0147f
538 changed files with 3496 additions and 3496 deletions

View file

@ -1,5 +1,5 @@
\documentclass[a4paper,landscape,9pt]{scrartcl}
\usepackage[ngerman]{babel}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage{amssymb,amsmath,amsfonts}
\usepackage{multicol}
@ -14,7 +14,7 @@
\usepackage{tabularx}% http://ctan.org/pkg/tabularx
\usepackage{calc}
\geometry{a4paper,left=10mm,right=10mm, top=1cm, bottom=2cm}
\geometry{a4paper,left=10mm,right=10mm, top=1cm, bottom=2cm}
\usepackage{fancyhdr}
\pagestyle{fancy}
@ -26,7 +26,7 @@
\begin{document}
\title{Email-Liste}
\author{Martin Thoma}
\begin{tabularx}{\linewidth}{l|cc|X|X|X|X}
&\mars & \venus & Vorname Nachname & Matrikelnummer & Studiengang & E-Mail Adresse\\
\hline

View file

@ -19,7 +19,7 @@
\usepackage{algorithm,algpseudocode}
\usepackage{minted} % needed for the inclusion of source code
\usepackage{tikz}
\usetikzlibrary{shapes,snakes,calc,patterns}
\usetikzlibrary{shapes,snakes,calc,patterns}
\usepackage{xcolor}
\usepackage{menukeys}
\usepackage{braket}
@ -64,10 +64,10 @@
\subsection{Formalien}
\begin{frame}{Formalien}
\begin{itemize}
\item Die Folien werden online gestellt $ \Rightarrow $
\item Die Folien werden online gestellt $ \Rightarrow $
\textbf{Mitschreiben nicht nötig}
\item $\rightarrow$ \href{http://martin-thoma.com/programmieren-tutorium}{martin-thoma.com/programmieren-tutorium}
\item Fragen immer sofort stellen und traut euch!\\
\item Fragen immer sofort stellen und traut euch!\\
Wenn nicht hier, wo dann?
\end{itemize}
\end{frame}
@ -164,7 +164,7 @@
\draw (2, 0) node[longName] (A) {Modul: Programmieren}
(6, 0) node[explanation] (X) {
\begin{minipage}{0.9\textwidth}
\tiny
\tiny
\begin{itemize}
\item 5 ECTS
\end{itemize}
@ -179,7 +179,7 @@
(2,-3.5) node[algebraicName, purple] (H) {Übungsschein}
(1.8,-4.35) node[explanation] (X) {
\begin{minipage}{\textwidth}
\tiny
\tiny
\begin{itemize} \itemsep-0.2em
\item Muss bestanden werden
\item Keine Note
@ -190,7 +190,7 @@
(6,-3.5) node[algebraicName, purple] (I) {Klausur}
(5.8,-4.3) node[explanation] (X) {
\begin{minipage}{\textwidth}
\tiny
\tiny
\begin{itemize} \itemsep-0.2em
\item Muss bestanden werden
\item Abschlussnote ergibt Modulnote
@ -302,7 +302,7 @@
\item[$\Rightarrow$] Sicherungskopie für euch
\item[$\Rightarrow$] Eine vergessene Deadline ist nicht ganz so ärgerlich
\end{itemize}
\item Rechnet nicht mit der Erreichbarkeit des Praktomaten
\item Rechnet nicht mit der Erreichbarkeit des Praktomaten
kurz vor der Deadline
\item \textbf{Disclaimer nicht vergessen!}
\end{itemize}
@ -375,16 +375,16 @@
\subsection{Begriffe}
\begin{frame}{Begriffe}
\begin{block}{JDK}
Das Java Development Kit (JDK) ist eines der von
Das Java Development Kit (JDK) ist eines der von
Java-Entwicklern meistgenutzten Java-SDKs.\\
$[\dots]$ Nun wird eine angepasste freie Version als ihr nunmehr
$[\dots]$ Nun wird eine angepasste freie Version als ihr nunmehr
offizieller Nachfolger unter dem Namen OpenJDK weitergeführt.
\end{block}
\begin{block}{JRE}
Die Java-Laufzeitumgebung (englisch: Java Runtime Environment, kurz JRE)
ist die Laufzeitumgebung der Java-Technik. Mit ihr werden
Programme (Java-Anwendungen) weitgehend unabhängig vom
Die Java-Laufzeitumgebung (englisch: Java Runtime Environment, kurz JRE)
ist die Laufzeitumgebung der Java-Technik. Mit ihr werden
Programme (Java-Anwendungen) weitgehend unabhängig vom
darunter liegenden Betriebssystem ausgeführt.
\end{block}

View file

@ -226,8 +226,8 @@
\section{Praxis}
\subsection{Aufgabe 1a)}
\begin{frame}{Aufgabe 1a)}
Entwerfen Sie eine Klasse Baby mit den Attributen Name, Gewicht,
Größe und Lautstärke (eventuell fallen Ihnen weitere sinnvolle
Entwerfen Sie eine Klasse Baby mit den Attributen Name, Gewicht,
Größe und Lautstärke (eventuell fallen Ihnen weitere sinnvolle
Attribute ein).
\end{frame}
@ -256,7 +256,7 @@
\begin{frame}{Aufgabe 1d)}
Erweitern Sie die Klasse \texttt{Baby} um ein Attribut "`Geschlecht"'.\\
Jedes Mädchen ohne Taufe ({\tiny also ohne weitere Namenszuweisung})
Jedes Mädchen ohne Taufe ({\tiny also ohne weitere Namenszuweisung})
soll bei der Geburt ({\tiny also der Objekterstellung}) den Namen "`Anna"'
bekommen, jeder Junge den Namen "`Bob"'.
\end{frame}

View file

@ -202,9 +202,9 @@ Deklarieren und initialisieren:
\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
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}\\
@ -282,7 +282,7 @@ Source: \href{http://www.codinghorror.com/blog/2012/07/new-programming-jargon.ht
\end{itemize}
\end{block}
\only<5->{
Ab nun:
Ab nun:
\begin{itemize}
\item Attribute sind (fast) immer private
\item Methoden können auch private sein
@ -304,7 +304,7 @@ Source: \href{http://www.codinghorror.com/blog/2012/07/new-programming-jargon.ht
\end{alertblock}
\only<2->{
\begin{block}{Auch hierzu gibt es aber eine Lösung:}
Mit \textbf{getter-Methoden} kann man den Lesezugriff auf Attribute
Mit \textbf{getter-Methoden} kann man den Lesezugriff auf Attribute
wieder erlauben.
\end{block}
}

View file

@ -128,9 +128,9 @@
\item Viel (fremden) Code ansehen hilft
\item Eigenen Code nach Jahren ansehen hilft
\item JEDER Kommentar ist für Java-Entwickler gedacht
\item[$\Rightarrow$] Kommentare à la "`Methode"' oder
\item[$\Rightarrow$] Kommentare à la "`Methode"' oder
"`Methodensignatur"' sind nutzlos!\\
\item Javadoc-Kommentare sind für Entwickler, die nichts von
\item Javadoc-Kommentare sind für Entwickler, die nichts von
eurem Code sehen können, ihn aber dennoch nutzen wollen
\end{itemize}
\end{frame}
@ -154,7 +154,7 @@
\begin{frame}{Kommentare: Beispiel 2}
\begin{itemize}
\item Zeile 1 \& 2 bieten einem Entwickler nicht mehr Informationen
\item Zeile 1 \& 2 bieten einem Entwickler nicht mehr Informationen
$\Rightarrow$ nutzlos
\item Sonst okay
\item Bitte nicht \myCode{chainwheel0}, sondern \myCode{chainwheel}
@ -263,7 +263,7 @@
\subsection{Aussagekräftige Variablen!}
\begin{frame}{Aussagekräftige Variablen!}
In Zukunft:
-1 P. bis -5 P. für Variablennamen wie "`Kr"' für Kettenräder oder
-1 P. bis -5 P. für Variablennamen wie "`Kr"' für Kettenräder oder
"`Pr"' für Preis!
\end{frame}
@ -369,7 +369,7 @@
\end{frame}
\begin{frame}{Javadoc: Codierung}
\begin{itemize}[<+->]
\item \quem{} ist ein sicheres Zeichen, dass was bei der
\item \quem{} ist ein sicheres Zeichen, dass was bei der
Zeichenkodierung schief ging.
\item Bitte verwendet \textbf{immer} UTF-8!
\item Eclipse: \menu{Window > Preferences > General > Workspace > Text file encoding > UTF-8}
@ -419,7 +419,7 @@ Keine Whitespaces nach
Welche Klassen / Methoden brauche ich?
\item \textbf{Konstrollstrukturen}:
\begin{itemize}
\item \myCode{if (<Bedingung>) \{ \dots \}}
\item \myCode{if (<Bedingung>) \{ \dots \}}
\item \myCode{while (<Bedingung>) \{ \dots \}}
\item \myCode{for (<Initialisierung>, <Bedingung>, <Update>) \{\dots\}}
\item \myCode{switch (<Variable>) \{case <Wert>:\}}
@ -496,7 +496,7 @@ Keine Whitespaces nach
\subsection{Wie werde ich besser?}
\begin{frame}{Wie werde ich besser?}
\begin{itemize}
\item \href{http://projecteuler.net/}{ProjectEuler.net}:
\item \href{http://projecteuler.net/}{ProjectEuler.net}:
401 Aufgaben jeder Schwierigkeitsstufe
\item Anderen Code anschauen
\item Probleme am PC lösen

View file

@ -72,7 +72,7 @@
\begin{block}{Ausgabe}
myArray1: geh du alter sack\\
myArray2: geh du alter sack
myArray2: geh du alter sack
\end{block}
\end{frame}
@ -106,7 +106,7 @@
\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)
oder einfacher, alles was mit einem Großbuchstaben beginnt)
ist Vorsicht geboten.
\end{alertblock}
\end{frame}
@ -120,7 +120,7 @@
\subsection{Magic Numbers}
\begin{frame}{Magic Numbers}
\begin{alertblock}{Definition: Magic numbers}
Unique values with unexplained meaning or multiple occurrences
Unique values with unexplained meaning or multiple occurrences
which could (preferably) be replaced with named constants.
\end{alertblock}
@ -158,7 +158,7 @@
\subsection{Flughafenkürzel}
\begin{frame}{Flughafenkürzel: Aufgabe}
Wir haben ein Array mit IATA-Codes (Flughafenkürzel) gegeben und
Wir haben ein Array mit IATA-Codes (Flughafenkürzel) gegeben und
möchten den Inhalt auf der Konsole ausgeben.
\end{frame}
@ -179,7 +179,7 @@
\end{frame}
\begin{frame}{Flughafenkürzel: Umgekehrte Reihenfolge}
Modifiziere das Programm so, dass die Kürzel in umgekehrter
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}
@ -191,7 +191,7 @@
\end{frame}
\begin{frame}{Flughafenkürzel: Jumping}
Modifiziere das Programm so, dass nur jedes dritte Element
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}
@ -237,9 +237,9 @@
\begin{frame}{Praktomat}
\begin{itemize}
\item Fragen frühzeitig stellen!
\item Wenn ihr Pakete verwendet, am Anfang eurer Dateien
\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
müsst ihr die korrekte Ordnerstruktur in den Praktomat
hochladen
\item In Eclipse im Fenster "`Navigation"' den Ordner "`src"'
auswählen

View file

@ -86,7 +86,7 @@
\subsection{Nachbesprechung ÜB 2}
\begin{frame}{Allgmeines}
\begin{block}{Musterlösung}
Inoffizielle Musterlösung von Simon und mir ist unter
Inoffizielle Musterlösung von Simon und mir ist unter
\href{http://goo.gl/BfA6i}{http://goo.gl/BfA6i} erhältlich.\\
Bitte dort anschauen.
\end{block}
@ -114,19 +114,19 @@
\begin{frame}{Allgemeines}
\begin{block}{Genau lesen}
\begin{itemize}[<+->]
\item \textbf{A.1.1 Konstruktor von Bike}: "`Modifizieren Sie
den Konstruktor der Klasse Bike, indem Sie aus der
Signatur das Argument, nach dem bisher der Preis
\item \textbf{A.1.1 Konstruktor von Bike}: "`Modifizieren Sie
den Konstruktor der Klasse Bike, indem Sie aus der
Signatur das Argument, nach dem bisher der Preis
gesetzt wird, entfernen."'
\item \textbf{A.1.2 Setter für Gears} "`Schreiben Sie den
Konstruktor so um, dass er die Methode setSprockets
benutzt, um einen konsistenten Anfangszustand zu
\item \textbf{A.1.2 Setter für Gears} "`Schreiben Sie den
Konstruktor so um, dass er die Methode setSprockets
benutzt, um einen konsistenten Anfangszustand zu
garantieren."'
\item \textbf{A.2.1 Tribonacci-Folge}: "`Geben Sie \textbf{nur} die
siebenunddreißigste Tribonacci-Zahl auf der Konsole
\item \textbf{A.2.1 Tribonacci-Folge}: "`Geben Sie \textbf{nur} die
siebenunddreißigste Tribonacci-Zahl auf der Konsole
aus."'
\item[$\Rightarrow$] Es werden automatische Tests durchgeführt.
Stimmt die Ausgabe nicht exakt - also jedes einzelne
Stimmt die Ausgabe nicht exakt - also jedes einzelne
(Leer)zeichen -, schlägt der Test fehl.
\end{itemize}
\end{block}
@ -162,7 +162,7 @@
Nicht jede Zahl kann als Gleitkomma-Zahl dargestellt werden:
\includegraphics[height=50mm]{Gleitkommazahlen.png}\\
\tiny{Quelle: \href{http://de.wikipedia.org/wiki/Datei:Gleitkommazahlen.svg}{de.wikipedia.org/wiki/Datei:Gleitkommazahlen.svg}}\\
\end{frame}
@ -185,10 +185,10 @@
\begin{itemize}[<+->]
\item Es gibt für jede Teilaufgabe ein Punktekontingent
\item Bearbeitet ihr eine Teilaufgabe nicht, ziehe ich alle Punkte ab
\item Bearbeitet ihr einen Teil einer Teilaufgabe nicht, ziehe
ich mindestens so viele Punkte ab, wie derjenige mit dem
\item Bearbeitet ihr einen Teil einer Teilaufgabe nicht, ziehe
ich mindestens so viele Punkte ab, wie derjenige mit dem
höchstem Abzug abgezogen bekommen hat
\item Wenn der Code nicht das tut, was gefordert wird, kann ich
\item Wenn der Code nicht das tut, was gefordert wird, kann ich
auch alles abziehen
\item[$\Rightarrow$] Nein, es bringt keinen Vorteil
\end{itemize}
@ -219,7 +219,7 @@
\begin{itemize}
\item Pakete werden klein geschrieben
\item Pakete können "`Unterpakete"' haben. Dies wird durch
einen Punkt angedeutet:
einen Punkt angedeutet:
\begin{itemize}
\item \href{http://docs.oracle.com/javase/7/docs/api/overview-summary.html}{Offizielle Pakete}:
\item \href{http://docs.oracle.com/javase/7/docs/api/java/io/package-summary.html}{java.io}
@ -237,7 +237,7 @@
\myCode{public} & \cmark & \cmark & \cmark & \cmark \\
\myCode{protected} & \cmark & \cmark & \cmark & \xmark \\
no modifier & \cmark & \cmark & \xmark & \xmark \\
\myCode{private} & \cmark & \xmark & \xmark & \xmark
\myCode{private} & \cmark & \xmark & \xmark & \xmark
\end{tabular}
\small{Weitere Informationen: \href{http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html}{Controlling Access to Members of a Class}}
@ -245,7 +245,7 @@
\begin{block}{Tipp}
\myCode{private} macht fast immer Sinn. Wenn ihr nicht wisst,
ob ihr \myCode{private} oder \myCode{protected} nehmen sollt,
nehmt protected. Kein modifier macht selten Sinn. Das sieht
nehmt protected. Kein modifier macht selten Sinn. Das sieht
so aus, als ob ihr es dem Zufall überlasst.
\end{block}
\end{frame}
@ -255,14 +255,14 @@
Foreach \dots
\begin{itemize}[<+->]
\item wird in Java-Kreisen manchmal auch "`Enhanced for loop"' genannt
\item geht alle Elemente einer
\href{http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html}{Collection}
\item geht alle Elemente einer
\href{http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html}{Collection}
durch zu gehen (genauer: \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html}{Iterable})
\item sollte verwendet werden, wenn man es verwenden kann
\item ist auch in der \href{http://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html}{Dokumentation} (Nur in 1.5?)
und im \href{http://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html}{Tutorial}
\item ist in der \href{http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html\#jls-14.14.2}{JLS SE7} spezifiziert
\item ist Teil des \href{http://docs.oracle.com/javase/tutorial/extra/certification/javase-7-programmer1.html}{Programmer Level I Exams}
\item ist Teil des \href{http://docs.oracle.com/javase/tutorial/extra/certification/javase-7-programmer1.html}{Programmer Level I Exams}
für das "`Programmer Language Certification"'
\end{itemize}
\end{frame}
@ -302,7 +302,7 @@
\end{itemize}
\begin{alertblock}{Achtung!}
Der Algorithmus muss modifiziert werden. Durch die Modifikationen entspricht
der Algorithmus nicht mehr den Varianten, die sich im Internet finden lassen.
der Algorithmus nicht mehr den Varianten, die sich im Internet finden lassen.
Ohne diese Modifikationen kann ich euch keine Punkte geben!
\end{alertblock}
\end{itemize}

View file

@ -45,7 +45,7 @@
\end{itemize}
\pause[\thebeamerpauses]
\begin{alertblock}{Achtung}
Trotzdem mit \myCode{abc.equals(def);} vergleichen! Nur so
Trotzdem mit \myCode{abc.equals(def);} vergleichen! Nur so
ist garantiert, dass ihr auf Gleichheit (und nicht nur auf
"`Selbstheit"' vergleicht).
\end{alertblock}
@ -58,8 +58,8 @@
\item Problem: Es tritt ein falsches Ergebnis auf, es ist
aber nicht klar warum.
\item Lösung: Man macht Zusicherungen (engl. assertions)
\item Man überlegt sich also, welche Variablen an
krischen Stellen welche Werte oder Beziehungen
\item Man überlegt sich also, welche Variablen an
krischen Stellen welche Werte oder Beziehungen
zueinander haben sollen
\end{itemize}
\pause[\thebeamerpauses]
@ -101,7 +101,7 @@
\begin{itemize}[<+->]
\item Ihr wollt euch Druckaufträge speichern
\item Funktioniert mit Array
\item Problem:
\item Problem:
\begin{itemize}
\item Ihr belegt immer konstant viel Speicher
\item Eventuell braucht ihr mehr, eventuell weniger Speicher

View file

@ -57,7 +57,7 @@
\begin{frame}{Erklärung}
\begin{itemize}
\item Zeile 2 und 3: \myCode{sound} im Konstruktor von \myCode{Cat} ist eine
\item Zeile 2 und 3: \myCode{sound} im Konstruktor von \myCode{Cat} ist eine
lokale Variable, kein Attribut
\item In Java werden nur Methoden vererbt
\begin{itemize}
@ -127,7 +127,7 @@
\begin{frame}{Beispiel}
Wo kann Vererbung nützlich sein?
\begin{itemize}[<+->]
\item Oberklasse Liste, Unterklassen SinglyLinkedList und
\item Oberklasse Liste, Unterklassen SinglyLinkedList und
DoubleLinkedList
\begin{itemize}
\item \myCode{contains()} ist gleich
@ -135,7 +135,7 @@
\item \myCode{remove()} ist unterschiedlich
\end{itemize}
\item Oberklasse Animal, Unterklassen Säugetier, Tiger, Schlange, Bär, \dots
\item Brettspiele:
\item Brettspiele:
\begin{itemize}
\item Klasse Spielbrett; Unterklassen: Schachbrett, Dame-Brett, Mensch-ärgere-dich-nicht
\item Klasse Spielfigur; Unterklassen: Bauer, Dame, Springer, Turm
@ -160,11 +160,11 @@
\begin{frame}{Allgemeines}
\begin{block}{\href{http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html\#jls-8.4.8}{JLS 8.4.8}}
A class C inherits from its direct superclass and direct
superinterfaces all abstract and non-abstract methods of the
superclass and superinterfaces that are public, protected, or
declared with default access in the same package as C, and are
neither overridden (§8.4.8.1) nor hidden (§8.4.8.2) by a
A class C inherits from its direct superclass and direct
superinterfaces all abstract and non-abstract methods of the
superclass and superinterfaces that are public, protected, or
declared with default access in the same package as C, and are
neither overridden (§8.4.8.1) nor hidden (§8.4.8.2) by a
declaration in the class.
\end{block}
\end{frame}
@ -241,17 +241,17 @@
\end{frame}
\begin{frame}{Allgemeines}
\begin{itemize}[<+->]
\item \myCode{\href{http://docs.oracle.com/javase/7/docs/api/java/lang/String.html\#charAt(int)}{char charAt(int index)}}:
\item \myCode{\href{http://docs.oracle.com/javase/7/docs/api/java/lang/String.html\#charAt(int)}{char charAt(int index)}}:
Returns the char value at the specified index.
\item \myCode{\href{http://docs.oracle.com/javase/7/docs/api/java/lang/String.html\#matches(java.lang.String)}{public boolean matches(String regex)}}
Tells whether or not this string matches the given regular expression.
\item \myCode{\href{http://docs.oracle.com/javase/7/docs/api/java/lang/String.html\#substring(int, int)}{String substring(int beginIndex,
int endIndex)}} Returns a new string that is a substring of this string.
int endIndex)}} Returns a new string that is a substring of this string.
\end{itemize}
\pause[\thebeamerpauses]
\begin{block}{Eclipse-Tipp}
Wenn Eclipse euch im Projektordner einen Fehler anzeigt, aber
keine Datei fehlerhaft ist, solltet ihr mal einen
keine Datei fehlerhaft ist, solltet ihr mal einen
Blick in \menu{Window > Show View > Problem} werfen.
\end{block}
\end{frame}

View file

@ -65,7 +65,7 @@
\item Eine Unterklasse kann alles, was die Oberklasse kann
\item[$\rightarrow$] sie hat die gleichen Methoden, wenn auch eventuell überschrieben
\item Eventuell ist uns die konkrete Klasse egal
\item oder wir benötigen einen Kontainter für viele verschiedene
\item oder wir benötigen einen Kontainter für viele verschiedene
Objekte mit einer gemeinsamen Oberklasse
\end{itemize}
@ -101,7 +101,7 @@
\begin{itemize}
\item Problem: Man schreibt genau eine verkettete Listen-Klasse
für genau eine Klasse (z.B. "`Bike"'), obwohl
die Logik (hinzufügen, entfernen, suchen) von der
die Logik (hinzufügen, entfernen, suchen) von der
Klasse unabhängig ist
\item Lösung: Generics
\end{itemize}
@ -119,14 +119,14 @@
\subsection{Praxis}
\begin{frame}{Praxis}
\begin{block}{Arbeitsauftrag}
Programmiert die Einfach-verkettete Liste um, sodass sie
Programmiert die Einfach-verkettete Liste um, sodass sie
nirgends mehr "`Bike"' sondern nur noch Generics verwendet.
\end{block}{Arbeitsauftrag}
\begin{exampleblock}{Hinweis}
\begin{itemize}
\item URL für die Bike-Version: \href{http://goo.gl/RoiBC}{http://goo.gl/RoiBC}
\item Wer nur Zettel und Papier hat, implementiert die "`Node.java"'
\item Wer nur Zettel und Papier hat, implementiert die "`Node.java"'
komplett neu und "`SinglyLinkedList.java"' mindestens mit "`add()"'
\end{itemize}
\end{exampleblock}
@ -173,7 +173,7 @@
Welche Bedeutung für die Laufzeit haben Generics?
\end{block}
\begin{overprint}
\onslide<1>
\begin{itemize}
@ -182,7 +182,7 @@
Gründe warum der kompilierte Code mit Generics
\textbf{schneller} läuft als ohne
\item Generics haben \textbf{keinen Einfluss} auf die Laufzeit
\item Die erhöhte Flexibilität und Typsicherheit bedeutet,
\item Die erhöhte Flexibilität und Typsicherheit bedeutet,
dass der Compiler für jeden konkreten Typen Code aus
dem generischen Code erstellen mus. Das bedeutet,
die Programme sind \textbf{etwas langsamer}
@ -218,9 +218,9 @@
\begin{itemize}
\item Zeile 2 ist ok
\item Zeile 3 verursacht einen Laufzeitfehler
\item Der Rückgabewert der Methode \myCode{getElement}
in \myCode{Basket<Fruit>} ist \myCode{Fruit}.
Man kann eine \myCode{Fruit}-Variable
\item Der Rückgabewert der Methode \myCode{getElement}
in \myCode{Basket<Fruit>} ist \myCode{Fruit}.
Man kann eine \myCode{Fruit}-Variable
keiner \myCode{Apple}-Variable ohne cast zuweisen.
\end{itemize}
\end{overprint}

View file

@ -97,10 +97,10 @@
\item \myCode{List<? extends Fruit> myList} kann als Elemente
\myCode{Fruit} und \myCode{Apple} haben, nicht jedoch
\myCode{Object}
\item Hinweis: "`extends"' ist hier nicht exakt das gleiche
\item Hinweis: "`extends"' ist hier nicht exakt das gleiche
wie bei der Vererbung. Es kann entweder wirklich "`extends"'
oder "`implements"' bedeuten
\item Sowohl in \myCode{List<Fruit>} als auch in
\item Sowohl in \myCode{List<Fruit>} als auch in
\myCode{List<? extends Fruit>} können
\myCode{Fruit} und \myCode{Apple} beinhalten
\end{itemize}
@ -150,7 +150,7 @@
\subsection{Quellen und Ressourcen}
\begin{frame}{Quellen und Ressourcen}
\begin{itemize}
\item \href{http://docs.oracle.com/javase/tutorial/java/generics/wildcards.html}{JavaDoc Tutorial - Wildcards}
\item \href{http://docs.oracle.com/javase/tutorial/java/generics/wildcards.html}{JavaDoc Tutorial - Wildcards}
\item \href{http://docs.oracle.com/javase/tutorial/extra/generics/wildcards.html}{JavaDoc Tutorial - Wildcards} (extra)
\item \href{http://stackoverflow.com/q/3009745/562769}{What does the question mark in Java generics' type parameter mean?}
\item \href{http://stackoverflow.com/q/12340808/562769}{What's the difference between List<Object> and List<?>}
@ -164,7 +164,7 @@
\subsection{Allgemein}
\begin{frame}{Allgemein}
\begin{itemize}[<+->]
\item Man will ein beliebiges Objekt mit dem momentanen
\item Man will ein beliebiges Objekt mit dem momentanen
Objekt auf Gleichheit vergleichen
\item Dazu nutzt man \myCode{myObject.equals(otherObject);}
\item \myCode{myObject} muss dann die \myCode{equals(Object obj)} implementieren
@ -196,7 +196,7 @@
\begin{itemize}[<+->]
\item \dots sind Objekte vom Typ Throwable
\item \dots unterbrechen den normalen Ablauf eines Programms
\item Mit dem Schlüsselwort \myCode{throw} werden Exceptions
\item Mit dem Schlüsselwort \myCode{throw} werden Exceptions
geworfen und mit \myCode{catch} kann man sie abfangen.
\end{itemize}
@ -254,7 +254,7 @@
Gründe:
\begin{itemize}
\item Beim lesen eures Codes wird klarer, wo das Problem
\item Beim lesen eures Codes wird klarer, wo das Problem
auftreten kann
\item Effizienz
\end{itemize}
@ -297,7 +297,7 @@
\begin{frame}{Aufgaben}
\begin{block}{Klasse "`Disc"'}
Schreiben Sie zunächst eine Klasse Disc, die eine gelochte
Schreiben Sie zunächst eine Klasse Disc, die eine gelochte
Scheibe repräsentiert und als Attribut einen Durchmesser hat.
\end{block}
@ -313,22 +313,22 @@
\begin{frame}{Aufgaben}
\begin{block}{Methode push}
Die Methode push(Disc d) legt die Scheibe d auf den Stab,
Die Methode push(Disc d) legt die Scheibe d auf den Stab,
falls dieser noch nicht voll ist und
der Durchmesser der Scheibe d kleiner ist als der Durchmesser
der Durchmesser der Scheibe d kleiner ist als der Durchmesser
der obersten Scheibe des Stabes. Wird
die Scheibe erfolgreich auf den Stab gelegt, so ist der
die Scheibe erfolgreich auf den Stab gelegt, so ist der
Rückgabewert der Methode true, andernfalls
false.
\end{block}
\begin{block}{Methode pop}
Die Methode pop() entfernt die oberste Scheibe des Stabes und
Die Methode pop() entfernt die oberste Scheibe des Stabes und
liefert diese als Rückgabewert. Falls
der Stab leer ist, soll der Rückgabewert null sein.
\end{block}
Schreiben Sie, falls nötig, weitere Schnittstellen
Schreiben Sie, falls nötig, weitere Schnittstellen
(z.B. eine Methode size()) und toString()-Methoden.
\end{frame}

View file

@ -33,10 +33,10 @@
\begin{block}{Compiler-Fehler}
{\small
Exception in thread "main" java.lang.Error: Unresolved compilation problem:\\
Bound mismatch: The generic method \myCode{sort(List<T>)} of
type Collections is not applicable for the arguments
Bound mismatch: The generic method \myCode{sort(List<T>)} of
type Collections is not applicable for the arguments
(\myCode{List<List<String$>>$}).\\
The inferred type \myCode{List<String>} is not a valid substitute for
The inferred type \myCode{List<String>} is not a valid substitute for
the bounded parameter \myCode{<T extends Comparable<? super T$>>$}\\
at Main.main(Main.java:18)}
\end{block}
@ -49,10 +49,10 @@
\begin{block}{Answer}
I wouldn't implement clone().
But it makes sense to implement \myCode{equals()},
\myCode{hashCode()}, and
\myCode{toString()} to provide the default behavior for all subclasses.
Children can choose to use it if they add no new class
But it makes sense to implement \myCode{equals()},
\myCode{hashCode()}, and
\myCode{toString()} to provide the default behavior for all subclasses.
Children can choose to use it if they add no new class
members or supplement as needed.
\end{block}
\end{frame}
@ -136,7 +136,7 @@
\item[$\rightarrow$] Bei \myCode{double} und \myCode{float} den Epsilon-Vergleich machen!
\item Sonst vergleicht man Strings
\item[$\rightarrow$] \myCode{myString.compareTo(myOtherString)}
\item Die JavaDoc von \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html\#compareTo\%28T\%29}{compareTo(other)}
\item Die JavaDoc von \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html\#compareTo\%28T\%29}{compareTo(other)}
sind weniger mathematisch formuliert
\end{itemize}
\end{frame}
@ -157,7 +157,7 @@
\item Countingsort
\end{itemize}
Implementierungen und Vergleiche dieser und weiterer Algorithmen sind
Implementierungen und Vergleiche dieser und weiterer Algorithmen sind
\href{http://martin-thoma.com/ubersicht-uber-sortieralgorithmen/}{hier}
zu finden.
@ -194,7 +194,7 @@
\begin{itemize}[<+->]
\item maximal: $3^{7 \cdot 6} = 3^{42} = 109418989131512359209 \approx 109 \cdot 10^{18}$
\item minimal: schwer zu sagen
\item Idee: Brute-Force
\item Idee: Brute-Force
\begin{itemize}
\item Alle möglichen Spielentscheidungen durchgehen
\item Kommt man auf eine bereits bekannte Situation, ist es keine neue
@ -248,11 +248,11 @@
\end{block}
\begin{block}{Antwort}
Eine Hash-Funktion $h$ bildet von einem sehr großem
Eine Hash-Funktion $h$ bildet von einem sehr großem
Definitionsbereich auf einen deutlich kleineren Wertebereich
ab.
\end{block}
\pause
\begin{itemize}[<+->]
@ -271,12 +271,12 @@
\pause
\begin{block}{Bedingung 1}
Whenever it is invoked on the same object more than once
during an execution of a Java application, the hashCode
method \textbf{must consistently return the same integer},
provided no information used in equals comparisons on the
object is modified. This integer need not remain consistent
from one execution of an application to another execution of
Whenever it is invoked on the same object more than once
during an execution of a Java application, the hashCode
method \textbf{must consistently return the same integer},
provided no information used in equals comparisons on the
object is modified. This integer need not remain consistent
from one execution of an application to another execution of
the same application.
\end{block}
{\tiny source: \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html\#hashCode()}{JavaDoc}}
@ -284,8 +284,8 @@
\begin{frame}{hashCode() in Java}
\begin{block}{Bedingung 2}
If two objects are equal according to the equals(Object)
method, then calling the hashCode method on each of the two
If two objects are equal according to the equals(Object)
method, then calling the hashCode method on each of the two
objects \textbf{must} produce the same integer result.
\end{block}
{\tiny source: \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html\#hashCode()}{JavaDoc}}
@ -304,12 +304,12 @@
\begin{frame}{hashCode() in Java}
\begin{block}{Klarstellung 2}
It is \textbf{not required} that if two objects are unequal according
to the equals(java.lang.Object) method, then calling the
hashCode method on each of the two objects must produce
It is \textbf{not required} that if two objects are unequal according
to the equals(java.lang.Object) method, then calling the
hashCode method on each of the two objects must produce
distinct integer results.\\
However, the programmer should be
aware that producing distinct integer results for unequal
However, the programmer should be
aware that producing distinct integer results for unequal
objects may improve the performance of hash tables.
\end{block}
{\tiny source: \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html\#hashCode()}{JavaDoc}}
@ -350,7 +350,7 @@
Unterklassen bilden.
\end{block}
Abstrakte Klassen
Abstrakte Klassen
\begin{itemize}[<+->]
\item \dots müssen keine abstrakten Methoden beinhalten\\
{\tiny Quelle: \href{http://stackoverflow.com/q/4811678/562769}{Defining an abstract class without any abstract methods}}

View file

@ -48,7 +48,7 @@
\section{Überladung}
\subsection{Musterlösung}
\begin{frame}{Musterlösung}
Eine Musterlösung zu Blatt 5 ist
Eine Musterlösung zu Blatt 5 ist
\href{https://github.com/MartinThoma/prog-ws1213/tree/master/Blatt-05/tutor-solution/Blatt5/src/mediabib}{hier}.
\end{frame}
@ -90,10 +90,10 @@
\item \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html\#signum(double)}{Math.signum(double)},
\href{http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html\#signum(float)}{Math.signum(float)}
\item PrintStream:
\href{http://docs.oracle.com/javase/7/docs/api/java/io/PrintStream.html\#println()}{println();},
\href{http://docs.oracle.com/javase/7/docs/api/java/io/PrintStream.html\#println()}{println();},
\href{http://docs.oracle.com/javase/7/docs/api/java/io/PrintStream.html\#println(boolean)}{println(boolean);},
\href{http://docs.oracle.com/javase/7/docs/api/java/io/PrintStream.html\#println(char)}{println(char);} \dots
\item Interface List:
\item Interface List:
\href{http://docs.oracle.com/javase/7/docs/api/java/util/List.html\#toArray()}{Object[] toArray();},
\href{http://docs.oracle.com/javase/7/docs/api/java/util/List.html\#toArray(T[])}{<T> T[] toArray(T[] a)}
\end{itemize}
@ -121,7 +121,7 @@
\begin{itemize}
\item \href{http://en.wikipedia.org/wiki/Loose_coupling}{Loose coupling} (Lose Kopplung)
\item Loose binding - nicht weit verbreitet, vermutlich falscher Begriff
\item \href{http://en.wikipedia.org/wiki/Dynamic_dispatch}{Dynamic dispatch}:
\item \href{http://en.wikipedia.org/wiki/Dynamic_dispatch}{Dynamic dispatch}:
Laut Wikipedia das gleiche wie "`dynamic binding"'.
\end{itemize}
\end{frame}
@ -199,7 +199,7 @@
Die Annotation \myCode{@Override} \dots
\begin{itemize}[<+->]
\item Sollte verwendet werden, damit der Compiler euch warnen
kann, wenn ihr nichts überschreibt
kann, wenn ihr nichts überschreibt
\item[$\Rightarrow$] Tippfehler werden unwahrscheinlicher
\item Anderen ist klar, dass euch klar war, dass ihr etwas
überschreibt
@ -284,9 +284,9 @@
\subsection{Allgemeines}
\begin{frame}{Allgemeines}
\begin{itemize}[<+->]
\item \href{http://docs.oracle.com/javase/7/docs/api/java/util/Dictionary.html}{Dictionary}
is obsolete. New implementations should implement the
\href{http://docs.oracle.com/javase/7/docs/api/java/util/Map.html}{Map}
\item \href{http://docs.oracle.com/javase/7/docs/api/java/util/Dictionary.html}{Dictionary}
is obsolete. New implementations should implement the
\href{http://docs.oracle.com/javase/7/docs/api/java/util/Map.html}{Map}
interface, rather than extending Dictionary.
\item Telefonbuch-Anwendungsfälle
\begin{itemize}
@ -295,12 +295,12 @@
\item Schlüssel ist eindeutig, Wert darfs mehrfach geben (sowohl identisch als auch gleich sind ok)
\end{itemize}
\item Interface Map links vom \myCode{=}
\item \href{http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html}{HashMap}:
\item \href{http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html}{HashMap}:
\begin{itemize}
\item makes no guarantees as to the order of the map
\item $\mathcal{O}(1)$ für \myCode{get} und \myCode{put}
\end{itemize}
\item \href{http://docs.oracle.com/javase/7/docs/api/java/util/TreeMap.html}{TreeMap}:
\item \href{http://docs.oracle.com/javase/7/docs/api/java/util/TreeMap.html}{TreeMap}:
\begin{itemize}
\item sorted according to the natural ordering of its keys
\item $\mathcal{O}(\log n)$ für \myCode{containsKey}, \myCode{get}, \myCode{put} und \myCode{remove}
@ -344,7 +344,7 @@ http://stackoverflow.com/questions/2889777/difference-between-hashmap-linkedhash
ActionLister sind \dots
\begin{itemize}[<+->]
\item ein weit verbreitetes Konzept
\item Objekte, die auf bestimmte Aktionen warten und
\item Objekte, die auf bestimmte Aktionen warten und
\begin{itemize}
\item dann was machen
\item die Aktion "`delegieren"'

View file

@ -70,10 +70,10 @@
\begin{frame}{Quiz}
Wie löst man das Problem:?
Mit
\href{http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicLong.html}{AtomicLong}
aus
aus
\href{http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/package-summary.html}{java.util.concurrent}
\end{frame}