Menu
CoddyTech

Platform E-Learning

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Java di Coddy. Pelajaran 84 dari 87.

Selamat datang di bab Tantangan Akhir! Tantangan ini dirancang untuk menguji penguasaanmu atas semua konsep OOP yang telah kamu pelajari sepanjang kursus ini.

Dalam tantangan ini, kamu akan membangun sistem Platform E-Learning yang menggabungkan pewarisan, interface, polimorfisme, enkapsulasi, dan pola desain ke dalam aplikasi yang terpadu.

Platformmu harus memodelkan hubungan antara kursus, siswa, dan instruktur. Pikirkan bagaimana base class User dapat diperluas oleh class Student dan Instructor, bagaimana kursus berisi pelajaran, dan bagaimana pelacakan pendaftaran bekerja antara siswa dan kursus.

Pertimbangkan prinsip OOP yang berlaku: gunakan enkapsulasi untuk melindungi data pengguna, inheritance untuk berbagi perilaku umum, interface untuk menentukan kontrak seperti Enrollable atau Completable, dan polimorfisme untuk menangani berbagai tipe pengguna secara seragam.

Semoga berhasil menerapkan semua yang telah kamu pelajari!

challenge icon

Tantangan

Mudah

Mari bangun Platform E-Learning yang menyatukan semua konsep OOP yang telah kamu kuasai sepanjang kursus ini! Kamu akan membuat sistem yang memodelkan hubungan antara kursus, siswa, dan instruktur menggunakan inheritance, interface, polymorphism, dan encapsulation.

Kamu akan mengatur kodemu dalam enam file:

  • Enrollable.java: Buat interface yang mendefinisikan kontrak untuk operasi pendaftaran. Interface ini harus mendeklarasikan method enroll(Student student) yang mengembalikan boolean, dan getEnrolledCount() yang mengembalikan int.
  • User.java: Buat abstract base class yang mewakili pengguna mana pun di platform. Sertakan field privat untuk id (String) dan name (String), constructor yang menginisialisasi keduanya, getter yang sesuai, dan method abstrak getRole() yang mengembalikan String untuk menjelaskan peran pengguna.
  • Student.java: Buat class yang mewarisi User. Tambahkan ArrayList privat untuk melacak ID kursus yang diikuti. Sertakan constructor yang memanggil constructor parent, implementasikan getRole() agar mengembalikan "Student", dan tambahkan method addCourse(String courseId) dan getEnrolledCourseCount(). Override toString() agar mengembalikan "Student: [name] ([enrolledCount] courses)".
  • Instructor.java: Buat class yang mewarisi User. Tambahkan field privat untuk specialty (String). Sertakan constructor yang menerima id, name, dan specialty, implementasikan getRole() agar mengembalikan "Instructor", tambahkan getter untuk specialty, dan override toString() agar mengembalikan "Instructor: [name] - [specialty]".
  • Course.java: Buat class yang mengimplementasikan Enrollable. Sertakan field privat untuk courseId (String), title (String), instructor (Instructor), dan ArrayList berisi siswa yang mendaftar. Constructor menerima courseId, title, dan instructor. Implementasikan enroll(Student student) untuk menambahkan siswa ke list, memanggil method addCourse() milik siswa dengan ID kursus ini, lalu mengembalikan true. Implementasikan getEnrolledCount(). Tambahkan method getDetails() yang mengembalikan ID kursus di dalam tanda kurung siku literal, diikuti title dan nama instruktur, dengan susunan "[" + courseId + "] " + title + " by " + instructorName.
  • Main.java: Bangun platformmu! Kamu akan menerima string perintah yang dipisahkan koma:
    • ADD_INSTRUCTOR:id:name:specialty
    • ADD_STUDENT:id:name
    • ADD_COURSE:courseId:title:instructorId
    • ENROLL:studentId:courseId
    • INFO:userId

    Kelola kumpulan instruktur, siswa, dan kursus. Proses setiap perintah dan cetak:

    • ADD_INSTRUCTOR: Instructor added: [name]
    • ADD_STUDENT: Student added: [name]
    • ADD_COURSE: Course added: [title]
    • ENROLL: [studentName] enrolled in [courseTitle]
    • INFO: Cetak output toString() pengguna

    Setelah semua perintah diproses, cetak --- Platform Summary --- diikuti detail setiap kursus dan jumlah pendaftarnya dengan format [courseDetails] - [count] student(s).

Kamu akan menerima satu input: string perintah yang dipisahkan koma.

Misalnya, dengan input 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, outputmu akan berupa:

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)

Tantangan ini menggabungkan inheritance (hierarki User), interface (Enrollable), polymorphism (berbagai tipe pengguna dengan implementasi toString masing-masing), dan encapsulation (field privat dengan akses terkontrol) ke dalam satu sistem yang terpadu!

Coba sendiri

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: Buat koleksi untuk menyimpan instruktur, siswa, dan kursus
        // Petunjuk: Gunakan HashMap dengan id sebagai kunci agar mudah dicari
        
        // TODO: Pisahkan input berdasarkan koma untuk mendapatkan setiap perintah
        
        // TODO: Proses setiap perintah:
        // - ADD_INSTRUCTOR:id:name:specialty -> Buat instruktur, tambahkan ke koleksi, cetak "Instructor added: [name]"
        // - ADD_STUDENT:id:name -> Buat siswa, tambahkan ke koleksi, cetak "Student added: [name]"
        // - ADD_COURSE:courseId:title:instructorId -> Buat kursus dengan instruktur, tambahkan ke koleksi, cetak "Course added: [title]"
        // - ENROLL:studentId:courseId -> Daftarkan siswa ke kursus, cetak "[studentName] enrolled in [courseTitle]"
        // - INFO:userId -> Cari pengguna (siswa atau instruktur) dan cetak hasil toString()-nya
        
        // TODO: Setelah memproses semua perintah, cetak "--- Platform Summary ---"
        
        // TODO: Untuk setiap kursus, cetak "[courseDetails] - [count] student(s)"
    }
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Java online