Riepilogo - Archiviazione generica
Fa parte della sezione Programmazione orientata agli oggetti del percorso Dart di Coddy. Lezione 69 di 110.
Sfida
FacileCostruiamo un sistema di archiviazione generico che combina tutto ciò che hai imparato sulle collezioni e sui tipi generici! Creerai una classe Storage<T> in grado di archiviare elementi di qualsiasi tipo, recuperarli e iterarli usando un ciclo for-in.
Organizzerai il codice in due file:
storage.dart: crea il tuo sistema di archiviazione generico con due classi:- Una classe
StorageIterator<T>che implementaIterator<T>per consentire l'iterazione sugli elementi archiviati - Una classe
Storage<T>che estendeIterable<T>con le seguenti funzionalità:- Una lista privata per contenere gli elementi internamente
- Un metodo
add(T item)per archiviare un nuovo elemento - Un metodo
getAt(int index)che restituisce l'elemento all'indice specificato - Un getter
countche restituisce il numero di elementi archiviati - Un getter
iteratorche restituisce unoStorageIteratorper gli elementi archiviati
- Una classe
main.dart: importa il file di archiviazione e mostra il sistema di archiviazione generico con tipi diversi:- Crea uno
Storage<String>e aggiungi tre nomi di città:'Paris','Tokyo','Sydney' - Stampa il numero di elementi
- Stampa l'elemento all'indice 1
- Usa un ciclo
for-inper stampare ogni città su una riga separata - Stampa una riga vuota
- Crea uno
Storage<int>e aggiungi quattro numeri:100,200,300,400 - Usa il metodo
whereper filtrare i valori maggiori di 150, poi stampa la lista risultante
- Crea uno
Il tuo sistema di archiviazione dovrebbe funzionare senza problemi con qualsiasi tipo, mantenendo la sicurezza dei tipi. Poiché estende Iterable, ottiene automaticamente l'accesso a metodi potenti come where, map e fold!
Output previsto:
Count: 3
Item at 1: Tokyo
Paris
Tokyo
Sydney
[200, 300, 400]Provalo tu
import 'storage.dart';
void main() {
// TODO: Crea uno Storage<String> per le città
// Aggiungi tre città: 'Paris', 'Tokyo', 'Sydney'
// TODO: Stampa il numero di elementi (formato: "Count: X")
// TODO: Stampa l'elemento all'indice 1 (formato: "Item at 1: X")
// TODO: Usa un ciclo for-in per stampare ogni città su una riga separata
// TODO: Stampa una riga vuota
print('');
// TODO: Crea uno Storage<int> per i numeri
// Aggiungi quattro numeri: 100, 200, 300, 400
// TODO: Usa il metodo where per filtrare i valori maggiori di 150
// Quindi stampa la lista risultante usando toList()
}
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