Costruttore predefinito
Fa parte della sezione Programmazione orientata agli oggetti del percorso Dart di Coddy. Lezione 10 di 110.
Quando non definisci alcun costruttore in una classe, Dart fornisce automaticamente un costruttore predefinito. È un costruttore senza parametri che crea semplicemente un'istanza della classe.
class Book {
String title = 'Unknown';
int pages = 0;
}
// Dart fornisce un costruttore predefinito: Book()
Book myBook = Book();
print(myBook.title); // UnknownIl costruttore predefinito è invisibile nel tuo codice, ma esiste. Non accetta argomenti e inizializza l'oggetto con i valori predefiniti che hai assegnato alle variabili di istanza.
Una volta definito un costruttore personalizzato, il costruttore predefinito non viene più fornito automaticamente. Se vuoi comunque un costruttore senza argomenti insieme a uno parametrizzato, devi crearlo esplicitamente:
class Book {
String title;
int pages;
// Costruttore predefinito esplicito
Book() : title = 'Unknown', pages = 0;
// Costruttore parametrizzato
Book.withDetails(this.title, this.pages);
}
Book book1 = Book(); // Usa quello predefinito
Book book2 = Book.withDetails('Dart', 300); // Usa quello parametrizzatoIl costruttore predefinito esplicito usa una lista di inizializzazione (la parte dopo i due punti) per impostare i valori iniziali. Questo schema è utile quando vuoi offrire più modi per creare oggetti dalla stessa classe.
Sfida
FacileCostruiamo un semplice sistema di inventario dei prodotti che dimostri sia i costruttori predefiniti impliciti sia quelli espliciti.
Creerai due file per organizzare il codice:
product.dart: definisci una classeProductche offre due modi per creare prodotti:- Un costruttore predefinito esplicito
Product()che inizializzanamecon'Unnamed'epricecon0.0usando una lista di inizializzazione - Un costruttore nominato
Product.withDetailsche accetta i parametrinameeprice - Un metodo
display()che stampa:Product: [name] - $[price]
- Un costruttore predefinito esplicito
main.dart: importa la classe del prodotto e crea due prodotti:- Uno usando il costruttore predefinito
- Uno usando il costruttore nominato con
'Laptop'e999.99
display()su ciascun prodotto.
La classe Product dovrebbe avere due variabili di istanza:
String namedouble price
Formato dell'output previsto:
Product: Unnamed - $0.0
Product: Laptop - $999.99Provalo tu
import 'product.dart';
void main() {
// TODO: Crea un prodotto usando il costruttore predefinito
// TODO: Crea un prodotto usando il costruttore con nome con 'Laptop' e 999.99
// TODO: Chiama display() su ciascun prodotto
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Programmazione orientata agli oggetti
1Fondamenti della programmazione orientata agli oggetti
File esterniLibrerie e importazioniIntroduzione alla programmazione orientata agli oggettiClassi e oggettiLa parola chiave thisMetodiVariabili di istanzaFondamenti dei costruttoriRiepilogo - Calcolatrice semplice4Sicurezza dei valori null
Introduzione alla sicurezza dei valori nullNullable e non nullableGli operatori ? e !La keyword late e la sicurezza dei valori nullOperatori null-awareSicurezza dei valori null nelle classiRiepilogo - Sistema di profili utente7Classi astratte e interfacce
Classi astratteMetodi astrattiInterfacce in DartInterfacce impliciteImplementare vs estendereInterfacce multipleRiepilogo - Calcolatore di forme10Collezioni e generici
Panoramica di List, Set e MapCollezioni sicure rispetto ai tipiClassi genericheMetodi genericiVincoli sui genericiIterable e IteratorRiepilogo - Archiviazione generica13Concetti avanzati di OOP
Composizione vs ereditarietàMetodi di estensioneClassi chiamabiliClassi sealed (Dart 3)Record (Dart 3)Pattern e matching (3.0)Enum con metodi16Progetto: Gestione della biblioteca
Panoramica del progettoClassi Libro e Utente2I costruttori in Dart
Costruttore predefinitoCostruttori con nomeListe di inizializzazioneCostruttori costantiCostruttori factoryCostruttori di reindirizzamentoRiepilogo - Crea forme5Incapsulamento
Membri pubblici e privatiConvenzione del prefisso _Visibilità a livello di libreriaApprofondimento su getter e setterNascondimento delle informazioniRiepilogo - Registri degli studenti8Mixin
Introduzione ai MixinCreare MixinUsare più MixinParola chiave on nei MixinMixin vs ereditarietàMixin vs interfacciaRiepilogo - Sistema animale11Metodi speciali
Sovrascrittura di toString()Sovrascrittura di hashCode e ==Interfaccia ComparableMetodo call()Sovrascrittura di noSuchMethodRiepilogo - Collezione personalizzata14Modelli di progettazione Parte 1
Introduzione ai modelli di progettazioneSingletonFactoryObserverStrategy3Proprietà delle classi
Membri di istanza e staticiCampi final e constVariabili lateMetodi e campi staticiGetter e setterRiepilogo - Gestore di conti bancari6Ereditarietà
Ereditarietà di baseLa parola chiave superOverride dei metodiL’annotazione @overrideLa parola chiave final per le classiCostruttori ed ereditarietàRiepilogo - Gerarchia dei dipendenti9Polimorfismo
Fondamenti di polimorfismoPolimorfismo tramite interfacceControllo del tipo a runtimeGli operatori is e asParola chiave covariantRiepilogo - Elaboratore di pagamenti12OOP asincrona
Future e async/awaitNozioni di base sugli streamController degli streamCostruttori asincroniAsync nei metodi di classeRiepilogo - Recupero dei dati15Pattern di progettazione Parte 2
Pattern CommandPattern AdapterPattern DecoratorPattern Template MethodPattern StatePattern CompositePattern RepositoryEsercitati da solo: Compilatore Dart online