Menu
Coddy logo textTech

Plateforme d'E-Learning

Fait partie de la section Programmation Orientée Objet du Journey Java de Coddy. Leçon 84 sur 87.

Bienvenue dans le chapitre des défis finaux ! Ces défis sont conçus pour tester votre maîtrise de tous les concepts de POO que vous avez appris tout au long de ce cours.

Dans ce défi, vous allez créer un système de plateforme d’apprentissage en ligne qui combine l’héritage, les interfaces, le polymorphisme, l’encapsulation et les patrons de conception au sein d’une application cohérente.

Votre plateforme doit modéliser les relations entre les cours, les étudiants et les formateurs. Réfléchissez à la manière dont une classe de base User peut être étendue par les classes Student et Instructor, dont les cours contiennent des leçons et dont le suivi des inscriptions fonctionne entre les étudiants et les cours.

Considérez quels principes de la POO s’appliquent : utilisez l’encapsulation pour protéger les données des utilisateurs, l’héritage pour partager un comportement commun, les interfaces pour définir des contrats comme Enrollable ou Completable, et le polymorphisme pour gérer uniformément différents types d’utilisateurs.

Bonne chance pour mettre en pratique tout ce que tu as appris !

challenge icon

Défi

Facile

Construisons une plateforme d’apprentissage en ligne qui rassemble tous les concepts de la POO que tu as maîtrisés tout au long de ce cours ! Tu vas créer un système qui modélise les relations entre les cours, les étudiants et les formateurs à l’aide de l’héritage, des interfaces, du polymorphisme et de l’encapsulation.

Tu organiseras ton code sur six fichiers :

  • Enrollable.java : crée une interface qui définit le contrat pour les opérations d’inscription. Elle doit déclarer les méthodes enroll(Student student) qui renvoie un booléen, et getEnrolledCount() qui renvoie un entier.
  • User.java : crée une classe de base abstraite représentant tout utilisateur de la plateforme. Inclus des champs privés pour id (String) et name (String), un constructeur qui initialise les deux, les accesseurs appropriés, ainsi qu’une méthode abstraite getRole() qui renvoie une String décrivant le rôle de l’utilisateur.
  • Student.java : crée une classe qui étend User. Ajoute une ArrayList privée pour suivre les identifiants des cours auxquels l’étudiant est inscrit. Inclus un constructeur qui appelle le constructeur parent, implémente getRole() pour renvoyer "Student", et ajoute les méthodes addCourse(String courseId) et getEnrolledCourseCount(). Redéfinis toString() pour renvoyer "Student: [name] ([enrolledCount] courses)".
  • Instructor.java : crée une classe qui étend User. Ajoute un champ privé pour specialty (String). Inclus un constructeur qui prend id, name et specialty, implémente getRole() pour renvoyer "Instructor", ajoute un accesseur pour specialty, et redéfinis toString() pour renvoyer "Instructor: [name] - [specialty]".
  • Course.java : crée une classe qui implémente Enrollable. Inclus des champs privés pour courseId (String), title (String), instructor (Instructor), ainsi qu’une ArrayList des étudiants inscrits. Le constructeur prend courseId, title et instructor. Implémente enroll(Student student) pour ajouter l’étudiant à la liste, appeler la méthode addCourse() de l’étudiant avec l’identifiant de ce cours, puis renvoyer true. Implémente getEnrolledCount(). Ajoute une méthode getDetails() qui renvoie l’identifiant du cours entre crochets littéraux, suivi du titre et du nom du formateur, construite comme "[" + courseId + "] " + title + " by " + instructorName.
  • Main.java : construis ta plateforme ! Tu recevras une chaîne de commandes séparées par des virgules :
    • ADD_INSTRUCTOR:id:name:specialty
    • ADD_STUDENT:id:name
    • ADD_COURSE:courseId:title:instructorId
    • ENROLL:studentId:courseId
    • INFO:userId

    Gère des collections de formateurs, d’étudiants et de cours. Traite chaque commande et affiche :

    • ADD_INSTRUCTOR : Instructor added: [name]
    • ADD_STUDENT : Student added: [name]
    • ADD_COURSE : Course added: [title]
    • ENROLL : [studentName] enrolled in [courseTitle]
    • INFO : affiche le résultat de toString() de l’utilisateur

    Après toutes les commandes, affiche --- Platform Summary ---, suivi des détails de chaque cours et du nombre d’inscriptions au format [courseDetails] - [count] student(s).

Tu recevras une entrée : la chaîne de commandes séparées par des virgules.

Par exemple, avec l’entrée ADD_INSTRUCTOR:I001:Dr. Smith:Java,ADD_STUDENT:S001:Alice,ADD_STUDENT:S002:Bob,ADD_COURSE:C001:OOP Fundamentals:I001,ENROLL:S001:C001,ENROLL:S002:C001,INFO:S001,INFO:I001, ta sortie serait :

Instructor added: Dr. Smith
Student added: Alice
Student added: Bob
Course added: OOP Fundamentals
Alice enrolled in OOP Fundamentals
Bob enrolled in OOP Fundamentals
Student: Alice (1 courses)
Instructor: Dr. Smith - Java
--- Platform Summary ---
[C001] OOP Fundamentals by Dr. Smith - 2 student(s)

Ce défi combine l’héritage (hiérarchie User), les interfaces (Enrollable), le polymorphisme (différents types d’utilisateurs avec leurs propres implémentations de toString) et l’encapsulation (champs privés avec un accès contrôlé) au sein d’un système cohérent !

Essayez vous-même

import java.util.Scanner;
import java.util.HashMap;
import java.util.ArrayList;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String input = scanner.nextLine();
        
        // TODO: Créer des collections pour stocker les instructeurs, les étudiants et les cours
        // Indice : Utilisez HashMap avec id comme clé pour une recherche facile
        
        // TODO: Diviser l'entrée par des virgules pour obtenir les commandes individuelles
        
        // TODO: Traiter chaque commande :
        // - ADD_INSTRUCTOR:id:name:specialty -> Create instructor, add to collection, print "Instructor added: [name]"
        // - ADD_STUDENT:id:name -> Create student, add to collection, print "Student added: [name]"
        // - ADD_COURSE:courseId:title:instructorId -> Create course with instructor, add to collection, print "Course added: [title]"
        // - ENROLL:studentId:courseId -> Inscrire l'étudiant au cours, afficher "[studentName] enrolled in [courseTitle]"
        // - INFO:userId -> Trouver l'utilisateur (étudiant ou instructeur) et afficher leur toString()
        
        // TODO: After processing all commands, print "--- Platform Summary ---"
        
        // TODO: Pour chaque cours, afficher "[courseDetails] - [count] student(s)"
    }
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Programmation Orientée Objet

Entraînez-vous par vous-même : Compilateur Java en ligne