74 lines
2 KiB
JavaScript
74 lines
2 KiB
JavaScript
/**
|
||
* 🌟 MUSTERLÖSUNG: JS 06 – KLASSEN & OBJEKTORIENTIERUNG (OOP) 🌟
|
||
* =============================================================
|
||
*/
|
||
|
||
class Bankkonto {
|
||
constructor(inhaber, startSaldo = 0) {
|
||
if (!inhaber || typeof inhaber !== "string") {
|
||
throw new Error("Inhaber muss als gültiger Text angegeben werden.");
|
||
}
|
||
if (typeof startSaldo !== "number" || startSaldo < 0 || isNaN(startSaldo)) {
|
||
throw new Error("Start-Saldo muss eine nicht-negative Zahl sein.");
|
||
}
|
||
this.inhaber = inhaber;
|
||
this._saldo = startSaldo;
|
||
}
|
||
|
||
get saldo() {
|
||
return this._saldo;
|
||
}
|
||
|
||
einzahlen(betrag) {
|
||
if (typeof betrag !== "number" || betrag <= 0 || isNaN(betrag)) {
|
||
throw new Error("Einzahlungsbetrag muss größer als 0 sein.");
|
||
}
|
||
this._saldo += betrag;
|
||
return this._saldo;
|
||
}
|
||
|
||
abheben(betrag) {
|
||
if (typeof betrag !== "number" || betrag <= 0 || isNaN(betrag)) {
|
||
throw new Error("Abhebebetrag muss größer als 0 sein.");
|
||
}
|
||
if (betrag > this._saldo) {
|
||
throw new Error("Nicht genügend Guthaben vorhanden.");
|
||
}
|
||
this._saldo -= betrag;
|
||
return this._saldo;
|
||
}
|
||
}
|
||
|
||
class Fahrzeug {
|
||
constructor(marke, modell, baujahr) {
|
||
this.marke = marke;
|
||
this.modell = modell;
|
||
this.baujahr = baujahr;
|
||
}
|
||
|
||
beschreibung() {
|
||
return `${this.marke} ${this.modell} (${this.baujahr})`;
|
||
}
|
||
}
|
||
|
||
class ElektroAuto extends Fahrzeug {
|
||
constructor(marke, modell, baujahr, batterieKapazitaet) {
|
||
super(marke, modell, baujahr);
|
||
this.batterieKapazitaet = batterieKapazitaet;
|
||
}
|
||
|
||
beschreibung() {
|
||
return `${super.beschreibung()} [Elektro: ${this.batterieKapazitaet} kWh]`;
|
||
}
|
||
|
||
reichweiteBerechnen(verbrauchPro100km) {
|
||
if (typeof verbrauchPro100km !== "number" || verbrauchPro100km <= 0 || isNaN(verbrauchPro100km)) {
|
||
throw new Error("Verbrauch pro 100 km muss größer als 0 sein.");
|
||
}
|
||
return (this.batterieKapazitaet / verbrauchPro100km) * 100;
|
||
}
|
||
|
||
static erstelleStandardTesla() {
|
||
return new ElektroAuto("Tesla", "Model 3", 2024, 75);
|
||
}
|
||
}
|