Plateforme d’apprentissage en ligne
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 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 à l’aide de classes abstraites, de l’héritage, de mixins et de 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), ainsi que des accesseurs publics. Incluez une méthode abstraiteString getRole()que les sous-classes doivent implémenter. SurchargeztoString()pour qu’elle renvoie[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 accesseur, ainsi que les méthodescompleteLesson()pour l’incrémenter etgetProgressReport()qui renvoieCompleted X lessons. La classeStudentdoit implémentergetRole()pour renvoyerStudent.instructor.dart: créez une classeInstructorqui étendUser. Les formateurs disposent d’une liste privée_coursesCreated(une liste de chaînes représentant les titres des cours). Incluez une méthodecreateCourse(String title)qui ajoute le titre à la liste et renvoie le titre. ImplémentezgetRole()pour renvoyerInstructor. Ajoutez un accesseurcourseCountqui renvoie 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), uncourseName(String) et un booléen privé_isCompleted(faux par défaut) avec un accesseur. Incluez une méthodemarkComplete()qui définit l’état d’achèvement sur vrai. SurchargeztoString()pour qu’elle renvoiestudentId enrolled in "courseName" - Status: CompletedouStatus: In Progressselon l’état d’achèvement.main.dart: assemblez tous les éléments. Créez un formateur (I001,Dr. Smith) et faites-lui créer deux cours :Dart FundamentalsetAdvanced OOP. Affichez le formateur et le nombre de ses 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 au coursDart Fundamentals, affichez-la, marquez-la comme terminée, puis 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: Create an enrollment for Alice (S001) in "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
1Fondamentaux de la POO
Fichiers externesBibliothèques et importsIntroduction à la POOClasses vs objetsLe mot-clé thisMéthodesVariables d’instanceBases des constructeursRécapitulatif - Calculatrice simple4Sécurité face aux valeurs nulles
Introduction à la sécurité face aux valeurs nullesNullable vs Non-NullableLes opérateurs ? et !Mot-clé Late et sécurité face aux valeurs nullesOpérateurs sensibles à nullSécurité face aux valeurs nulles dans les classesRécapitulatif – Système de profil utilisateur7Classes abstraites et interfaces
Classes abstraitesMéthodes abstraitesInterfaces en DartInterfaces implicitesImplémenter ou étendreInterfaces multiplesRécapitulatif - Calculateur de formes10Collections et génériques
Vue d’ensemble des List, Set et MapCollections à typage sûrClasses génériquesMéthodes génériquesContraintes génériquesIterable et IteratorRécapitulatif – stockage générique2Constructeurs en Dart
Constructeur par défautConstructeurs nommésListes d'initialisationConstructeurs constantsConstructeurs factoryConstructeurs redirigésRécapitulatif - Constructeur de formes5Encapsulation
Membres publics vs privésLa convention du préfixe _Confidentialité au niveau de la bibliothèqueApprofondissement des getters et settersMasquage de l’informationRécapitulatif - Fiches des étudiants8Mixins
Introduction aux MixinsCréer des MixinsUtiliser plusieurs MixinsMot-clé on dans les MixinsMixin ou héritageMixin ou interfaceRécapitulatif - Système animal11Méthodes spéciales
Redéfinition de toString()Redéfinition de hashCode et ==Interface ComparableMéthode call()Redéfinition de noSuchMethodRécapitulatif - Collection personnalisée14Patrons de conception, partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FactoryPatron ObserverPatron Strategy17Défis finaux
Plateforme d’apprentissage en ligneSystème bancaireSystème de personnages de jeuService de location de véhicules3Propriétés des classes
Membres d’instance et statiquesChamps Final et ConstVariables différéesMéthodes et champs statiquesAccesseurs et mutateursRécapitulatif - Gestionnaire de compte bancaire6Héritage
Héritage de baseLe mot-clé superRedéfinition de méthodeL’annotation @overrideLe mot-clé de classe finalConstructeurs et héritageRécapitulatif – Hiérarchie des employés9Polymorphisme
Bases du polymorphismePolymorphisme via les interfacesVérification des types à l’exécutionLes opérateurs is et asMot-clé covariantRécapitulatif - Processeur de paiements12POO asynchrone
Futures et async/awaitNotions de base des StreamsContrôleurs de StreamsConstructeurs asynchronesAsynchrone dans les méthodes de classeRécapitulatif - récupérateur de données15Patrons de conception – Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode modèlePatron ÉtatPatron CompositePatron DépôtEntraînez-vous par vous-même : Compilateur Dart en ligne