diff options
Diffstat (limited to 'Info')
| -rw-r--r-- | Info/10/2/Aufgaben/Datenkapselung_Bank.tex | 56 | ||||
| -rw-r--r-- | Info/10/2/Aufgaben/Polymorphismus_Beschaeftigte.tex | 184 | ||||
| -rw-r--r-- | Info/10/2/Aufgaben/Referenzvariablen_Schuelerakte.tex | 89 |
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} |
