Menu
Coddy logo textTech

Platforma e-learningowa

Część sekcji Programowanie obiektowe ścieżki Java w Coddy. Lekcja 84 z 87.

Witamy w rozdziale Wyzwania końcowe! Te wyzwania mają sprawdzić, jak dobrze opanowałeś wszystkie zagadnienia związane z OOP, których nauczyłeś się w trakcie tego kursu.

W tym wyzwaniu zbudujesz system platformy e-learningowej, który łączy dziedziczenie, interfejsy, polimorfizm, enkapsulację i wzorce projektowe w spójną aplikację.

Twoja platforma powinna modelować relacje między kursami, studentami i instruktorami. Zastanów się, jak klasę bazową User można rozszerzyć o klasy Student i Instructor, jak kursy zawierają lekcje oraz jak działa śledzenie zapisów studentów na kursy.

Zastanów się, które zasady OOP mają zastosowanie: użyj hermetyzacji, aby chronić dane użytkowników, dziedziczenia, aby współdzielić wspólne zachowanie, interfejsów, aby definiować kontrakty, takie jak Enrollable lub Completable, oraz polimorfizmu, aby jednakowo obsługiwać różne typy użytkowników.

Powodzenia w zastosowaniu wszystkiego, czego się nauczyłeś!

challenge icon

Wyzwanie

Łatwy

Stwórzmy platformę e-learningową, która łączy wszystkie koncepcje OOP, które opanowałeś w trakcie tego kursu! Stworzysz system modelujący relacje między kursami, studentami i instruktorami z wykorzystaniem dziedziczenia, interfejsów, polimorfizmu i enkapsulacji.

Rozmieścisz swój kod w sześciu plikach:

  • Enrollable.java: Utwórz interfejs definiujący kontrakt dla operacji zapisu. Powinien deklarować metody enroll(Student student), która zwraca wartość boolean, oraz getEnrolledCount(), która zwraca wartość int.
  • User.java: Utwórz abstrakcyjną klasę bazową reprezentującą dowolnego użytkownika platformy. Dodaj prywatne pola id (String) i name (String), konstruktor inicjalizujący oba pola, odpowiednie metody pobierające oraz abstrakcyjną metodę getRole(), która zwraca wartość String opisującą rolę użytkownika.
  • Student.java: Utwórz klasę rozszerzającą User. Dodaj prywatną ArrayList do śledzenia identyfikatorów kursów, na które zapisano studenta. Dodaj konstruktor wywołujący konstruktor klasy nadrzędnej, zaimplementuj getRole(), aby zwracała "Student", oraz dodaj metody addCourse(String courseId) i getEnrolledCourseCount(). Nadpisz toString(), aby zwracała "Student: [name] ([enrolledCount] courses)".
  • Instructor.java: Utwórz klasę rozszerzającą User. Dodaj prywatne pole specialty (String). Dodaj konstruktor przyjmujący id, name i specialty, zaimplementuj getRole(), aby zwracała "Instructor", dodaj metodę pobierającą specialty i nadpisz toString(), aby zwracała "Instructor: [name] - [specialty]".
  • Course.java: Utwórz klasę implementującą Enrollable. Dodaj prywatne pola courseId (String), title (String), instructor (Instructor) oraz ArrayList zapisanych studentów. Konstruktor przyjmuje courseId, title i instructor. Zaimplementuj enroll(Student student), aby dodawała studenta do listy, wywoływała metodę addCourse() studenta z ID tego kursu i zwracała true. Zaimplementuj getEnrolledCount(). Dodaj metodę getDetails(), która zwraca ID kursu w dosłownych nawiasach kwadratowych, a następnie tytuł i imię instruktora, tworzone jako "[" + courseId + "] " + title + " by " + instructorName.
  • Main.java: Zbuduj swoją platformę! Otrzymasz ciąg poleceń rozdzielonych przecinkami:
    • ADD_INSTRUCTOR:id:name:specialty
    • ADD_STUDENT:id:name
    • ADD_COURSE:courseId:title:instructorId
    • ENROLL:studentId:courseId
    • INFO:userId

    Przechowuj kolekcje instruktorów, studentów i kursów. Przetwórz każde polecenie i wypisz:

    • ADD_INSTRUCTOR: Instructor added: [name]
    • ADD_STUDENT: Student added: [name]
    • ADD_COURSE: Course added: [title]
    • ENROLL: [studentName] enrolled in [courseTitle]
    • INFO: Wypisz wynik toString() użytkownika

    Po przetworzeniu wszystkich poleceń wypisz --- Platform Summary ---, a następnie szczegóły każdego kursu i liczbę zapisanych studentów w formacie [courseDetails] - [count] student(s).

Otrzymasz jedno wejście: ciąg poleceń rozdzielonych przecinkami.

Na przykład dla wejścia 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 wynikiem będzie:

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)

To wyzwanie łączy dziedziczenie (hierarchię User), interfejsy (Enrollable), polimorfizm (różne typy użytkowników z własnymi implementacjami toString) oraz enkapsulację (prywatne pola z kontrolowanym dostępem) w spójny system!

Spróbuj swoich sił

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: Utwórz kolekcje do przechowywania instruktorów, studentów i kursów
        // Wskazówka: Użyj HashMap z id jako kluczem, aby ułatwić wyszukiwanie
        
        // TODO: Podziel input według przecinków, aby uzyskać poszczególne polecenia
        
        // TODO: Przetwórz każde polecenie:
        // - ADD_INSTRUCTOR:id:name:specialty -> Utwórz instruktora, dodaj go do kolekcji i wypisz "Instructor added: [name]"
        // - ADD_STUDENT:id:name -> Utwórz studenta, dodaj go do kolekcji i wypisz "Student added: [name]"
        // - ADD_COURSE:courseId:title:instructorId -> Utwórz kurs z instruktorem, dodaj go do kolekcji i wypisz "Course added: [title]"
        // - ENROLL:studentId:courseId -> Zapisz studenta na kurs i wypisz "[studentName] enrolled in [courseTitle]"
        // - INFO:userId -> Znajdź użytkownika (studenta lub instruktora) i wypisz wynik jego metody toString()
        
        // TODO: Po przetworzeniu wszystkich poleceń wypisz "--- Platform Summary ---"
        
        // TODO: Dla każdego kursu wypisz "[courseDetails] - [count] student(s)"
    }
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Java online