--- author: Florian Fischer aspectratio: 169 --- ## Vererbung - Problem \begin{tikzpicture} \begin{class}[text width=4cm]{Sparkonto}{0,0} \attribute{kontostand} \attribute{kontonummer} \attribute{zinssatz} \operation{Einzahlen(betrag)} \operation{Abheben(betrag)} \operation{KontostandGeben()} \operation{Verzinsen()} \end{class} \begin{class}[text width=4cm]{Girokonto}{5,0} \attribute{kontostand} \attribute{kontonummer} \operation{Einzahlen(betrag)} \operation{Abheben(betrag)} \operation{KontostandGeben()} \end{class} \begin{class}[text width=4cm]{Firmenkonto}{10,0} \attribute{kontostand} \attribute{kontonummer} \attribute{dispokredit} \operation{Einzahlen(betrag)} \operation{Abheben(betrag)} \operation{KontostandGeben()} \operation{DispokreditSetzen(wert)} \end{class} \end{tikzpicture} \pause Mögliche Probleme dieser Modellierung? ## Vererbung - Generalisierung \resizebox{!}{0.5\textheight}{ \begin{tikzpicture} \begin{class}[text width=4cm]{Sparkonto}{0,0} \attribute{kontostand} \attribute{kontonummer} \attribute{zinssatz} \operation{Einzahlen(betrag)} \operation{Abheben(betrag)} \operation{KontostandGeben()} \operation{Verzinsen()} \end{class} \begin{class}[text width=4cm]{Girokonto}{5,0} \attribute{kontostand} \attribute{kontonummer} \operation{Einzahlen(betrag)} \operation{Abheben(betrag)} \operation{KontostandGeben()} \end{class} \begin{class}[text width=4cm]{Firmenkonto}{10,0} \attribute{kontostand} \attribute{kontonummer} \attribute{dispokredit} \operation{Einzahlen(betrag)} \operation{Abheben(betrag)} \operation{KontostandGeben()} \operation{DispokreditSetzen(wert)} \end{class} \end{tikzpicture} } **Idee**: Auslagern der gemeinsamen Attribute und Methoden in eine Oberklasse **Arbeitsauftrag 3min**: Zeichne ein Klassendiagramm mit einer gemeinsamen Oberklasse ## Generalisierung - KONTO \begin{tikzpicture} \node[rotate=30,scale=3] at (0, 3) {\Huge \color{red} \textbf{!}}; \begin{class}[text width=4cm]{KONTO}{5,4} \attribute{kontostand} \attribute{kontonummer} \operation{Einzahlen(betrag)} \operation{Abheben(betrag)} \operation{KontostandGeben()} \end{class} \begin{class}[text width=4cm]{SPARKONTO}{0,0} \inherit{KONTO} \attribute{zinssatz} \operation{Verzinsen()} \end{class} \begin{class}[text width=4cm]{GIROKONTO}{5,0} \inherit{KONTO} \end{class} \begin{class}[text width=4cm]{FIRMENKONTO}{10,0} \inherit{KONTO} \attribute{dispokredit} \operation{DispokreditSetzen(wert)} \end{class} \end{tikzpicture} ## Generalisierung - Java \small ::: columns :::: {.column width=50%} ```java class Konto { private int kontostand; private int kontonummer; public void Konto(int kNr) { kontostand = 0; kontonummer = kNr; } public void Einzahlen(int betrag) { ... } ``` :::: :::: {.column width=50%} ```java // Klassendefinition ? private double zinssatz; public void Sparkonto(int kNr, double zs) { // KONTO Initialisierung? zinssatz = zs; } public void Verzinsen() { ... } ``` :::: ::: ## Generalisierung - Java \small ::: columns :::: {.column width=50%} ```java class Konto { private int kontostand; private int kontonummer; public void Konto(int kNr) { kontostand = 0; kontonummer = kNr; } public void Einzahlen(int betrag) { ... } ``` :::: :::: {.column width=50%} ```{.java highlightlines=\{1\}} class Sparkonto extends Konto { private double zinssatz; public void Sparkonto(int kNr, double zs) { super(kNr); zinssatz = zs; } public void Verzinsen() { ... } ``` :::: ::: ## Generalisierung - Java \small ::: columns :::: {.column width=50%} ```java class Konto { private int kontostand; private int kontonummer; public void Konto(int kNr) { kontostand = 0; kontonummer = kNr; } public void Einzahlen(int betrag) { ... } ``` :::: :::: {.column width=50%} ```{.java highlightlines=\{1,6\}} class Sparkonto extends KONTO { private double zinssatz; public void Sparkonto(int kNr, double zs) { super(kNr); zinssatz = zs; } public void Verzinsen() { ... } ``` :::: :::