aboutsummaryrefslogtreecommitdiff
path: root/Info
diff options
context:
space:
mode:
Diffstat (limited to 'Info')
-rw-r--r--Info/10/2/Aufgaben/Datenkapselung_Bank.tex56
-rw-r--r--Info/10/2/Aufgaben/Polymorphismus_Beschaeftigte.tex184
-rw-r--r--Info/10/2/Aufgaben/Referenzvariablen_Schuelerakte.tex89
3 files changed, 329 insertions, 0 deletions
diff --git a/Info/10/2/Aufgaben/Datenkapselung_Bank.tex b/Info/10/2/Aufgaben/Datenkapselung_Bank.tex
new file mode 100644
index 00000000..6a60d9c8
--- /dev/null
+++ b/Info/10/2/Aufgaben/Datenkapselung_Bank.tex
@@ -0,0 +1,56 @@
+\renewcommand{\AnzahlPunkte}{7} %%Anzahl der Punkte festlegen
+\renewcommand{\Verteilung}{4 + 3 BE} %%Anzahl der Punkte festlegen
+
+\begin{Aufg}
+
+\textbf{a)} Beschreibe in eigenen Worten den Grundsatz der Datenkapselung und wie er in der Programmiersprache Java umgesetzt werden kann.
+
+\noindent \textbf{b)} Nenne drei Stellen an denen in der Klasse \texttt{BANKKONTO} der Grundsatz der Datenkapselung nicht umgesetzt wurde und begründe jeweils warum.
+
+\begin{minted}[linenos, baselinestretch=1.2, fontsize=\small]{java}
+public class BANKKONTO {
+ public double kontostand;
+ public String kunde;
+ private String kontoAuszug;
+
+ public BANKKONTO(String neuerKunde) {
+ kunde = neuerKunde;
+ kontostand = 0;
+ kontoAuszug = "";
+ }
+
+ private void KontostandAusgeben() {
+ System.out.println("Kund*in " + kunde + " hat "
+ + kontostand + "Euro auf dem Konto");
+ }
+
+ private String KontoAuszugGeben() {
+ return kontoAuszug;
+ }
+}
+\end{minted}
+\end{Aufg}
+
+\begin{Lsg}
+a)
+\begin{itemize}
+\setlength\itemsep{0.1em}
+ \item Nur Klasse sollte Zugriff auf ihre Attribute haben (1BE)
+ \item Zugriff sollte über Methoden der Klasse gewährt werden (1BE)
+ \item Zugriffsmodifikatoren: (1BE)
+ \begin{itemize}
+ \setlength\itemsep{0.1em}
+ \item private - Nur Zugriff aus Klasse (1BE)
+ \item public - Uneingeschränkter Zugriff
+ \end{itemize}
+\end{itemize}
+
+b) Halber BE für richtige Zeile; Halber BE für Begründung
+\begin{itemize}
+ \setlength\itemsep{0.1em}
+ \item Zeile 2: kontostand ist public -> Uneingeschränkter Zugriff
+ \item Zeile 3: kunde ist public -> Uneingeschränkter Zugriff
+ \item Zeile 12: KontostandAusgeben ist private -> Keine Möglichkeit an den Kontostand zu kommen
+ \item Zeile 17: KontoAuszugGeben ist private -> Keine Möglichkeit an den Konto-Auszug zu kommen
+\end{itemize}
+\end{Lsg}
diff --git a/Info/10/2/Aufgaben/Polymorphismus_Beschaeftigte.tex b/Info/10/2/Aufgaben/Polymorphismus_Beschaeftigte.tex
new file mode 100644
index 00000000..e58f703e
--- /dev/null
+++ b/Info/10/2/Aufgaben/Polymorphismus_Beschaeftigte.tex
@@ -0,0 +1,184 @@
+\renewcommand{\AnzahlPunkte}{14} %%Anzahl der Punkte festlegen
+\renewcommand{\Verteilung}{4 + 6 + 4BE} %%Anzahl der Punkte festlegen
+
+\begin{Aufg}
+
+Du wurdest beauftragt die Gehaltsabrechnung eines Unternehmens in Java zu implementieren.
+Das Unternehmen beschäftigt externe Freiberufler die nach Stunden bezahlt werden, Festangestellte die einen individuell vereinbarten Festbetrag erhalten, sowie Manager die mit einem Pauschalbetrag von 10 tausend Euro vergütet werden.
+Zusätzlich erhalten Festangestellte einen Jahresbonus der prozentual mit dem Monatsgehalt ausbezahlt wird.
+Für jede Art von Mitarbeiter soll das Monatsgehalt mit der Methode \texttt{GehaltBerechnen} errechnet und als Rückgabewert zurück gegeben werden.
+Zur Vereinfachung damit ganze Zahlen verwendet werden können soll die Software alle Geld Beträge in Cent statt in Euro speichern und verarbeiten.
+
+\textbf{a)} Im folgenden Klassendiagramm siehst du einen ersten Entwurf die verschiedenen Mitarbeiterarten zu modellieren. Zeichne ein geeigneteres Klassendiagramm und nenne das von Dir verwendete Konzept.
+
+\vspace{1cm}
+
+\begin{tikzpicture}
+\begin{class}[text width=7cm]{UNTERNEHMEN}{5,8}
+\attribute{angestellte: ANGESTELLTER[]}
+\attribute{externe: EXTERNER[]}
+\attribute{manager: MANAGER[]}
+\operation{AngestelltenEinstellen(mitarbeiter)}
+\operation{ExternenEinstellen(mitarbeiter)}
+\operation{ManagerEinstellen(mitarbeiter)}
+\operation{GehaltsKostenBerechnen()}
+\end{class}
+
+\begin{class}[text width=4cm]{ANGESTELLTER}{0,0}
+\attribute{name: String}
+\attribute{gehalt: int}
+\attribute{jahresbonus: int}
+\operation{NamenGeben()}
+\operation{GehaltBerechnen()}
+\end{class}
+
+\begin{class}[text width=4cm]{MANAGER}{5,0}
+\attribute{name: String}
+\operation{NamenGeben()}
+\operation{GehaltBerechnen()}
+\end{class}
+
+\begin{class}[text width=4cm]{EXTERNER}{10,0}
+\attribute{name: String}
+\attribute{stunden: int}
+\attribute{stundenlohn: int}
+\operation{NamenGeben()}
+\operation{GehaltBerechnen()}
+\end{class}
+
+\association{UNTERNEHMEN}{}{1}{ANGESTELLTER}{*}{}
+\association{UNTERNEHMEN}{}{1}{MANAGER}{*}{}
+\association{UNTERNEHMEN}{}{1}{EXTERNER}{*}{}
+\end{tikzpicture}
+
+\textbf{b)} Implementiere die Klassen \texttt{ANGESTELLTER}, \texttt{EXTERNER}, sowie \texttt{MANAGER} mit geeigneten Konstruktoren, sowie der entsprechenden Methode \texttt{GehaltBerechnen}.
+
+\textbf{c)} Vervollständige die Methode \texttt{GehaltsKostenBerechnen} der Klasse \texttt{UNTERNEHMEN}.
+
+\begin{minted}[baselinestretch=1.2, fontsize=\small]{java}
+class UNTERNEHMEN {
+ private MITARBEITER[] mitarbeiter;
+ private int anzahlMitarbeiter;
+
+ public UNTERNEHMEN() {
+ mitarbeiter = new MITARBEITER[100];
+ anzahlMitarbeiter = 0;
+ }
+
+ public void MitarbeiterEinstellen(MITARBEITER neuer) {
+ mitarbeiter[anzahlMitarbeiter] = neuer;
+ anzahlMitarbeiter += 1;
+ }
+
+
+ public int GehaltsKostenBerechnen() {
+ // TODO: Vervollständige die Methode die die gesamten
+ // Gehaltskosten des Unternehmen berechnet und zurück gibt
+
+
+
+
+
+
+
+ }
+}
+\end{minted}
+\end{Aufg}
+
+\begin{Lsg}
+a) Polymorphismus benannt (1BE); MITARBEITER Array in Unternehmen (1BE); MITARBEITER Klasse mit gemeinsamen Attributen \& Methoden (name, NamenGeben, GehaltBerechnen) (1BE); Korrekte Vererbung auch UML (1BE) \\
+
+\begin{tikzpicture}
+\begin{class}[text width=7cm]{UNTERNEHMEN}{5,8}
+\attribute{mitarbeiter: MITARBEITER[]}
+\operation{MitarbeiterEinstellen(mitarbeiter)}
+\operation{GehaltsKostenBerechnen()}
+\end{class}
+
+\begin{class}[text width=4cm]{MITARBEITER}{5,3}
+\attribute{name: String}
+\operation{NamenGeben()}
+\end{class}
+
+\begin{class}[text width=4cm]{ANGESTELLTER}{0,0}
+\inherit{MITARBEITER}
+\attribute{gehalt: int}
+\attribute{jahresbonus: int}
+\operation{GehaltBerechnen()}
+\end{class}
+
+\begin{class}[text width=4cm]{MANAGER}{5,0}
+\inherit{MITARBEITER}
+\operation{GehaltBerechnen()}
+\end{class}
+
+\begin{class}[text width=4cm]{EXTERNER}{10,0}
+\inherit{MITARBEITER}
+\attribute{stunden: int}
+\attribute{stundenlohn: int}
+\operation{GehaltBerechnen()}
+\end{class}
+
+\association{UNTERNEHMEN}{}{1}{MITARBEITER}{*}{}
+\end{tikzpicture}
+
+b) 1BE pro korrekten Konstruktor; 1BE pro korrekte GehaltBerechnen Methode
+
+\begin{minted}[baselinestretch=1.2, fontsize=\small]{java}
+class ANGESTELLTER extends MITARBEITER {
+ public ANGESTELLTER(String n, int g, int j) {
+ super(n); // oder name = n;
+ gehalt = g;
+ jahresbonus = j;
+ }
+
+ public int GehaltBerechnen() {
+ return gehalt + jahresbonus / 12;
+ }
+}
+
+class EXTERNER extends MITARBEITER {
+ public EXTERNER(String n, int s, int l) {
+ super(n); // oder name = n;
+ stunden = s;
+ stundenlohn = l;
+ }
+
+ public int GehaltBerechnen() {
+ return stunden * stundenlohn;
+ }
+}
+
+class MANAGER extends MITARBEITER {
+ public MANAGER(String n) {
+ super(n); // oder name = n;
+ }
+
+ public int GehaltBerechnen() {
+ return 1000000;
+ }
+}
+\end{minted}
+
+c) 1BE für Summenvariable und ihr Zurückgeben; 1BE für korrekten loop; 1BE für korrekte Array Verwendern; 1BE für korrekten Methodenaufruf
+
+\begin{minted}[baselinestretch=1.2, fontsize=\small]{java}
+class UNTERNEHMEN {
+ private MITARBEITER[] mitarbeiter;
+ private int anzahlMitarbeiter;
+
+ ...
+
+ public int GehaltsKostenBerechnen() {
+ // TODO: Vervollständige die Methode die die gesamten
+ // Gehaltskosten des Unternehmen berechnet und zurück gibt
+ int gesamtKosten;
+ for (int i = 0; i < anzahlMitarbeiter; i+=) {
+ gesamtKosten += mitarbeiter[i].GehaltBerechnen();
+ }
+ return gesamtKosten;
+ }
+}
+\end{minted}
+\end{Lsg}
diff --git a/Info/10/2/Aufgaben/Referenzvariablen_Schuelerakte.tex b/Info/10/2/Aufgaben/Referenzvariablen_Schuelerakte.tex
new file mode 100644
index 00000000..02f77b0f
--- /dev/null
+++ b/Info/10/2/Aufgaben/Referenzvariablen_Schuelerakte.tex
@@ -0,0 +1,89 @@
+\renewcommand{\AnzahlPunkte}{7} %%Anzahl der Punkte festlegen
+\renewcommand{\Verteilung}{4 + 3 BE} %%Anzahl der Punkte festlegen
+
+\begin{Aufg}
+Die Verwaltung der Schule soll digitalisiert werden.
+Bei der Modellierung der Schülerakten soll die Klasse \texttt{SCHUELER} ein Kind des HSG sowie dessen Namen erfassen. Eine Klasse \texttt{SCHUELERAKTE} soll die wichtigen Informationen wie Notenschnitt, Hinweise sowie Verweise pro Schüler*in speichern.
+
+\textbf{a)} Zeichne das Klassendiagramm der Klasse \texttt{SCHUELER} und \texttt{SCHUELERAKTE} mit ihren Attributen sowie deren Beziehung.
+Ergänze das Modell um zwei \textit{passende} Methoden deiner Wahl.
+
+\textbf{b)} Ergänze die Klasse \texttt{SCHUELER} um eine Referenz auf eine \texttt{SCHUELERAKTE}, erzeuge ein neues \texttt{SCHUELERAKTE} Objekt und ergänze die Methode \texttt{AkteAusgeben} um eine Ausgaben des Attribute \texttt{notenschnitt} aus der Schülerakte.
+
+\begin{minted}[baselinestretch=1.2, fontsize=\small]{java}
+public class SCHUELER {
+ private String name;
+ // TODO: Deklariere eine Referenzvariable für die Schülerakte
+
+
+ public SCHUELER(String neuerName, double neuerSchnitt) {
+ name = neuerName;
+ // TODO: Erzeuge ein neues Schülerakte Objekt
+
+ }
+
+ public void AkteAusgeben() {
+ System.out.println(name);
+ // TODO: Gib mit Hilfe der Methode System.out.println() das Attribut
+ // notenschnitt der Akte der Schüler*in aus
+
+ }
+}
+\end{minted}
+\end{Aufg}
+
+\begin{Lsg}
+
+\begin{itemize}
+ \item 1 BE für korrektes UML
+ \item 1 BE wenn alle Attribute und Methoden vorhanden
+ \item 1 BE für richtigen Typ des Attributes Akte
+ \item 1 BE für 1 zu 1 Beziehung
+ \item (Hinweise und Verweise können als String oder String[] modelliert werden)
+ \item Halber Punkt Abzug für falsche Datentypen
+\end{itemize}
+
+\begin{tikzpicture}
+\begin{class}[text width=5cm]{SCHUELER}{0,0}
+\attribute{name : String}
+\attribute{akte : SCHUELERAKTE}
+\operation{NamenGeben()}
+\end{class}
+
+\begin{class}[text width=5cm]{SCHUELERAKTE}{7,0}
+\attribute{notenschnitt : double}
+\attribute{hinweise : String[]}
+\attribute{verweise : String[]}
+\end{class}
+
+\association{SCHUELER}{}{1}{SCHUELERAKTE}{1}{}
+\end{tikzpicture}
+
+\begin{itemize}
+ \item 1 BE für korrekte Variabel-Deklaration
+ \item 1 BE für korrekte Initialisierung
+ \item 1 BE für richtigen Verwendung der Punktnotation
+\end{itemize}
+
+
+\begin{minted}[baselinestretch=1.2, fontsize=\small]{java}
+public class SCHUELER {
+ private String name;
+ // TODO: Deklariere eine Referenzvariable für die Schülerakte
+ private SCHUELERAKTE akte;
+
+ public SCHUELER(String neuerName, double neuerSchnitt) {
+ name = neuerName;
+ // TODO: Erzeuge ein neues Schülerakte Objekt
+ akte = new SCHUELERAKTE();
+ }
+
+ public void AkteAusgeben() {
+ System.out.println(name);
+ // TODO: Gib mit Hilfe der Methode System.out.println() das Attribut notenschnitt der
+ // Akte der Schüler*in aus
+ System.out.println(akte.notenschnitt);
+ }
+}
+\end{minted}
+\end{Lsg}