Benannte Konstruktoren
Teil des Abschnitts Objektorientierte Programmierung der Dart-Journey von Coddy. Lektion 11 von 110.
Benannte Konstruktoren ermöglichen es Ihnen, mehrere Konstruktoren für eine Klasse zu erstellen, jeder mit einem beschreibenden Namen, der seinen Zweck verdeutlicht. Dies ist besonders nützlich, wenn Sie verschiedene Möglichkeiten benötigen, um ein Objekt zu initialisieren.
Die Syntax verwendet den Klassennamen, gefolgt von einem Punkt und dem Konstruktornamen:
class Point {
int x;
int y;
// Regulärer Konstruktor
Point(this.x, this.y);
// Benannter Konstruktor für den Ursprungspunkt
Point.origin() : x = 0, y = 0;
// Benannter Konstruktor aus einem einzelnen Wert
Point.diagonal(int value) : x = value, y = value;
}Jeder benannte Konstruktor bietet eine klare, lesbare Möglichkeit, Objekte zu erstellen:
Point p1 = Point(3, 5);
Point p2 = Point.origin();
Point p3 = Point.diagonal(10);
print('p1: (${p1.x}, ${p1.y})'); // p1: (3, 5)
print('p2: (${p2.x}, ${p2.y})'); // p2: (0, 0)
print('p3: (${p3.x}, ${p3.y})'); // p3: (10, 10)Benannte Konstruktoren machen Ihren Code ausdrucksstärker. Anstatt zu raten, was Point(0, 0) bedeutet, kommuniziert Point.origin() sofort die Absicht. Dieses Muster ist in Dart-Bibliotheken weit verbreitet und hilft dabei, selbstdokumentierenden Code zu erstellen.
Aufgabe
EinfachLass uns einen Temperaturkonverter erstellen, der die Leistungsfähigkeit benannter Konstruktoren veranschaulicht. Du erstellst eine Temperature-Klasse, die je nach Ausgangseinheit auf unterschiedliche Weise initialisiert werden kann.
Du organisierst deinen Code in zwei Dateien:
temperature.dart: Definiere eineTemperature-Klasse mit einerdouble celsius-Instanzvariable. Deine Klasse sollte drei Möglichkeiten bieten, eine Temperatur zu erstellen:- Einen regulären Konstruktor
Temperature(this.celsius), der direkt einen Celsius-Wert übernimmt - Einen benannten Konstruktor
Temperature.fromFahrenheit, der einen Fahrenheit-Wert übernimmt und ihn mithilfe der Formel(fahrenheit - 32) * 5 / 9in Celsius umrechnet - Einen benannten Konstruktor
Temperature.freezing(), der eine Temperatur am Gefrierpunkt (0 Grad Celsius) erstellt
display()-Methode hinzu, die Folgendes ausgibt:[celsius]C- Einen regulären Konstruktor
main.dart: Importiere deine Temperaturklasse und erstelle drei Temperaturobjekte:- Eines mit dem regulären Konstruktor und
25.0 - Eines mit
fromFahrenheitund98.6 - Eines mit
freezing()
display()für jede Temperatur in der oben aufgeführten Reihenfolge auf.- Eines mit dem regulären Konstruktor und
Erwartetes Ausgabeformat:
25.0C
37.0C
0.0CProbier es selbst
import 'temperature.dart';
void main() {
// TODO: Erstelle eine Temperature mit dem regulären Konstruktor mit 25.0
// TODO: Erstelle eine Temperature mit fromFahrenheit mit 98.6
// TODO: Erstelle eine Temperature mit freezing()
// TODO: Rufe display() für jede Temperatur in der richtigen Reihenfolge auf
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienBibliotheken & ImportsEinführung in die OOPKlassen vs. ObjekteDas Schlüsselwort thisMethodenInstanzvariablenGrundlagen von KonstruktorenRückblick – Einfacher Taschenrechner4Null-Sicherheit
Einführung in die Null-SicherheitNullable vs. Non-NullableDie Operatoren ? und !Late-Schlüsselwort und Null-SicherheitNull-bewusste OperatorenNull-Sicherheit in KlassenRückblick – Benutzers профilsystem7Abstrakte Klassen & Interfaces
Abstrakte KlassenAbstrakte MethodenInterfaces in DartImplizite InterfacesImplementieren vs. ErweiternMehrere InterfacesZusammenfassung – Formrechner10Collections & Generics
Übersicht über List, Set und MapTypsichere CollectionsGenerische KlassenGenerische MethodenGenerische EinschränkungenIterable & IteratorRückblick – Generischer Speicher13Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungErweiterungsmethodenAufrufbare KlassenVersiegelte Klassen (Dart 3)Records (Dart 3)Muster & Matching (3.0)Enums mit Methoden16Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen2Konstruktoren in Dart
StandardkonstruktorBenannte KonstruktorenInitialisierungslistenKonstantenkonstruktorenFactory-KonstruktorenWeiterleitende KonstruktorenRückblick – Shape Builder5Kapselung
Öffentliche vs. private MemberDie _-Präfix-KonventionBibliotheksweite SichtbarkeitTiefergehende Getter & SetterInformationsverbergungRückblick – Studierendendaten8Mixins
Einführung in MixinsMixins erstellenMehrere Mixins verwendenDas Schlüsselwort „on“ in MixinsMixin vs. VererbungMixin vs. SchnittstelleRückblick – Tiersystem11Spezielle Methoden
toString()-ÜberschreibunghashCode- & ==-ÜberschreibungComparable-Schnittstellecall()-MethodenoSuchMethod-ÜberschreibungWiederholung – Benutzerdefinierte Collection14Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFabrikmusterBeobachtermusterStrategiemuster17Abschließende Herausforderungen
E-Learning-PlattformBankingsystemSpielcharaktersystemFahrzeugvermietung3Klassen-Eigenschaften
Instanz- vs. statische MemberFinal- und Const-FelderLate-VariablenStatische Methoden und FelderGetter und SetterRückblick – Bankkontoverwaltung6Vererbung
Grundlegende VererbungDas Schlüsselwort superMethodenüberschreibungDie Annotation @overrideDas Schlüsselwort final für KlassenKonstruktoren und VererbungZusammenfassung – Mitarbeiterhierarchie9Polymorphismus
Grundlagen des PolymorphismusPolymorphismus über InterfacesLaufzeit-TypüberprüfungDie Operatoren is & asCovariant-SchlüsselwortZusammenfassung – ZahlungsprozessorÜbe selbstständig: Online-Dart-Compiler