Menu
Coddy logo textTech

E-Learning-Plattform

Teil des Abschnitts Objektorientierte Programmierung der Java-Journey von Coddy. Lektion 84 von 87.

Willkommen im Kapitel „Abschließende Herausforderungen“! Diese Herausforderungen sollen deine Beherrschung aller OOP-Konzepte testen, die du im Laufe dieses Kurses gelernt hast.

In dieser Herausforderung entwickelst du ein System für eine E-Learning Platform, das Vererbung, Schnittstellen, Polymorphie, Kapselung und Entwurfsmuster zu einer zusammenhängenden Anwendung kombiniert.

Deine Plattform sollte die Beziehungen zwischen Kursen, Studierenden und Dozenten modellieren. Überlege, wie eine User-Basisklasse durch die Klassen Student und Instructor erweitert werden kann, wie Kurse Lektionen enthalten und wie die Einschreibungsverfolgung zwischen Studierenden und Kursen funktioniert.

Überlege, welche OOP-Prinzipien gelten: Verwende Kapselung, um Benutzerdaten zu schützen, Vererbung, um gemeinsames Verhalten zu teilen, Schnittstellen, um Verträge wie Enrollable oder Completable zu definieren, und Polymorphie, um verschiedene Benutzertypen einheitlich zu behandeln.

Viel Erfolg beim Anwenden von allem, was du gelernt hast!

challenge icon

Aufgabe

Einfach

Lass uns eine E-Learning-Plattform entwickeln, die alle OOP-Konzepte zusammenführt, die du im Laufe dieses Kurses gemeistert hast! Du erstellst ein System, das die Beziehungen zwischen Kursen, Studierenden und Dozenten mithilfe von Vererbung, Schnittstellen, Polymorphie und Kapselung modelliert.

Du organisierst deinen Code über sechs Dateien:

  • Enrollable.java: Erstelle eine Schnittstelle, die den Vertrag für Einschreibevorgänge definiert. Sie sollte die Methoden enroll(Student student), die einen booleschen Wert zurückgibt, und getEnrolledCount(), die einen int zurückgibt, deklarieren.
  • User.java: Erstelle eine abstrakte Basisklasse, die jeden Benutzer auf der Plattform repräsentiert. Füge private Felder für id (String) und name (String), einen Konstruktor, der beide initialisiert, geeignete Getter sowie eine abstrakte Methode getRole() hinzu, die einen String zurückgibt, der die Rolle des Benutzers beschreibt.
  • Student.java: Erstelle eine Klasse, die User erweitert. Füge eine private ArrayList hinzu, um die IDs der belegten Kurse zu verfolgen. Füge einen Konstruktor hinzu, der den Konstruktor der Elternklasse aufruft, implementiere getRole() so, dass "Student" zurückgegeben wird, und füge die Methoden addCourse(String courseId) und getEnrolledCourseCount() hinzu. Überschreibe toString() so, dass "Student: [name] ([enrolledCount] courses)" zurückgegeben wird.
  • Instructor.java: Erstelle eine Klasse, die User erweitert. Füge ein privates Feld für specialty (String) hinzu. Füge einen Konstruktor hinzu, der id, name und specialty entgegennimmt, implementiere getRole() so, dass "Instructor" zurückgegeben wird, füge einen Getter für specialty hinzu und überschreibe toString() so, dass "Instructor: [name] - [specialty]" zurückgegeben wird.
  • Course.java: Erstelle eine Klasse, die Enrollable implementiert. Füge private Felder für courseId (String), title (String), instructor (Instructor) sowie eine ArrayList der eingeschriebenen Studierenden hinzu. Der Konstruktor nimmt courseId, title und instructor entgegen. Implementiere enroll(Student student), um den Studierenden zur Liste hinzuzufügen, die Methode addCourse() des Studierenden mit der ID dieses Kurses aufzurufen und true zurückzugeben. Implementiere getEnrolledCount(). Füge eine Methode getDetails() hinzu, die die Kurs-ID in eckigen Literalklammern, gefolgt vom Titel und dem Namen des Dozenten, in der Form "[" + courseId + "] " + title + " by " + instructorName zurückgibt.
  • Main.java: Baue deine Plattform! Du erhältst einen durch Kommas getrennten String von Befehlen:
    • ADD_INSTRUCTOR:id:name:specialty
    • ADD_STUDENT:id:name
    • ADD_COURSE:courseId:title:instructorId
    • ENROLL:studentId:courseId
    • INFO:userId

    Verwalte Sammlungen von Dozenten, Studierenden und Kursen. Verarbeite jeden Befehl und gib Folgendes aus:

    • ADD_INSTRUCTOR: Instructor added: [name]
    • ADD_STUDENT: Student added: [name]
    • ADD_COURSE: Course added: [title]
    • ENROLL: [studentName] enrolled in [courseTitle]
    • INFO: Gib die Ausgabe von toString() des Benutzers aus

    Gib nach allen Befehlen --- Platform Summary --- aus, gefolgt von den Details jedes Kurses und der Anzahl der Einschreibungen im Format [courseDetails] - [count] student(s).

Du erhältst eine Eingabe: den durch Kommas getrennten Befehlsstring.

Bei der Eingabe 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 würde deine Ausgabe beispielsweise wie folgt aussehen:

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)

Diese Herausforderung verbindet Vererbung (User-Hierarchie), Schnittstellen (Enrollable), Polymorphie (verschiedene Benutzertypen mit eigenen toString-Implementierungen) und Kapselung (private Felder mit kontrolliertem Zugriff) zu einem zusammenhängenden System!

Probier es selbst

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: Erstelle Collections, um Dozenten, Studenten und Kurse zu speichern
        // Hinweis: Verwende HashMap mit id als Schlüssel für einfaches Nachschlagen
        
        // TODO: Teile input am Komma auf, um einzelne Befehle zu erhalten
        
        // TODO: Verarbeite jeden Befehl:
        // - 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 -> Student in Kurs einschreiben, "[studentName] enrolled in [courseTitle]" ausgeben
        // - INFO:userId -> Finde Benutzer (Student oder Dozent) und gib deren toString() aus
        
        // TODO: After processing all commands, print "--- Platform Summary ---"
        
        // TODO: Für jeden Kurs "[courseDetails] - [count] student(s)" ausgeben
    }
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-Java-Compiler