aboutsummaryrefslogtreecommitdiff
path: root/Info/12
diff options
context:
space:
mode:
Diffstat (limited to 'Info/12')
-rw-r--r--Info/12/Listen/Intro/.gitignore2
-rw-r--r--Info/12/Listen/Intro/img/playlist.pngbin0 -> 15721 bytes
-rw-r--r--Info/12/Listen/Intro/slides-wiederholung.md108
-rw-r--r--Info/12/Listen/Intro/slides.md149
4 files changed, 259 insertions, 0 deletions
diff --git a/Info/12/Listen/Intro/.gitignore b/Info/12/Listen/Intro/.gitignore
new file mode 100644
index 00000000..dd6b8c3d
--- /dev/null
+++ b/Info/12/Listen/Intro/.gitignore
@@ -0,0 +1,2 @@
+slides-wiederholung.pdf
+slides-wiederholung.pptx
diff --git a/Info/12/Listen/Intro/img/playlist.png b/Info/12/Listen/Intro/img/playlist.png
new file mode 100644
index 00000000..204c3281
--- /dev/null
+++ b/Info/12/Listen/Intro/img/playlist.png
Binary files differ
diff --git a/Info/12/Listen/Intro/slides-wiederholung.md b/Info/12/Listen/Intro/slides-wiederholung.md
new file mode 100644
index 00000000..24f7a638
--- /dev/null
+++ b/Info/12/Listen/Intro/slides-wiederholung.md
@@ -0,0 +1,108 @@
+---
+author: Florian Fischer
+theme: metropolis
+aspectratio: 169
+---
+
+
+## \faIcon{comments} Wiederholung: Referenzattribute \hfill 1/4
+
+Nimm Stellung zu folgender Aussage: \vspace{1cm}
+
+> Jedes Attribut in Java ist ein Referenzattribut, da immer ein Wert referenziert wird.
+
+\pause
+
+\begin{tikzpicture}[overlay, remember picture]
+ \node[rotate=5,scale=2] at (4, 0.3) {\large \boldred{Falsch}};
+\end{tikzpicture}
+
+\pause
+\begin{tabular}{p{0.45\textwidth} p{0.55\textwidth}}
+Attribute mit \boldred{primitiven} Datentypen sind keine Referenzattribute. &
+\vspace{0px} \pause
+\begin{tikzpicture}
+ \begin{object}[text width=3cm]{g}{0,0}
+ \instanceOf{Game}
+ \attribute{\boldred{highscore = 200}}
+ \attribute{spieler}
+ \end{object}
+
+ \begin{object}[text width=3.5cm]{p}{4,-0.25}
+ \instanceOf{Player}
+ \attribute{name = "N"}
+ \attribute{xPos = 2}
+ \attribute{yPos = 5}
+ \end{object}
+
+ \draw (0.75, -0.7) rectangle (1.45, -1.1);
+ \node[fill=black, circle, minimum size=0.005cm, scale=0.5] (circle) at (-0.3, -1.5) {};
+ \draw[line width=2pt, -latex, draw=blue!80] (circle) edge [bend right=25] (2.1, -0.45);
+\end{tikzpicture} \\
+\end{tabular}
+
+## \faIcon{comments} Wiederholung: Referenzattribute \hfill 2/4
+
+Nimm Stellung zu folgender Aussage: \vspace{1cm}
+
+> Um den Zustand eines Referenzattributes zu verändern, muss **kein** neues Objekt erzeugt werden.
+> Das referenzierte Objekt kann bspw. durch einen Methoden-Aufruf verändert werden.
+
+\pause
+
+\begin{tikzpicture}[overlay, remember picture]
+ \node[rotate=5,scale=2] at (0.5\textwidth, 0.7) {\large \textbf{\textcolor{green!80!black}{Korrekt}}};
+\end{tikzpicture}
+
+\centering
+\begin{tikzpicture}
+ \begin{object}[text width=3cm]{g}{0,0}
+ \instanceOf{Game}
+ \attribute{highscore = 200}
+ \attribute{spieler}
+ \end{object}
+
+ \begin{object}[text width=3.5cm]{p}{5,-0.25}
+ \instanceOf{Player}
+ \attribute{name = "N"}
+ \only<2,3>{
+ \attribute{xPos = 2}
+ \attribute{yPos = 5}
+ }
+ \only<4>{
+ \attribute{\boldred{xPos = 3}}
+ \attribute{\boldred{yPos = 4}}
+ }
+ \end{object}
+
+ \node[fill=black, circle, minimum size=0.005cm, scale=0.5] (circle) at (-0.3, -1.5) {};
+
+ \draw[line width=2pt, -latex, draw=blue!80] (circle) edge [bend right=25] node[xshift=0.85cm] {\only<3->{\texttt{.move()}}} (3.1, -0.45);
+\end{tikzpicture}
+
+
+## \faIcon{comments} Wiederholung: Warteschlangen \hfill 3/4
+
+Nimm Stellung zu folgender Aussage: \vspace{1cm}
+
+> Eine Warteschlange und ein Stapel unterscheiden sich nur durch die Position an der neue Elemente eingefügt werden.
+
+\pause
+
+\begin{tikzpicture}[overlay, remember picture]
+ \node[rotate=-30,scale=3] at (1, 0) {\large \boldred{Jein}};
+\end{tikzpicture}
+
+## \faIcon{comments} Wiederholung: Felder \hfill 4/4
+
+Nimm Stellung zu folgender Aussage: \vspace{1cm}
+
+> Felder haben eine flexible Größe und sind deshalb gut geeignet, um eine sich verändernde Anzahl an Einträgen zu speichern.
+
+\pause
+
+\begin{tikzpicture}[overlay, remember picture]
+ \node[rotate=-30,scale=2] at (1, 1.5) {\large \boldred{Falsch}};
+\end{tikzpicture}
+
+> Felder haben eine **feste** Größe und sind deshalb gut geeignet, um eine **feste** Anzahl an Einträgen zu speichern.
diff --git a/Info/12/Listen/Intro/slides.md b/Info/12/Listen/Intro/slides.md
new file mode 100644
index 00000000..57dc24be
--- /dev/null
+++ b/Info/12/Listen/Intro/slides.md
@@ -0,0 +1,149 @@
+---
+author: Florian Fischer
+theme: metropolis
+aspectratio: 169
+---
+
+```{.include}
+slides-wiederholung.md
+```
+
+## Playlist
+
+Du willst für dich und deine Freunde ein Programm bauen, mit dem ihr gemeinsam eine Playlist anlegen könnt.
+Die Reihenfolge der Lieder soll dabei durch *Up* und *Down*-Votes von allen gemeinsam festgelegt werden.
+\vspace{0.3cm}
+
+::: {.columns}
+:::: {.column width=60%}
+Folgende Eigenschaften deiner Playlist sind dir wichtig:
+
+* Deine Playlist soll keine Maximalanzahl an Liedern festlegen.
+* Der Speicherverbrauch deiner Playlist soll nur von der Anzahl der Lieder abängen.
+::::
+
+:::: {.column width=40%}
+![](img/playlist.png){.center}
+::::
+:::
+
+\vspace{0.3cm}
+\faIcon{pencil-alt} **Arbeitsauftrag**: Entwerfe ein **Klassendiagramm** für die benötigten Klassen. \hfill 10min
+
+## Die Liste
+
+\begin{merke}
+Die \boldred{Liste} ist eine Datenstruktur, die eine \boldred{1:n}-Beziehung ermöglicht, indem jedes Element seinen Nachfolger selbst verwaltet.
+Der Wert von n ist \boldred{unbeschränkt}.
+Eine Beziehung zwischen Objekten der gleichen Klasse nennt man \boldred{rekursiv}.
+\end{merke}
+
+\centering
+\begin{tikzpicture}
+ \begin{object}[text width=3cm]{liste}{0,0}
+ \attribute{anfang}
+ \attribute{ende}
+ \end{object}
+
+ \begin{object}[text width=3.5cm]{lied1}{-5,-2.5}
+ \attribute{name = "foo"}
+ \attribute{next}
+ \end{object}
+
+ \node[fill=black, circle, minimum size=0.005cm, scale=0.5] (n1) at (-5.8, -3.9) {};
+ \draw[line width=2pt, -latex, draw=blue!80] (n1) edge [bend right=15] (-2, -2.75);
+
+ \begin{object}[text width=3.5cm]{lied2}{0,-2.5}
+ \attribute{name = "bar"}
+ \attribute{next}
+ \end{object}
+
+ \node[fill=black, circle, minimum size=0.005cm, scale=0.5] (n1) at (-0.8, -3.9) {};
+ \draw[line width=2pt, -latex, draw=blue!80] (n1) edge [bend right=15] (3, -2.75);
+
+ \begin{object}[text width=3.5cm]{lied3}{5,-2.5}
+ \attribute{name = "baz"}
+ \attribute{next}
+ \end{object}
+
+ % Anfang
+ \node[fill=black, circle, minimum size=0.005cm, scale=0.5] (anfang) at (-1.6, -0.81) {};
+ \draw[line width=2pt, -latex, draw=blue!80] (anfang) edge [bend right=25] (-5.1, -2.45);
+
+ % Ende
+ \node[fill=black, circle, minimum size=0.005cm, scale=0.5] (ende) at (-0.35, -1.4) {};
+ \draw[line width=2pt, -latex, draw=blue!80] (ende) edge [bend left=20] (5.1, -2.45);
+\end{tikzpicture}
+
+## Die Klassen der Liste
+
+\centering
+\begin{tikzpicture}
+ \node[draw] (list) {\large Liste};
+ \node[draw] (song) at (5, 0) {\large Lied};
+
+ \draw ($(list.east) + (0, 0.1cm)$) edge[above] node {hat als Anfang > 0,1} ($(song.west) + (0, 0.1cm)$);
+ \draw ($(list.east) - (0, 0.1cm)$) edge[below] node {hat als Ende > 0,1} ($(song.west) - (0, 0.1cm)$);
+ \draw (song.north) |- ($(song.north) + (0, 0.5cm)$) edge[above] node {0,1 < hat als Nachfolger} ($(song.north) + (3.5cm, 0.5cm)$);
+ \draw ($(song.north) + (3.5cm, 0.5cm)$) |- (song.east);
+\end{tikzpicture}
+
+\vspace{0.5cm}
+
+\pause
+
+\begin{tikzpicture}
+ \begin{class}[text width=3cm]{Liste}{0,0}
+ \attribute{anfang: Lied}
+ \attribute{ende: Lied}
+ \operation{Einfügen(Lied)}
+ \operation{Entfernen(): Lied}
+ \end{class}
+
+ \begin{class}[text width=4cm]{Lied}{5,0}
+ \attribute{name: String}
+ \attribute{next: Lied}
+ \operation{NachfolgerSetzen(Lied)}
+ \operation{NachfolgerGeben(): Lied}
+ \end{class}
+\end{tikzpicture}
+
+## \faIcon{desktop} Arbeitsauftrag: Implementierung der Playlist
+
+1. Implementiere die Klasse `Playlist` nach der Klassenkarte `Liste`
+2. Implementiere die Klasse `Song` nach der Klassenkarte `Lied`
+3. Teste deine Implementierung, indem du ein Playlist Objekt mit deinen drei Lieblingsliedern anlegst.
+
+## {.standout}
+
+\Large
+Woher wissen wir wie lang die Liste ist?
+
+## \faIcon{hands-helping} Gruppenaufgabe
+
+Du stehst bei deiner Ärzt*in in der Warteschlange.
+Die Schlange geht um mehrere Ecken, so dass jeder Einzelne nicht den Anfang und das Ende zusammen sehen kann.
+
+**Aufgabe**:
+ Entwickelt ein Vorgehen, wie die erste Person rausfinden kann, wie viele Personen hinter ihr stehen.
+
+## Die Rekursive-Methode `getLength`
+
+![](img/Copyrighted/cornelson_inf6_intro_length.jpg){.center}
+
+## Die Rekursive-Methode `getLength`
+
+Jedes **Lied** bestimmt die Anzahl der Lieder hinter sich, indem es seinen Nachfolger nach der Länge frägt und eins addiert.
+
+\begin{pseudocode}
+Methode Song.GibLänge(): \\
+\phantom{.}~~falls kein Nachfolger \\
+\phantom{.}~~~~antworte 1 \\
+\phantom{.}~~sonst \\
+\phantom{.}~~~~nachMir <- Nachfolger.GibLänge() \\
+\phantom{.}~~~~antworte nachMir + 1 \\
+\end{pseudocode}
+
+### \faIcon{desktop} Arbeitsauftrag: \hfill 10min
+
+Implementiere die **rekursive** Methode `int getLength()`.