Piattaforma di e-learning
Fa parte della sezione Programmazione orientata agli oggetti del percorso Dart di Coddy. Lezione 107 di 110.
Sfida
FacileCostruiamo una piattaforma di e-learning che riunisca tutti i concetti di OOP che hai imparato durante questo corso. Creerai un sistema che gestisce utenti, corsi e iscrizioni usando classi astratte, ereditarietà, mixin e incapsulamento.
La tua piattaforma sarà organizzata in cinque file:
user.dart: crea una classe astrattaUsercon campi privati per_id(String) e_name(String), con getter pubblici. Includi un metodo astrattoString getRole()che le sottoclassi dovranno implementare. SovrascrivitoString()in modo che restituisca[role] name (id), dove role deriva dagetRole().student.dart: crea una classeStudentche estendeUser. Gli studenti dovranno usare un mixinProgressTracking(definito in questo file) che fornisce un intero privato_completedLessons(inizializzato a 0) con un getter e i metodicompleteLesson()per incrementarlo egetProgressReport()che restituisceCompleted X lessons. La classeStudentdovrà implementaregetRole()in modo che restituiscaStudent.instructor.dart: crea una classeInstructorche estendeUser. Gli istruttori hanno una lista privata_coursesCreated(una lista di String che rappresentano i titoli dei corsi). Includi un metodocreateCourse(String title)che aggiunge il titolo alla lista e lo restituisce. ImplementagetRole()in modo che restituiscaInstructor. Aggiungi un gettercourseCountche restituisce il numero di corsi creati.enrollment.dart: crea una classeEnrollmentche tiene traccia dell'iscrizione di uno studente a un corso. Dovrebbe averestudentId(String),courseName(String) e un booleano privato_isCompleted(il cui valore predefinito è false) con un getter. Includi un metodomarkComplete()che imposta il completamento su true. SovrascrivitoString()in modo che restituiscastudentId enrolled in "courseName" - Status: CompletedoppureStatus: In Progressin base allo stato di completamento.main.dart: metti insieme tutti gli elementi. Crea un istruttore (I001,Dr. Smith) e fagli creare due corsi:Dart FundamentalseAdvanced OOP. Stampa l'istruttore e il numero dei suoi corsi comeCourses created: X. Crea uno studente (S001,Alice), stampalo, poi fagli completare 3 lezioni e stampa il suo report dei progressi. Crea un'iscrizione per Alice al corsoDart Fundamentals, stampala, segna il completamento e stampala di nuovo.
Output previsto:
[Instructor] Dr. Smith (I001)
Courses created: 2
[Student] Alice (S001)
Completed 3 lessons
S001 enrolled in "Dart Fundamentals" - Status: In Progress
S001 enrolled in "Dart Fundamentals" - Status: CompletedProvalo tu
import 'user.dart';
import 'student.dart';
import 'instructor.dart';
import 'enrollment.dart';
void main() {
// TODO: Crea un insegnante con id "I001" e name "Dr. Smith"
// TODO: Fai creare all'insegnante due corsi: "Dart Fundamentals" e "Advanced OOP"
// TODO: Stampa l'insegnante (usa toString())
// TODO: Stampa "Courses created: X", dove X è courseCount
// TODO: Crea uno studente con id "S001" e name "Alice"
// TODO: Stampa lo studente
// TODO: Fai completare allo studente 3 lezioni (chiama completeLesson() 3 volte)
// TODO: Stampa il resoconto dei progressi dello studente
// TODO: Crea un'iscrizione per Alice (S001) in "Dart Fundamentals"
// TODO: Stampa l'iscrizione
// TODO: Segna l'iscrizione come completata
// TODO: Stampa di nuovo l'iscrizione
}
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 progettazioneSingletonFactoryObserverStrategy17Sfide finali
Piattaforma di e-learningSistema bancarioSistema di personaggi di giocoServizio di noleggio veicoli3Proprietà 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