-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
7.1.1.1.tex
391 lines (296 loc) · 16.5 KB
/
7.1.1.1.tex
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
%----------------------------------------------------------------------------------------
% PAKET-/ UND ANDERE DOKUMENT-IMPORTS
%----------------------------------------------------------------------------------------
\documentclass[]{scrartcl} % Formateinstellungen
\usepackage[ngerman]{babel} % deutsche Silbentrennung
\usepackage[utf8]{inputenc} % deutsche Umlaute
\usepackage{placeins} % verbessert Anzeige eines Floats hinter dem Befehl \FloatBarrier
\usepackage{amsfonts} % neue Schriftanpassungen (wird von amssymb (s.u.) geladen)
\usepackage{amssymb} % erweitert Benutzung von amsfonts (s.o.)
\usepackage{amsmath} % Vielzahl von neuen mathematischen Umgebungen und Befehlen (wird von mathtools (s.u.) geladen)
\usepackage{mathtools} % Verbesserung von amsmath (s.o.)
\usepackage{booktabs} % Tabellen ohne vertikale Striche
\usepackage{siunitx} % Einheitensystem
\usepackage[margin={0.3cm,0.3cm},font=singlespacing,labelfont=bf,labelsep=endash]{caption} % Bildunterschriften
\usepackage{wrapfig} % Bild von Text umfließen lassen
\usepackage{sidecap} % ermöglicht Überschriften neben Bildern / Tabellen
\usepackage{setspace} % zum Definieren des Zeilenabstandes
\usepackage{eurosym} % ergänzt optimales Euro-Zeichen
\usepackage[perpage,marginal]{footmisc} % ermöglicht Fußnoten und das Verändern dieser
\usepackage{graphicx} % ermöglicht besseres Einbinden von Grafiken
\usepackage{fancyhdr} % zum Erstellen von Kopf- und Fußzeilen
\usepackage{listings} % ermöglicht Quellcodelisting
\usepackage{color} % Farb-Management von Vorder- und Hintergrundfarben
\usepackage{pdfpages} % ermöglicht das Einbinden von ganzen oder nur Teilen von PDFs
\usepackage{lineno} % Zeilenzählung
\usepackage{framed} % ermöglicht das Einrahmen von Elementen
\usepackage{pifont} % fügt Symbol-Schriften hinzu
\usepackage[hidelinks]{hyperref} % ermöglicht das Hinzufügen von Links und Verweisen innerhalb
% des PDF Dokuments und weitere Einstellungen
\usepackage[left=2.5cm,right=2cm,top=2cm,bottom=2cm,includeheadfoot]{geometry} % Größenanpassung der Seite
%----------------------------------------------------------------------------------------
%----------------------------------------------------------------------------------------
% KONFIGURATIONEN
%----------------------------------------------------------------------------------------
\begin{document}
\setlength{\parskip}{1ex} % Abstand zwischen Absätzen
\parindent 0pt % legt Einrücke der ersten Zeile fest
\renewcommand{\thefigure}{\arabic{figure}.\alph{ab}} % Umdefinieren von Bildnummern
\definecolor{darkblue}{rgb}{0,0,.6} % Festlegen der Farben
\definecolor{darkred}{rgb}{.6,0,0} % Festlegen der Farben
\definecolor{darkgreen}{rgb}{0,.6,0} % Festlegen der Farben
\definecolor{red}{rgb}{.98,0,0} % Festlegen der Farben
\lstloadlanguages{Java} % lädt Programmiersprachen
\lstset{language=Java,basicstyle=\footnotesize\ttfamily,commentstyle=\itshape\color{darkgreen},keywordstyle=\bfseries\color{darkblue},stringstyle=\color{darkred},tabsize=3,showspaces=false,showtabs=false,columns=fixed,numbers=left,frame=single,numberstyle=\tiny,breaklines=true,showstringspaces=false,xleftmargin=1cm} % Erstellen eines Codeblocks
\pagestyle{fancy} % Setzen des Seitenstyles "fancy" ermöglicht eigenes Erstellen einer Kopf- und Fußzeile
\fancyhf{} % alle Kopf- und Fußzeilenfelder bereinigen
\fancyhead[L]{\leftmark} % Kopfzeile links (mit "leftmark" erstellt man im Header das Chapter, mit "rightmark" die Section)
\fancyhead[C]{} % zentrierte Kopfzeile
\fancyhead[R]{\thepage} % Kopfzeile rechts
\fancypagestyle{plain} % legt Seiten-Typen fest
\newcommand{\barrow}{\item[\ding{228}]} % hinzufügen des Pfeil-Aufzählsymbols unter dem Command \barrow
%----------------------------------------------------------------------------------------
%----------------------------------------------------------------------------------------
% 1. SEITE
%----------------------------------------------------------------------------------------
\titlehead{\Large
\begin{center}
\begin{framed}
\centering {Inoffizielle Lösungen und Erklärungen - \href{https://www.inf-schule.de/inf-schule}{inf-schule\textsuperscript{\textcopyright}} (\href{https://creativecommons.org/licenses/by-sa/4.0/legalcode.de}{\textit{Lizenz}})}
\centering {\Large\textbf{\href{https://inf-schule.de/programmierung/oopjava}{2.3 Objektorientierte Programmierung mit Java}}}
\end{framed}
\end{center}}
\title{\huge{\href{https://inf-schule.de/programmierung/oopjava/klassen/grundbegriffe}{1.1\\Hasen als Objekte}}\\
\vspace{0.5cm}
\begin{figure}[ht]
\centering
\includegraphics[height=4.5cm]{2.3.1.1/Hasen_als_Objekte.png}
\end{figure}
\vspace{2cm}}
\author{\textbf{Benötigte IDEs:}\\
\href{https://www.greenfoot.org/}{Greenfoot}, \href{https://www.bluej.org/}{BlueJ}
\vspace{2cm}}
\date{\textbf{Verfasser:}\\
\href{https://nikothegreek.jimdofree.com/}{Niko Diamadis}\\
\vspace{0.5cm}
\textbf{Erstellungs-/ Änderungsdatum}\\
\today\enlargethispage{4cm}}
%----------------------------------------------------------------------------------------
%----------------------------------------------------------------------------------------
% 2. SEITE
%----------------------------------------------------------------------------------------
\doublespacing
\maketitle\thispagestyle{empty}
\numberwithin{equation}{section}
\cleardoublepage
\setcounter{page}{1}
\tableofcontents
%----------------------------------------------------------------------------------------
%----------------------------------------------------------------------------------------
% 3. UND NACHFOLGENDE SEITEN
%----------------------------------------------------------------------------------------
\newpage
\pagenumbering{arabic} % Ändern der Seitenangabe
\section{Objekte in Aktion}
\subsection{Objekte und Klassen}
Die gegebenen Anweisungen sollten selbsterklärend sein, hier nur noch eine passende Bildfolge dazu.
\vspace{0.3cm}
\begin{figure}[ht]
\centering
\includegraphics[height=4.5cm]{2.3.1.1/1.Objekte_in_Aktion/1-1.png}
\hspace{0.5cm}
\includegraphics[height=4.5cm]{2.3.1.1/1.Objekte_in_Aktion/1-2.png}
\end{figure}
\vspace{0.5cm}
\begin{figure}[ht]
\centering
\includegraphics[height=4.5cm]{2.3.1.1/1.Objekte_in_Aktion/1-3.png}
\hspace{0.5cm}
\includegraphics[height=4.5cm]{2.3.1.1/1.Objekte_in_Aktion/1-4.png}
\end{figure}
\subsection{Methoden}
Zunächst gehe ich auf die genannten Methoden eines Objektes der Klasse \texttt{Hase} ein.
\begin{itemize}
\barrow \texttt{linksDrehen}
\begin{itemize}
\item der Hase dreht sich um 90$^{\circ}$ um die eigene Achse
\end{itemize}
\barrow \texttt{laufe}
\begin{itemize}
\item der Hase geht ein Feld weiter in die Richtung, in welche er gerade schaut
\end{itemize}
\barrow \texttt{esseKarotte}
\begin{itemize}
\item der Hase frisst eine Karotte, wenn beide Objekte auf einem Feld stehen
\end{itemize}
\end{itemize}
Es folgen Bilder zur Erklärung, wie die Methoden von \texttt{Hase} und \texttt{Hasenwelt} aufgerufen werden.
\begin{figure}[ht]
\centering
\includegraphics[height=5.5cm]{2.3.1.1/1.Objekte_in_Aktion/2-1.png}
\hspace{0.5cm}
\includegraphics[height=5.5cm]{2.3.1.1/1.Objekte_in_Aktion/2-2.png}
\end{figure}
\subsection{Parameter \& Datentypen}
Nach Aufruf der Methode \texttt{setRichtung} am \texttt{Hasen}-Objekt öffnet sich ein Eingabefenster, um die gerade erlernten Parameter, welche die zu ausführende Methode, falls Parameter vorhanden, benötigt, zu übergeben.
\begin{figure}[ht]
\centering
\includegraphics[height=5cm]{2.3.1.1/1.Objekte_in_Aktion/3-1.png}
\end{figure}
Wie im Bild zu sehen findet man im Eingabefenster den Datentypen des Eingabewertes, der verlangt wird, in diesem Falle vom Typen \texttt{int}, also \texttt{Integer}\footnote{sprich ganzzahlige Werte von $-2^{32}$ (-2.147.483.6489) bis $2^{32} -1$ (2.147.483.647) inklusive der 0}. Zu bedenken ist jedoch, dass natürlich nicht alle Eingaben sinnvoll sind und verarbeitet werden können.\\
Selbiges gilt für die Methode \texttt{erzeugeObjekte}, nur dass dort drei Eingabewerte vom Typen \texttt{int} gefordert werden. Bei dieser Methode z.B. wird mithilfe des Eingabewertes die Anzahl der Objekte, die durch die Methode erstellt werden, festgelegt.
\begin{figure}[ht]
\centering
\includegraphics[height=5cm]{2.3.1.1/1.Objekte_in_Aktion/3-2.png}
\hspace{0.5cm}
\includegraphics[height=5cm]{2.3.1.1/1.Objekte_in_Aktion/3-3.png}
\end{figure}
\vspace{0.5cm}
\begin{figure}[ht]
\centering
\includegraphics[height=4.5cm]{2.3.1.1/1.Objekte_in_Aktion/3-4.png}
\end{figure}
\subsection{Rückgabewerte}
Nachdem nun auch das Prinzip eines Rückgabewertes einer Methode erklärt worden ist, soll man diese an einem \texttt{Hasen}-Objekt erkunden.\\
Uns stehen bei diesem Beispiel nur zwei Methoden mit Rückgabewert zur Verfügung\\
(\texttt{int gelaufeneSchritte} und \texttt{boolean kannLaufen}; vor allen anderen steht nämlich \texttt{void}, bei diesen wird also kein Wert zurückgegeben).
\begin{figure}[ht]
\centering
\includegraphics[height=5cm]{2.3.1.1/1.Objekte_in_Aktion/4-1.png}
\end{figure}
Wenn man also jetzt die zurückgegebenen Werte mit den zugehörigen Signaturen abgleicht, müsste auffallen, dass beide Werte Sinn ergeben.
\newpage
\begin{figure}[ht]
\centering
\includegraphics[height=4.5cm]{2.3.1.1/1.Objekte_in_Aktion/4-2.png}
\hspace{0.5cm}
\includegraphics[height=4.5cm]{2.3.1.1/1.Objekte_in_Aktion/4-3.png}
\end{figure}
\subsection{Attribute}
Das nächste erlernte Konzept ist das der Attribute.\\
Das geforderte Inspizieren eines Objektes ist ganz einfach durch einen Rechtsklick auf irgendeines der Objekte und das Auswählen von \glqq Inspizieren\grqq{} möglich.
\begin{figure}[ht]
\centering
\includegraphics[height=10cm]{2.3.1.1/1.Objekte_in_Aktion/5-1.png}
\end{figure}
Die als Beispiel gesuchten Attribute für die Position des Objektes sind \texttt{int x} und \texttt{int y}.
\newpage
\subsection{Quelltext}
Zu dieser Aufgabe sind meines Erachtens nach keine Anleitungen und/oder Erläuterungen nötig.\\
Wenn doch Fragen aufkommen, schreib' einfach an \textbf{\href{mailto:nikodiamond3@gmail.com}{nikodiamond3@gmail.com}}.
\subsection{Vererbung}
Die markierten Methoden sind die von \texttt{Actor} vererbten Methoden, alle, welche unter \glqq geerbt von Actor\grqq{} stehen, sind in der Klasse \texttt{Hase} selbst definiert.\\
\begin{figure}[ht]
\centering
\includegraphics[height=9.5cm]{2.3.1.1/1.Objekte_in_Aktion/7-1.png}
\end{figure}
Analog funktioniert es auch mit der Klasse \texttt{Elefant}.
\newpage
\subsection{Klassendiagramm für Hase}
Ganz oben im Klassendiagramm steht der Klassenname.\\
Darunter lassen sich die Attributnamen und dahinter deren Datentyp finden.
Ganz unten findet man die Methoden und angehängt deren Rückgabetyp. Die Parameter werden direkt hinter dem Methodennamen in Klammern angegeben (auch hier zuerst Variablennamen und dann der Datentyp).\\
Anschließend folgen noch die geforderten Ergänzungen im Klassendiagramm.\\
\begin{figure}[ht]
\centering
\includegraphics[height=9.5cm]{2.3.1.1/1.Objekte_in_Aktion/8-1.png}
\end{figure}
\newpage
\section{Fachkonzept - Objekt}
Zu dieser Seite sind meines Erachtens nach keine Anleitungen und/oder Erläuterungen nötig.\\
Wenn doch Fragen aufkommen, schreib' einfach an \textbf{\href{mailto:nikodiamond3@gmail.com}{nikodiamond3@gmail.com}}.
\newpage
\section{Fachkonzept - Klasse}
Zu dieser Seite sind meines Erachtens nach keine Anleitungen und/oder Erläuterungen nötig.\\
Wenn doch Fragen aufkommen, schreib' einfach an \textbf{\href{mailto:nikodiamond3@gmail.com}{nikodiamond3@gmail.com}}.
\newpage
\section{Übungen}
\subsection{Geburtstagsrechner}
Hier folgt die Struktur der Beispielsklasse \texttt{Person}.
\begin{itemize}
\barrow Attribute
\begin{itemize}
\item \texttt{tag} vom Datentypen \texttt{int}
\item \texttt{monat} vom Datentypen \texttt{int}
\item \texttt{jahr} vom Datentypen \texttt{int}
\item \texttt{name} vom Datentypen \texttt{String}
\end{itemize}
\barrow \texttt{Methoden}
\begin{itemize}
\item \texttt{getAlter} mit \texttt{int} als Rückgabewert und ohne Parameter
\item \texttt{getTageBisGeburtstag} mit \texttt{int} als Rückgabewert und ohne Parameter
\item \texttt{setGeburtstag} ohne Rückgabewert und mit den Parametern \texttt{int t}, \texttt{int m}, \texttt{int y}
\item \texttt{istVolljaehrig} mit \texttt{boolean} als Rückgabewert und ohne Parameter
\item \texttt{setName} ohne Rückgabewert und mit dem Parameter \texttt{String name}
\item \texttt{druckeInfo} ohne Rückgabewert und ohne Parameter
\end{itemize}
\end{itemize}
\vspace{0.5cm}
\begin{figure}[ht]
\centering
\includegraphics[height=4.5cm]{2.3.1.1/4.Uebungen/1-1.png}
\end{figure}
\newpage
Im Screencast wurden folgende Schritte ausgeführt:
\begin{itemize}
\barrow Erstellen zwei neuer Objekte der Klasse \texttt{Person} mit den Namen \texttt{a} und \texttt{b}
\barrow Inspizieren des Objektes \texttt{a}
\barrow Aufrufen der \texttt{setName}-Methode an \texttt{a} mit dem Parameter \texttt{name = \dq Anna"}
\barrow Aufrufen der \texttt{setGeburtstag}-Methode an \texttt{a} mit den Parametern \texttt{geburtsTag = 10},\\ \texttt{geburtsMonat = 4} und \texttt{geburtsJahr = 2000}
\barrow Aufrufen der \texttt{getAlter}-Methode an \texttt{a}
\barrow Aufrufen der \texttt{istVolljaehrig}-Methode an \texttt{a}
\barrow Aufrufen der \texttt{getTageBisGeburtstag}-Methode an \texttt{a}
\barrow Aufrufen der \texttt{druckeInfo}-Methode an \texttt{a}
\end{itemize}
\subsection{Zusammenfassung der Begriffe}
\begin{table}[ht]
\centering
\begin{tabular}{c|p{10cm}}
\\Begriff & Definition\\
\hline
\\Klasse & Eine Klasse ist ein Bauplan für Objekte. Dieser Bauplan legt genau fest, welche Attribute die zu konstruierenden Objekte haben sollen und welche Methoden sie ausführen können sollen.\\
\\Objekt & Ein Objekt ist eine Einheit, die Daten mit Hilfe von Attributen verwalten und Operationen zur Verarbeitung der verwalteten Daten mit Hilfe von Methoden ausführen kann.\\
\\Attribut & Attribute sind - an Objekte gebundene - Variablen zur Verwaltung von Daten. Diese entsprechen in der Regel den Eigenschaften der betreffenden Objekte.\\
\\Methode & Methoden sind - an Objekte gebundene - Fähigkeiten zur Verarbeitung von Daten. Diese Methoden werden ausgeführt, wenn das betreffende Objekt veranlasst wird, eine bestimmte Operation auszuführen.\\
\end{tabular}
\end{table}
\newpage
\begin{table}[ht]
\centering
\begin{tabular}{c|p{10cm}}
\\Parameter & Parameter sind Variablen, die dazu dienen, einer Methode beim Aufruf bestimmte Informationen zu übergeben.\footnotemark\\
\\Rückgabewert & Rückgabewerte sind diejenigen Werte, welche von Methoden als Antwort geliefert werden.\\
\\Datentyp & Ein Datentyp gibt an, welche Art von Information ein Attribut hält.\\
\\Signatur & Eine Signatur einer Methode gibt den Rückgabewert, den Namen und die Parameter einer Methode an.\\
\\Vererbung & Die Vererbung ist eine Vorgehensweise, um von einer Klasse ausgehend eine Unterklasse definieren zu können, welche alle Attribute und Methoden der Überklasse übernimmt und auch abrufen kann.\\
\\Klassendiagramm & Ein Klassendiagramm ist ein Hilfsmittel, um Klassen inklusive ihrer Attribute und Methoden und deren Beziehungen einfach und übersichtlich darzustellen. Meist sind diese Diagramme in der \texttt{Unified Modelling Language (UML)} geschrieben.\\
\\Objektdiagramm & Ein Objektdiagramm ist ähnlich aufgebaut wie ein Klassendiagramm, nur dass der Name des beschriebenen Objektes dargestellt wird, anstatt der Datentypen Werte eingesetzt sind und meist die Methoden weggelassen werden, da diese bereits im Klassendiagramm wiederzufinden sind.\\
\end{tabular}
\end{table}
\footnotetext{Parameter, Informatik, https://www.u-helmich.de/inf/BlueJ/lexikon/M-R/Parameter.html, (Abgerufen: 24.02.20, 00:22)}
\newpage
\begin{figure}[ht]
\centering
\includegraphics[height=10cm]{2.3.1.1/4.Uebungen/2-1.png}
\end{figure}
Den Screencast lasse ich aus, das kannst du ja selber erledigen, wenn du es noch machen möchtest.
\newpage
\subsection{Klassen- und Objektdiagramme}
\begin{figure}[ht]
\centering
\includegraphics[height=11cm]{2.3.1.1/4.Uebungen/3-1.png}
\end{figure}
\vspace{0.5cm}
\begin{figure}[ht]
\centering
\includegraphics[height=5.5cm]{2.3.1.1/4.Uebungen/3-2.png}
\hspace{0.5cm}
\includegraphics[height=5.5cm]{2.3.1.1/4.Uebungen/3-3.png}
\end{figure}
\newpage
\subsection{Kreuzworträtsel}
\begin{figure}[ht]
\centering
\includegraphics[height=13.5cm]{2.3.1.1/4.Uebungen/4-1.png}
\end{figure}
\end{document}