Programmieren informatik?
Hallo, ich habe die Aufgabe ein implementaionsdiagramm herzustellen. Die Klasse ist Konto und die unter Klassen davon sind Girokonto und Sparkonto. Das Sparkonto besitzt eine Begrenzung an Geld (einen Höchstbetrag) den ich abheben kann. Das Girokonto kann ich nach einem beliebigen Betrag überziehen. Wie kann ich diese Methoden nun ausdrücken?
meine Idee:
Girokonto
—
geld abheben(pAnzahl: int): void
geld einzahlen(pAnazahl: int): void
Sparkonto
—
geld abheben(pBegrenzteanzahl: int) void
geld einzahlen(pAnzahl: int): void
ich bin mir nicht ganz sicher ob ich nun „pBegrenzteanzahl“ schreiben kann da ich es zuvor noch nie so gemacht habe jedoch keine bessere Lösung nun finden konnte.
Eine Verbesserung, Meinung, Vorschläge alles ist willkommen! Ich möchte es verstehen und anwenden :)
2 Antworten
Du könntest das abheben generalisieren, indem zu immer eine abstrakte check-Methode aufrufst, die aber jedes Kontotyp selber implementieren muss:
public abstract class Konto {
// ...
public abstract boolean abhebenCheck(int euro);
public boolean geldAbheben(int euro) {
if (abhebenCheck(euro)) {
this.euro -= euro;
return true;
} else {
return false;
}
}
}
public class GiroKonto extends Konto {
// ...
@Override
public boolean abhebenCheck(int euro) {
// in späteren Versionen vielleicht tagelimits
// oder ähnliches?
return true;
}
}
public class SparKonto extends Konto {
private int limit = ...;
// ...
@Override
public boolean abhebenCheck(int euro) {
return euro < limit;
}
}
Wie wäre es mit einer Klasse "Konto" und dann einer sub-Klasse "Girokonto" und "Sparkonto".
Dann machst du jeweils eine membervariable bool für Limit, ja oder nein. Falls ja, kannst du noch eine weitere nehmen die das Limit beschreibt.
Und für das abheben überprüfst du einfach erstmal nach einem Limit, und dann ob das Limit bereits überschritten whrde oder so.
Das dachte ich mir auch, nur die Frage ist ja schon etwas "simpler" gestellt, ich weiß nicht ob der Fragesteller etwas mit Abstrakten Methoden bzw. Interfaces anfangen kann.
Eine mehr oo Herangehensweise wäre es, eine abstrakte Methode `boolean abhebenCheck` in der Superklasse zu definieren, die beim Abheben immer aufgerufen wird. In der Implementierung kann man dann entweder immer `true` zurückgeben, oder anderweitige checks durchführen und im anderen Fall ein Limit checken, dass dann aber nur in der Subklasse existieren muss. Das nimmt das ungenutzte Feld `limit` weg in Fällen, wenn `limitExistiert = false`.