Plateforme d'E-Learning
Fait partie de la section Programmation Orientée Objet du Journey Dart de Coddy — leçon 107 sur 110.
Défi
FacileConstruisons une plateforme d'apprentissage en ligne qui rassemble tous les concepts de la POO que vous avez maîtrisés tout au long de ce cours. Vous allez créer un système qui gère les utilisateurs, les cours et les inscriptions en utilisant des classes abstraites, l'héritage, les mixins et l'encapsulation.
Votre plateforme sera organisée sur cinq fichiers :
user.dart: Créez une classe abstraiteUseravec des champs privés pour_id(String) et_name(String), avec des getters publics. Incluez une méthode abstraiteString getRole()que les sous-classes doivent implémenter. SurchargeztoString()pour retourner[role] name (id)où role provient degetRole().student.dart: Créez une classeStudentqui étendUser. Les étudiants doivent utiliser un mixinProgressTracking(défini dans ce fichier) qui fournit un entier privé_completedLessons(commençant à 0) avec un getter, et des méthodescompleteLesson()pour l'incrémenter etgetProgressReport()qui retourneCompleted X lessons. La classeStudentdoit implémentergetRole()pour retournerStudent.instructor.dart: Créez une classeInstructorqui étendUser. Les instructeurs ont une liste privée_coursesCreated(liste de Strings représentant les titres des cours). Incluez une méthodecreateCourse(String title)qui ajoute le titre à la liste et retourne le titre. ImplémentezgetRole()pour retournerInstructor. Ajoutez un gettercourseCountqui retourne le nombre de cours créés.enrollment.dart: Créez une classeEnrollmentqui suit l'inscription d'un étudiant à un cours. Elle doit avoir unstudentId(String),courseName(String), et un booléen privé_isCompleted(par défaut à false) avec un getter. Incluez une méthodemarkComplete()qui définit la complétion à true. SurchargeztoString()pour retournerstudentId enrolled in "courseName" - Status: CompletedouStatus: In Progressselon le statut de complétion.main.dart: Rassemblez le tout. Créez un instructeur (I001,Dr. Smith) et faites-lui créer deux cours :Dart FundamentalsetAdvanced OOP. Affichez l'instructeur et son nombre de cours sous la formeCourses created: X. Créez un étudiant (S001,Alice), affichez-le, puis faites-lui terminer 3 leçons et affichez son rapport de progression. Créez une inscription pour Alice àDart Fundamentals, affichez-la, marquez-la comme terminée, et affichez-la à nouveau.
Résultat attendu :
[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: CompletedEssayez vous-même
import 'user.dart';
import 'student.dart';
import 'instructor.dart';
import 'enrollment.dart';
void main() {
// TODO: Créer un instructeur avec l'id "I001" et le nom "Dr. Smith"
// TODO: Faire en sorte que l'instructeur crée deux cours : "Dart Fundamentals" et "Advanced OOP"
// TODO: Afficher l'instructeur (utilise toString())
// TODO: Afficher "Courses created: X" où X est le courseCount
// TODO: Créer un étudiant avec l'id "S001" et le nom "Alice"
// TODO: Afficher l'étudiant
// TODO: Faire en sorte que l'étudiant termine 3 leçons (appeler completeLesson() 3 fois)
// TODO: Afficher le rapport de progression de l'étudiant
// TODO: Créer une inscription pour Alice (S001) au cours "Dart Fundamentals"
// TODO: Afficher l'inscription
// TODO: Marquer l'inscription comme terminée
// TODO: Afficher à nouveau l'inscription
}
Toutes les leçons de Programmation Orientée Objet
1Les bases de la POO
Fichiers externesBibliothèques et importsIntroduction à la POOClasses vs ObjetsLe mot-clé thisMéthodesVariables d'instanceBases des constructeursRécapitulatif - Calculatrice simple4Null Safety
Introduction à la Null SafetyNullable vs Non-NullableLes opérateurs ? et !Le mot-clé late et la Null SafetyLes opérateurs Null-AwareLa Null Safety dans les classesRécapitulatif - Système de profil utilisateur7Classes abstraites et Interfaces
Classes abstraitesMéthodes abstraitesInterfaces en DartInterfaces implicitesImplémentation vs ExtensionInterfaces multiplesRécapitulatif - Calculateur de formes10Collections et Génériques
Aperçu des List, Set et MapCollections Type-SafeClasses génériquesMéthodes génériquesContraintes de généricitéIterable & IteratorRécapitulatif - Stockage générique2Les constructeurs en Dart
Constructeur par défautConstructeurs nommésListes d'initialisationConstructeurs constantsConstructeurs factoryConstructeurs de redirectionRécapitulatif - Shape Builder5Encapsulation
Membres publics vs privésLa convention du préfixe _Visibilité au niveau de la bibliothèqueApprofondissement des Getters & SettersMasquage d'informationsRécapitulatif - Dossiers d'étudiants8Mixins
Introduction aux MixinsCréation de MixinsUtilisation de plusieurs MixinsLe mot-clé on dans les MixinsMixin vs HéritageMixin vs InterfaceRécapitulatif - Système Animal11Méthodes spéciales
Redéfinition de toString()Redéfinition de hashCode & ==Interface ComparableMéthode call()Redéfinition de noSuchMethodRécapitulatif - Collection personnalisée14Patrons de conception Partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FabriquePatron ObservateurPatron Stratégie17Défis finaux
Plateforme d'E-LearningSystème bancaireSystème de personnages de jeuService de location de véhicules3Propriétés de classe
Membres d'instance vs statiquesChamps Final & ConstVariables LateMéthodes et champs statiquesGetters et SettersRécapitulatif - Gestionnaire de compte bancaire6Héritage
Bases de l'héritageLe mot-clé superRedéfinition de méthodeL'annotation @overrideLe mot-clé final pour les classesConstructeurs et héritageRécapitulatif - Hiérarchie des employés9Polymorphisme
Bases du polymorphismePolymorphisme via les interfacesVérification de type à l'exécutionLes opérateurs is & asMot-clé covariantRécapitulatif - Processeur de paiement12POO Asynchrone
Futures & async/awaitBases des StreamsStream ControllersConstructeurs asynchronesL'asynchrone dans les méthodes de classeRécapitulatif - Data Fetcher15Patrons de conception Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode ModèlePatron ÉtatPatron CompositePatron Repository