aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Info/10/2/Aufgaben/Polymorphismus_Beschaeftigte.tex241
1 files changed, 125 insertions, 116 deletions
diff --git a/Info/10/2/Aufgaben/Polymorphismus_Beschaeftigte.tex b/Info/10/2/Aufgaben/Polymorphismus_Beschaeftigte.tex
index e58f703e..b8696043 100644
--- a/Info/10/2/Aufgaben/Polymorphismus_Beschaeftigte.tex
+++ b/Info/10/2/Aufgaben/Polymorphismus_Beschaeftigte.tex
@@ -1,184 +1,193 @@
-\renewcommand{\AnzahlPunkte}{14} %%Anzahl der Punkte festlegen
-\renewcommand{\Verteilung}{4 + 6 + 4BE} %%Anzahl der Punkte festlegen
+\renewcommand{\AnzahlPunkte}{TODO} %%Anzahl der Punkte festlegen
+\renewcommand{\Verteilung}{3 + 4 + ? + 4 BE} %%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.
+Für jede Art von Mitarbeiter soll das Monatsgehalt mit der Methode \texttt{berechneGehalt} errechnet und als Rückgabewert zurück gegeben werden.
-\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.
+\textbf{a)} Zusätzlich sollen Festangestellte einen Jahresbonus erhalten, der prozentual mit dem Monatsgehalt ausbezahlt wird.
+Dafür wurde bereits die folgende Klasse \texttt{Angestellter} implementiert. Erweitere auf dieser Basis das noch unvollständige Klassendiagramm um die Klasse \texttt{Angestellter}.
-\vspace{1cm}
+\begin{center}
+\begin{minipage}{0.7\textwidth}
+\begin{minted}[]{java}
+class Angestellter extends Mitarbeiter {
+ public Angestellter(String n, double g, double j) {
+ super(n); gehalt = g; jahresbonus = j;
+ }
+
+ public double berechneGehalt() {
+ return gehalt + jahresbonus / 12;
+ }
+}
+\end{minted}
+\end{minipage}
+\end{center}
+\resizebox{0.6\textwidth}{!}{
\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()}
+\begin{class}[text width=6cm]{Unternehmen}{0,4}
+\attribute{mitarbeiter: Mitarbeiter[]}
+\operation{mitarbeiterEinstellen(mitarbeiter)}
+\operation{berechneGehaltsKosten()}
\end{class}
-\begin{class}[text width=4cm]{ANGESTELLTER}{0,0}
+\begin{class}[text width=4cm]{Mitarbeiter}{7, 3.4}
\attribute{name: String}
-\attribute{gehalt: int}
-\attribute{jahresbonus: int}
-\operation{NamenGeben()}
-\operation{GehaltBerechnen()}
+\operation{gibName()}
\end{class}
-\begin{class}[text width=4cm]{MANAGER}{5,0}
-\attribute{name: String}
-\operation{NamenGeben()}
-\operation{GehaltBerechnen()}
-\end{class}
+\association{Unternehmen}{}{1}{Mitarbeiter}{n}{}
-\begin{class}[text width=4cm]{EXTERNER}{10,0}
-\attribute{name: String}
-\attribute{stunden: int}
-\attribute{stundenlohn: int}
-\operation{NamenGeben()}
-\operation{GehaltBerechnen()}
+\begin{class}[text width=3.5cm]{Manager}{2,0}
+\inherit{Mitarbeiter}
+\operation{berechneGehalt()}
\end{class}
-\association{UNTERNEHMEN}{}{1}{ANGESTELLTER}{*}{}
-\association{UNTERNEHMEN}{}{1}{MANAGER}{*}{}
-\association{UNTERNEHMEN}{}{1}{EXTERNER}{*}{}
+\begin{class}[text width=4.5cm]{Externer}{7,0}
+\inherit{Mitarbeiter}
+\attribute{stunden: double}
+\attribute{stundenlohn: double}
+\operation{berechneGehalt()}
+\end{class}
\end{tikzpicture}
+}
-\textbf{b)} Implementiere die Klassen \texttt{ANGESTELLTER}, \texttt{EXTERNER}, sowie \texttt{MANAGER} mit geeigneten Konstruktoren, sowie der entsprechenden Methode \texttt{GehaltBerechnen}.
+\textbf{b)} Implementiere die Klassen \texttt{Externer}, sowie \texttt{Manager} mit geeigneten Konstruktoren, sowie der entsprechenden Methode \texttt{berechneGehalt}.
+Die Konstruktoren sollen zu allen Attributen Werte als Parameter übergeben bekommen und diese zuweisen.
+\iftoggle{lehrerversion}{}{
+ \newpage
+ ~\\[5cm]
+}
-\textbf{c)} Vervollständige die Methode \texttt{GehaltsKostenBerechnen} der Klasse \texttt{UNTERNEHMEN}.
+\textbf{c)} Folgender Programmcode wurde zusätzlich erstellt. Markiere die Stellen an denen das Konzept des Polymorphismus verwendet wird und erkläre kurz dessen konkrete Auswirkung in diesem Programmcode.
-\begin{minted}[baselinestretch=1.2, fontsize=\small]{java}
-class UNTERNEHMEN {
- private MITARBEITER[] mitarbeiter;
- private int anzahlMitarbeiter;
+\begin{minted}[
+ breaklines,
+ linenos,
+ xleftmargin=1.5em,
+]{java}
+class Unternehmen {
+ private Mitarbeiter[] mitarbeiter;
+ private double anzahlMitarbeiter;
- public UNTERNEHMEN() {
- mitarbeiter = new MITARBEITER[100];
+ public Unternehmen() {
+ mitarbeiter = new Mitarbeiter[100];
anzahlMitarbeiter = 0;
}
- public void MitarbeiterEinstellen(MITARBEITER neuer) {
+ public void mitarbeiterEinstellen(Mitarbeiter neuer) {
mitarbeiter[anzahlMitarbeiter] = neuer;
- anzahlMitarbeiter += 1;
+ anzahlMitarbeiter = 1;
}
-
- public int GehaltsKostenBerechnen() {
- // TODO: Vervollständige die Methode die die gesamten
- // Gehaltskosten des Unternehmen berechnet und zurück gibt
-
-
-
-
-
-
-
+ public double berechneGehaltsKosten() {
+ double gesamtGehalt;
+ for (int i = 0; i < anzahlMitarbeiter; i++) {
+ double gehalt = mitarbeiter[i].berechneGehalt();
+ System.out.printlndenen ("Name: " + mitarbeiter[i].denen gibName() + " Gehalt: " + gehalt);
+ gesamtGehalt = gesamtGehalt + gehalt;
+ }
+ return gesamtGehalt;
}
}
\end{minted}
+
+\iftoggle{lehrerversion}{}{
+ \newpage
+ ~\\[3cm]
+}
+
+\textbf{d)} Das Programm wurde mit Code für eine konkrete Firma erweitert.
+Gebe die Ausgaben des Programms in der richtigen Reihenfolge an.
+% \vspace{-1.25cm}
+
+\begin{minipage}{0.9\textwidth}
+\begin{minted}[]{java}
+Unternehmen meineFirma = new Unternehmen();
+// Angestelltin Gabi Neu mit Gehalt 2500€ und Jahresbonus 1200€
+meineFirma.mitarbeiterEinstellen(new Angestellter("Gabi Neu", 2500, 1200));
+// Managerin Vanessa Boss
+meineFirma.mitarbeiterEinstellen(new Manager("Vanessa Boss"));
+// Externen Ingo Frei mit 40 Stunden bei einem Stundenlohn von 20€
+meineFirma.mitarbeiterEinstellen(new Externer("Ingo Frei"), 40, 20);
+int gehaltsKosten = meineFirma.berechneGehaltsKosten();
+System.out.println("Gesamte Gehaltskosten: " + gehaltsKosten);
+\end{minted}
+\end{minipage}
\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) \\
+a) Angestellter Klasse mit (gehalt, jahresbonus, berechneGehalt) (1BE); Korrekte Vererbung (1BE); korrektes UML (1BE) \\
\begin{tikzpicture}
-\begin{class}[text width=7cm]{UNTERNEHMEN}{5,8}
-\attribute{mitarbeiter: MITARBEITER[]}
-\operation{MitarbeiterEinstellen(mitarbeiter)}
-\operation{GehaltsKostenBerechnen()}
+\begin{class}[text width=7cm]{Unternehmen}{5,8}
+\attribute{mitarbeiter: Mitarbeiter[]}
+\operation{mitarbeiterEinstellen(mitarbeiter)}
+\operation{berechneGehaltsKosten()}
\end{class}
-\begin{class}[text width=4cm]{MITARBEITER}{5,3}
+\begin{class}[text width=4cm]{Mitarbeiter}{5,3}
\attribute{name: String}
-\operation{NamenGeben()}
+\operation{gibName()}
\end{class}
-\begin{class}[text width=4cm]{ANGESTELLTER}{0,0}
-\inherit{MITARBEITER}
-\attribute{gehalt: int}
-\attribute{jahresbonus: int}
-\operation{GehaltBerechnen()}
+\begin{class}[text width=4cm]{Manager}{0,0}
+\inherit{Mitarbeiter}
+\operation{berechneGehalt()}
\end{class}
-\begin{class}[text width=4cm]{MANAGER}{5,0}
-\inherit{MITARBEITER}
-\operation{GehaltBerechnen()}
+\begin{class}[text width=4cm]{Externer}{5,0}
+\inherit{Mitarbeiter}
+\attribute{stunden: double}
+\attribute{stundenlohn: double}
+\operation{berechneGehalt()}
\end{class}
-\begin{class}[text width=4cm]{EXTERNER}{10,0}
-\inherit{MITARBEITER}
-\attribute{stunden: int}
-\attribute{stundenlohn: int}
-\operation{GehaltBerechnen()}
+\begin{class}[text width=4cm]{Angestellter}{10,0}
+\inherit{Mitarbeiter}
+\attribute{gehalt: double}
+\attribute{jahresbonus: double}
+\operation{berechneGehalt()}
\end{class}
-\association{UNTERNEHMEN}{}{1}{MITARBEITER}{*}{}
+\association{Unternehmen}{}{1}{Mitarbeiter}{n}{}
\end{tikzpicture}
-b) 1BE pro korrekten Konstruktor; 1BE pro korrekte GehaltBerechnen Methode
+b) 1BE pro korrekten Konstruktor; 1BE pro korrekte berechneGehalt 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;
+ public EXTERNER(String n, double s, double l) {
+ super(n);
stunden = s;
stundenlohn = l;
}
- public int GehaltBerechnen() {
+ public double GehaltBerechnen() {
return stunden * stundenlohn;
}
}
-class MANAGER extends MITARBEITER {
- public MANAGER(String n) {
- super(n); // oder name = n;
+class Manager extends Mitarbeiter {
+ public Manager(String n) {
+ super(n);
}
- public int GehaltBerechnen() {
- return 1000000;
+ public double berechneGehalt() {
+ return 10000;
}
}
\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
+c) Zeile: 2 Mitarbeiter Array mit Datentyp der Oberklasse \\
+Zeile: 18 berechneGehalt wird von der Klasse des konkreten Objekts aufgerufen
-\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}
+d) 1 BE pro korrekter Zeile; halber BE Abzug wenn korrekte Zeile an falscher Stelle
+\texttt{Name: Gabi Neu Gehalt 2600 \\
+Name: Vanessa Boss Gehalt: 10000 \\
+Name: Ingo Frei Gehalt: 800 \\
+Gesamte Gehaltskosten: 13400}
\end{Lsg}