Wenn Name und Kilometerstand in getrennten Variablen stehen, kann ihre Zuordnung unklar werden. Eine Klasse beschreibt einen eigenen Datentyp mit benannten Feldern. Ein Objekt ist ein konkreter Wert dieses Typs. Ein Konstruktor legt fest, wie ein Objekt erzeugt wird. Für zwei Fahrzeuge erzeugen wir zwei getrennte Objekte.
01Ein Modell definieren
Vehicle hat die Felder name und mileage. final verhindert, dass ihre Werte nach dem Erzeugen ausgetauscht werden. Das Modell enthält keine Bildschirm- oder Datenbankdetails.
class Vehicle {
const Vehicle({required this.name, required this.mileage});
final String name;
final int mileage;
Vehicle withMileage(int value) {
return Vehicle(name: name, mileage: value);
}
}
void main() {
final car = Vehicle(name: 'Family car', mileage: 64820);
final updated = car.withMileage(64920);
print('${updated.name}: ${updated.mileage}');
print(car.mileage);
}
Starten / prüfen
dart run models.dart02Objekte erzeugen
required this.name ist eine Kurzform für einen benannten Parameter, der direkt das gleichnamige Feld füllt. Der Aufruf Vehicle(name: ..., mileage: ...) erzeugt ein Objekt. car.name liest anschließend dessen Name.
03Änderungen bewusst modellieren
withMileage erzeugt ein neues Vehicle. Das alte Objekt bleibt unverändert. Ein solcher Stil vereinfacht nachvollziehbare Zustandswechsel. Die echte App ergänzt IDs, Zeitstempel und weitere Felder. Dieses Beispiel zeigt nur den Grundgedanken.
Ausgabe: Family car: 64920. Danach bleibt das alte Objekt bei 64820.
Deine Übung
Ergänze ein optionales Feld plate und erhalte es auch in withMileage.
Lösung mit Erklärung anzeigen
Deklariere final String? plate, ergänze this.plate im Konstruktor und übergebe plate: plate beim Erzeugen des neuen Vehicle. Das Fragezeichen erlaubt ein fehlendes Kennzeichen.
Projektbezug und Quellen
Das Beispiel ist zum Lernen vereinfacht. Die verlinkte Codeversion zeigt die Anwendung im Projekt und die dortigen Prüfungen.