Zusammenfassung – Benutzerprofil-System
Teil des Abschnitts Objektorientierte Programmierung der Dart-Journey von Coddy — Lektion 29 von 110.
Aufgabe
EinfachLassen Sie uns ein vollständiges Benutzerprofilsystem erstellen, das alle Null-Safety-Konzepte zusammenführt, die Sie in diesem Kapitel gelernt haben. Sie werden ein System erstellen, das Benutzerkonten mit einer Mischung aus erforderlichen Informationen und optionalen Details verwaltet.
Sie werden Ihren Code in zwei Dateien organisieren:
user_profile.dart: Definieren Sie eine KlasseUserProfile, die ein Benutzerkonto repräsentiert. Überlegen Sie, welche Informationen wesentlich sind (wie ein Benutzername) und welche optional sind (wie eine Biografie oder Telefonnummer). Ihre Klasse sollte Folgendes enthalten:- Einen nicht-nullbaren
String username- jeder Benutzer muss einen Benutzernamen haben - Einen nicht-nullbaren
String email- jeder Benutzer muss eine E-Mail haben - Einen nullbaren
String? displayName- Benutzer möchten vielleicht einen anderen Namen anzeigen - Einen nullbaren
String? bio- nicht jeder schreibt eine Biografie - Einen nullbaren
int? age- das Alter ist eine optionale persönliche Information - Einen Konstruktor mit benannten Parametern und
requiredfürusernameundemail - Eine Methode
getDisplayIdentity(), die den Anzeigenamen zurückgibt, falls gesetzt, andernfalls den Benutzernamen unter Verwendung von??zurückgibt - Eine Methode
getBioPreview(), die die ersten 20 Zeichen der Biografie gefolgt von...zurückgibt, wenn die Biografie existiert und länger als 20 Zeichen ist, die vollständige Biografie, wenn sie 20 Zeichen oder weniger lang ist, odernull, wenn keine Biografie existiert (verwenden Sie?.für den sicheren Zugriff) - Eine Methode
setDefaultBio(), die die Biografie nur dann auf'Hello, I am new here!'setzt, wenn sie aktuell null ist, unter Verwendung von??= - Eine Methode
printProfile(), die das vollständige Profil des Benutzers anzeigt
- Einen nicht-nullbaren
main.dart: Importieren Sie Ihre Benutzerprofil-Klasse und erstellen Sie mehrere Benutzer, um die gesamte Bandbreite der Null-Safety-Funktionen zu demonstrieren:- Erstellen Sie einen Benutzer mit dem Benutzernamen
'alice_dev'und der E-Mail'alice@code.com', setzen Sie dann den Anzeigenamen auf'Alice', die Biografie auf'Software developer passionate about clean code and testing'und das Alter auf28 - Erstellen Sie einen Benutzer mit dem Benutzernamen
'bob_builder'und der E-Mail'bob@build.io', setzen Sie dann nur den Anzeigenamen auf'Bob' - Erstellen Sie einen Benutzer mit dem Benutzernamen
'charlie99'und der E-Mail'charlie@mail.net'(lassen Sie alle optionalen Felder auf null) - Rufen Sie
setDefaultBio()für alle drei Benutzer auf - Rufen Sie für jeden Benutzer nacheinander
printProfile()auf, geben Sie dannIdentity: [getDisplayIdentity()]aus und anschließendBio preview: [getBioPreview()]
- Erstellen Sie einen Benutzer mit dem Benutzernamen
Die Methode printProfile() sollte in diesem Format drucken:
===== User Profile =====
Username: [username]
Email: [email]
Display Name: [displayName or "Not set"]
Bio: [bio or "No bio"]
Age: [age or "Not specified"]Beachten Sie, wie Alices Biografie nach setDefaultBio() unverändert bleibt, da sie bereits einen Wert hat, während Charlie die Standardbiografie zugewiesen bekommt. Beobachten Sie auch, wie die Biografie-Vorschau Alices längere Biografie kürzt, aber Charlies kürzere Standardbiografie vollständig anzeigt.
Erwartete Ausgabe:
===== User Profile =====
Username: alice_dev
Email: alice@code.com
Display Name: Alice
Bio: Software developer passionate about clean code and testing
Age: 28
Identity: Alice
Bio preview: Software developer p...
===== User Profile =====
Username: bob_builder
Email: bob@build.io
Display Name: Bob
Bio: Hello, I am new here!
Age: Not specified
Identity: Bob
Bio preview: Hello, I am new here!
===== User Profile =====
Username: charlie99
Email: charlie@mail.net
Display Name: Not set
Bio: Hello, I am new here!
Age: Not specified
Identity: charlie99
Bio preview: Hello, I am new here!Probier es selbst
import 'user_profile.dart';
void main() {
// TODO: Erstelle den Benutzer 'alice_dev' mit der E-Mail 'alice@code.com'
// Setze displayName auf 'Alice'
// Setze bio auf 'Software developer passionate about clean code and testing'
// Setze age auf 28
// TODO: Erstelle den Benutzer 'bob_builder' mit der E-Mail 'bob@build.io'
// Setze nur displayName auf 'Bob'
// TODO: Erstelle den Benutzer 'charlie99' mit der E-Mail 'charlie@mail.net'
// Lasse alle optionalen Felder auf null
// TODO: Rufe setDefaultBio() für alle drei Benutzer auf
// TODO: Für jeden Benutzer in der Reihenfolge (alice, bob, charlie):
// 1. Rufe printProfile() auf
// 2. Drucke "Identity: [getDisplayIdentity()]"
// 3. Drucke "Bio preview: [getBioPreview()]"
}
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienBibliotheken & ImportsEinführung in die OOPKlassen vs. ObjekteDas this-SchlüsselwortMethodenInstanzvariablenKonstruktor-GrundlagenWiederholung – Einfacher Taschenrechner4Null-Sicherheit
Einführung in Null-SicherheitNullable vs. Non-NullableDie ? und ! OperatorenLate-Schlüsselwort & Null-SicherheitNull-aware OperatorenNull-Sicherheit in KlassenZusammenfassung – Benutzerprofil-System7Abstrakte Klassen & Interfaces
Abstrakte KlassenAbstrakte MethodenInterfaces in DartImplizite InterfacesImplementieren vs. ErweiternMehrfache InterfacesRückblick – Shape Calculator10Collections & Generics
Überblick über List, Set und MapTypsichere CollectionsGenerische KlassenGenerische MethodenGenerische ConstraintsIterable & IteratorZusammenfassung – Generische Speicherung13Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungExtension MethodsCallable ClassesSealed Classes (Dart 3)Records (Dart 3)Patterns & Matching (3.0)Enums mit Methoden16Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen2Konstruktoren in Dart
Standard-KonstruktorBenannte KonstruktorenInitialisierungslistenKonstante KonstruktorenFactory-KonstruktorenWeiterleitende KonstruktorenZusammenfassung – Shape Builder5Kapselung
Öffentliche vs. private MemberDie _ Präfix-KonventionSichtbarkeit auf Library-EbeneGetter & Setter im DetailInformation HidingRückblick – Schülerdatensätze8Mixins
Einführung in MixinsMixins erstellenMehrere Mixins verwendenDas on-Schlüsselwort in MixinsMixin vs. VererbungMixin vs. InterfaceZusammenfassung - Tiersystem11Spezielle Methoden
toString() überschreibenhashCode & == überschreibenComparable-Interfacecall()-MethodenoSuchMethod überschreibenZusammenfassung – Eigene Collection14Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterObserver-MusterStrategy-Muster3Klasseneigenschaften
Instanz- vs. statische MemberFinal & Const FelderLate-VariablenStatische Methoden & FelderGetter und SetterZusammenfassung – Bankkonto-Manager6Vererbung
Grundlagen der VererbungDas super-SchlüsselwortMethoden überschreibenDie @override-AnnotationDas final-Klassen-SchlüsselwortKonstruktoren & VererbungRückblick – Mitarbeiter-Hierarchie9Polymorphismus
Polymorphismus-GrundlagenPolymorphismus über InterfacesTypprüfung zur LaufzeitDie is & as OperatorenDas covariant SchlüsselwortZusammenfassung – Payment Processor