aboutsummaryrefslogtreecommitdiff
path: root/Info/10/2/Polymorphismus/handout.tex
blob: a05d23314555581f5f82b9a4c06c7a9634890f12 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
\documentclass{handout}
\csname endofdump\endcsname
\usepackage{minted}
\usepackage{wrapfig}
\geometry{top=0.5cm}

\setlength\parindent{10pt}

\title{Polymorphismus}

\begin{document}

\begin{multicols}{2}
\textbf{AUFGABE 0:} 
\begin{itemize}
\item Öffne das Projekt \textbf{Tierheim} und mache dich kurz damit vertraut.
\item Erkläre wie das Konzept der Vererbung im Code realisiert wird?
\item Markiere die in der Klasse \texttt{Katze} verwendeten Schlüsselwörter der Vererbung?
\item Gib an welche Objekte beim Ausführen der \texttt{main}-Methode der Klasse \texttt{Tierheim} erzeugt werden? Führe die Methode aus.
\end{itemize}

\columnbreak

\begin{minted}{java}
class Katze extends Tier {
    public Katze(String neuerName,
                 String neuesGeschlecht)
    {
        super(neuerName, neuesGeschlecht);
    }

    public void lautAusgeben() {
        System.out.println("Miau!Miau!");
    }
}
\end{minted}
\end{multicols}

\vspace{-1mm}
\noindent\textbf{AUFGABE 1:}

Überlege dir wie du unterschiedliche Tiere im Tierheim speicherst und setze deine Überlegung um.

Welches Referenzattribut benötigt die Klasse \texttt{Tierheim}? \\[1mm]
\kariert{3}

\noindent\textbf{AUFGABE 2:}

Begründe warum Pluto (Objekt der Klasse \texttt{Hund}) nicht ins Tierheim aufgenommen werden kann. \\[1mm]
\kariert{7}

\begin{defbox}{Polymorphismus}
% \begin{tabularx}{\textwidth}{p{0.35\textwidth} p{0.03\textwidth} p{0.6\textwidth}}
% \vspace{0.1mm}
\begin{wrapfigure}{4}{0.55\textwidth}
\begin{tikzpicture}[scale=0.45]
  \begin{object}[text width=3.5cm]{th1}{0,3.5}
    \instanceOf{Tierheim}
    \attribute{tiere[0]}
    \attribute{tiere[1]}
    \attribute{...}
  \end{object}

  \begin{object}[text width=4cm]{t1}{12,0}
    \instanceOf{Tier}
    \attribute{name="Wolle"}
    \attribute{geschlecht="ungewiss"}
  \end{object}

  \begin{object}[text width=4cm]{h1}{12,6.5}
    \instanceOf{Hund}
    \attribute{name="Pluto" }
    \attribute{geschlecht="maennlich"}
    \attribute{rasse="comic"}
  \end{object}

  \node[fill=black, circle, minimum size=0.05cm] (circle) at (2.7, 1.6) {};
  \draw[line width=2pt, -latex, draw=blue!80] (circle) edge [bend left=30] (8, 6) {};
  \node[fill=black, circle, minimum size=0.05cm] (circle2) at (2.7, 0.55) {};
  \draw[line width=2pt, -latex, draw=red!80] (circle2) edge [bend right=15] (8, -0.5) {};
\end{tikzpicture}% \\
% \end{tabularx}
\end{wrapfigure}

... ist die Eigenschaft, dass ein \textbf{Referenzattribut} nicht nur Objekte der als Datentyp angegebenen Klasse referenzieren kann, sondern auch Objekte \textbf{aller} zu dieser Klasse existierenden \textbf{Unterklassen}.% & &
\vspace{2mm}

Wird ein Objekt einer \textbf{Unterklasse} über dieses Referenzattribut referenziert, so werden Attribute und Methoden verwendet, wie sie in \textbf{dessen Klasse} bekannt sind (und nicht die überschriebenen Methoden der Oberklasse).
\end{defbox}

\noindent\textbf{AUFGABE 3:}

Vervollständige die Klasse \texttt{Hund} als Spezialisierung der Klasse \texttt{Tier}.\\

\noindent\textbf{AUFGABE 4:}

\begin{itemize}
\item Implementiere die Methode \mintinline{java}{Tierheim.besuchen()}.
\item Überlege dir welche Ausgaben das Programm machen wird.
\begin{tcolorbox}[title=Ausgabe]
\psolution{\Large Wuff}
\hrule
\end{tcolorbox}
\item Überprüfe deine Vermutung in dem du das Programm ausführst.
\end{itemize}
\end{document}