diff options
| author | Florian Fischer <florian.fischer@muhq.space> | 2026-09-29 18:08:39 +0200 |
|---|---|---|
| committer | Florian Fischer <florian.fischer@muhq.space> | 2026-09-29 18:08:39 +0200 |
| commit | 8847096b7aae6a14d9527aa8505212016426bfe5 (patch) | |
| tree | de5e45dfc1da6f5be4bb0d927386b79d8077d616 /Info | |
| parent | 8b7d8d286b39f846b2689d26241ecd7e00c44de0 (diff) | |
| download | unterricht-8847096b7aae6a14d9527aa8505212016426bfe5.tar.gz unterricht-8847096b7aae6a14d9527aa8505212016426bfe5.zip | |
add list intro slides
Diffstat (limited to 'Info')
| -rw-r--r-- | Info/12/Listen/Intro/.gitignore | 2 | ||||
| -rw-r--r-- | Info/12/Listen/Intro/img/playlist.png | bin | 0 -> 15721 bytes | |||
| -rw-r--r-- | Info/12/Listen/Intro/slides-wiederholung.md | 108 | ||||
| -rw-r--r-- | Info/12/Listen/Intro/slides.md | 149 |
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 Binary files differnew file mode 100644 index 00000000..204c3281 --- /dev/null +++ b/Info/12/Listen/Intro/img/playlist.png 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%} +{.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` + +{.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()`. |
