Aufgaben-Python/courses/javascript/06_klassen_und_oop/aufgabe.js

98 lines
3.3 KiB
JavaScript

/**
* 🌐 JS 06: KLASSEN & OBJEKTORIENTIERUNG (OOP) 🌐
* ==================================================
* Moderne ES6-Klassen, Konstruktoren, Getter/Setter,
* Vererbung mit extends/super und statische Methoden.
*/
// 🎯 TEILZIEL 1 (TODO 1): Klasse Bankkonto
// Erstelle eine Klasse Bankkonto mit Kapselung:
// - constructor(inhaber, startSaldo = 0):
// - Weist this.inhaber zu
// - Weist this._saldo das startSaldo zu (Default: 0)
// - Getter get saldo(): Gibt this._saldo zurück
// - Methode einzahlen(betrag):
// - Wirft einen Fehler (throw new Error("...")), wenn betrag <= 0
// - Erhöht this._saldo um betrag und gibt den neuen Saldo zurück
// - Methode abheben(betrag):
// - Wirft einen Fehler, wenn betrag <= 0
// - Wirft einen Fehler, wenn betrag > this._saldo ("Nicht genügend Guthaben")
// - Verringert this._saldo um betrag und gibt den neuen Saldo zurück
class Bankkonto {
constructor(inhaber, startSaldo = 0) {
// TODO: Initialisiere inhaber und _saldo
this.inhaber = inhaber;
this._saldo = 0;
}
get saldo() {
// TODO: Getter für _saldo implementieren
return 0;
}
einzahlen(betrag) {
// TODO: Validierung und Erhöhung von _saldo
return 0;
}
abheben(betrag) {
// TODO: Validierung, Guthabenprüfung und Reduzierung von _saldo
return 0;
}
}
// 🎯 TEILZIEL 2 (TODO 2): Basisklasse Fahrzeug
// Erstelle eine Basisklasse Fahrzeug:
// - constructor(marke, modell, baujahr):
// - Weist this.marke, this.modell und this.baujahr zu
// - Methode beschreibung():
// - Gibt einen String im Format "${marke} ${modell} (${baujahr})" zurück
class Fahrzeug {
constructor(marke, modell, baujahr) {
// TODO: Eigenschaften initialisieren
this.marke = marke;
this.modell = modell;
this.baujahr = baujahr;
}
beschreibung() {
// TODO: String-Repräsentation zurückgeben
return "";
}
}
// 🎯 TEILZIEL 3 (TODO 3): Kindklasse ElektroAuto extends Fahrzeug
// Erstelle eine Kindklasse ElektroAuto, die von Fahrzeug erbt:
// - constructor(marke, modell, baujahr, batterieKapazitaet):
// - Ruft super(marke, modell, baujahr) auf
// - Weist this.batterieKapazitaet (in kWh) zu
// - Methode reichweiteBerechnen(verbrauchPro100km):
// - Wirft einen Fehler, wenn verbrauchPro100km <= 0
// - Berechnet die Reichweite in km: (batterieKapazitaet / verbrauchPro100km) * 100
// - Überschreibe beschreibung():
// - Gibt "${super.beschreibung()} [Elektro: ${batterieKapazitaet} kWh]" zurück
// 🎯 TEILZIEL 4 (TODO 4): Statische Fabrikmethode ElektroAuto.erstelleStandardTesla()
// - static erstelleStandardTesla():
// - Gibt eine neue Instanz von ElektroAuto mit ("Tesla", "Model 3", 2024, 75) zurück
class ElektroAuto extends Fahrzeug {
constructor(marke, modell, baujahr, batterieKapazitaet) {
// TODO: super(...) aufrufen und batterieKapazitaet initialisieren
super(marke, modell, baujahr);
this.batterieKapazitaet = 0;
}
beschreibung() {
// TODO: super.beschreibung() nutzen und um Batterie erweitern
return "";
}
reichweiteBerechnen(verbrauchPro100km) {
// TODO: Reichweite anhand von batterieKapazitaet und Verbrauch berechnen
return 0;
}
static erstelleStandardTesla() {
// TODO: Neues ElektroAuto-Objekt mit Standard-Parametern erzeugen und zurückgeben
return null;
}
}