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!
Tantangan
MudahMari 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 methodenroll(Student student)yang mengembalikan boolean, dangetEnrolledCount()yang mengembalikan int.User.java: Buat abstract base class yang mewakili pengguna mana pun di platform. Sertakan field privat untukid(String) danname(String), constructor yang menginisialisasi keduanya, getter yang sesuai, dan method abstrakgetRole()yang mengembalikan String untuk menjelaskan peran pengguna.Student.java: Buat class yang mewarisiUser. Tambahkan ArrayList privat untuk melacak ID kursus yang diikuti. Sertakan constructor yang memanggil constructor parent, implementasikangetRole()agar mengembalikan"Student", dan tambahkan methodaddCourse(String courseId)dangetEnrolledCourseCount(). OverridetoString()agar mengembalikan"Student: [name] ([enrolledCount] courses)".Instructor.java: Buat class yang mewarisiUser. Tambahkan field privat untukspecialty(String). Sertakan constructor yang menerima id, name, dan specialty, implementasikangetRole()agar mengembalikan"Instructor", tambahkan getter untuk specialty, dan overridetoString()agar mengembalikan"Instructor: [name] - [specialty]".Course.java: Buat class yang mengimplementasikanEnrollable. Sertakan field privat untukcourseId(String),title(String),instructor(Instructor), dan ArrayList berisi siswa yang mendaftar. Constructor menerima courseId, title, dan instructor. Implementasikanenroll(Student student)untuk menambahkan siswa ke list, memanggil methodaddCourse()milik siswa dengan ID kursus ini, lalu mengembalikan true. ImplementasikangetEnrolledCount(). Tambahkan methodgetDetails()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:specialtyADD_STUDENT:id:nameADD_COURSE:courseId:title:instructorIdENROLL:studentId:courseIdINFO: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)"
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengantar OOPClass dan ObjectKata Kunci thisMethodField (Atribut)Method KonstruktorOverloading KonstruktorRangkuman: Kalkulator Sederhana4Pewarisan
Pewarisan Dasar (extends)Kata Kunci superMethod Overriding (@Override)Rantai KonstruktorKelas ObjectPewarisan Tunggal dan BertingkatMengapa Tidak Ada Pewarisan Multi-KelasRangkuman: Hierarki Karyawan7method Khusus & class Object
method toString()equals() dan hashCode()method clone()compareTo() dan ComparableAntarmuka ComparatorUlasan: Pengurutan Kustom10Penanganan Exception dalam OOP
Hierarki class ExceptionException KustomError Checked vs UncheckedPola Try-with-ResourcesRekap: Pengguna Tervalidasi2Modifier Akses & Enkapsulasi
Ikhtisar Tingkat AksesMethod Getter dan SetterPenyembunyian InformasiKata Kunci finalUlasan: Pengelola Rekening Bank5Polimorfisme
Dasar method overloadingMethod overriding (Saat program berjalan)Upcasting dan downcastingOperator instanceofclass dan method abstrakUlasan: Kalkulator Bentuk8Konsep OOP Lanjutan
Komposisi vs PewarisanAgregasi vs Komposisiinner, nested, dan anonymous classEnum dan method Enumrecord (Java 16+)sealed class (Java 17+)11Pola Desain Bagian 1
Pengantar Pola DesainPola SingletonPola FactoryPola BuilderPola ObserverPola Strategy14Tantangan Akhir
Platform E-LearningSistem PerbankanPengembangan Karakter GameLayanan Penyewaan Kendaraan3property class dan Anggota Statis
Variabel Instance vs Statismethod StatisBlok StatisKonstanta (static final)Rangkuman: Penghitung dan Utilitas6Antarmuka & Kelas Abstrak
Pengantar AntarmukaMengimplementasikan AntarmukaImplementasi Beberapa AntarmukaDefault & Static pada AntarmukaKelas Abstrak vs AntarmukaAntarmuka FungsionalRekap: Sistem PembayaranLatihan sendiri: Compiler Java online