Platform E-Learning
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan PHP di Coddy. Pelajaran 88 dari 91.
Tantangan
MudahMari kita bangun Platform E-Learning yang mengelola kursus, siswa, dan instruktur. Tantangan menyeluruh ini menggabungkan pewarisan, antarmuka, enkapsulasi, dan pola desain menjadi satu sistem yang padu.
Kamu akan mengatur kodemu dalam enam file:
User.php: Buat classUserabstrak yang menjadi dasar bagi siswa dan instruktur. Gunakan promosi konstruktor untukid(int) danname(string), keduanya public readonly. Sertakan method abstrakgetRole(): stringyang harus diimplementasikan oleh class turunan.Student.php: Sertakan file User. Buat classStudentyang mewarisiUser. Siswa menyimpan kursus yang diikuti dalam array private dan progres (persentase penyelesaian) untuk setiap kursus. Implementasikan:getRole(): string: mengembalikan"Student"enrollInCourse(Course $course): string: mendaftarkan siswa jika kursus masih memiliki kapasitas; mengembalikan pesan berhasil atau gagalgetEnrolledCourses(): array: mengembalikan array kursus yang diikutiupdateProgress(string $courseTitle, int $percent): void: menetapkan progres untuk suatu kursus (0-100)getProgress(string $courseTitle): int: mengembalikan persentase progres, atau 0 jika belum terdaftar
Instructor.php: Sertakan file User. Buat classInstructoryang mewarisiUser. Instruktur dapat membuat dan mengelola kursus. Implementasikan:getRole(): string: mengembalikan"Instructor"createCourse(string $title, int $capacity): Course: membuat dan mengembalikan Course baru dengan instruktur ini ditetapkan sebagai pengajarnya
Course.php: Sertakan file Instructor. Buat classCoursedengan promosi konstruktor untuktitle(string, public readonly),instructor(Instructor, public readonly), dancapacity(int, private). Simpan siswa yang terdaftar dalam array private. Implementasikan:getCapacity(): int: mengembalikan kapasitas maksimumgetEnrolledCount(): int: mengembalikan jumlah siswa yang saat ini terdaftarhasCapacity(): bool: mengembalikan true jika masih ada kapasitas untuk siswa lainaddStudent(Student $student): bool: menambahkan siswa jika kapasitas memungkinkan, lalu mengembalikan status keberhasilangetStudents(): array: mengembalikan array siswa yang terdaftar
Platform.php: Sertakan file Course dan Student. Buat classPlatformyang mengelola seluruh sistem. Simpan kursus dan pengguna dalam array private. Implementasikan:addCourse(Course $course): void: menambahkan kursus ke platformfindCourse(string $title): ?Course: mencari kursus berdasarkan judulenrollStudent(Student $student, string $courseTitle): string: mendaftarkan siswa ke kursus. Kembalikan"Course not found","Course is full", atau"[name] enrolled in [title]"getCourseStats(string $title): string: mengembalikan"[title]: [enrolled]/[capacity] students"atau"Course not found"
main.php: Sertakan file Platform. Kamu akan menerima tiga input: data instruktur (JSON), kursus yang akan dibuat (JSON), dan operasi yang akan dilakukan (JSON).Format JSON instruktur:
{"id": 1, "name": "Dr. Smith"}Format JSON kursus:
[{"title": "PHP Basics", "capacity": 2}, {"title": "OOP Mastery", "capacity": 3}]Format JSON operasi:
[{"type": "enroll", "student_id": 1, "student_name": "Alice", "course": "PHP Basics"}, {"type": "progress", "student_id": 1, "course": "PHP Basics", "percent": 50}, {"type": "stats", "course": "PHP Basics"}]Buat platform, instruktur, dan semua kursus (menggunakan method
createCoursemilik instruktur). Tambahkan kursus ke platform. Lalu proses setiap operasi:"enroll": Buat Student baru dan daftarkan siswa tersebut; cetak hasil darienrollStudent()"progress": Perbarui progres siswa; cetak"[name] progress in [course]: [percent]%""stats": Cetak hasil darigetCourseStats()
Simpan data siswa yang dibuat berdasarkan ID mereka agar kamu dapat memperbarui progresnya nanti. Cetak hasil setiap operasi pada baris baru.
Tantangan ini menunjukkan bagaimana pewarisan membentuk hierarki pengguna yang rapi, enkapsulasi melindungi data pendaftaran, dan platform berperan sebagai koordinator yang mengelola hubungan antara kursus, siswa, dan instruktur.
Coba sendiri
<?php
require_once 'Platform.php';
// Baca input
$instructorData = (array)json_decode(trim(fgets(STDIN)), true);
$coursesData = (array)json_decode(trim(fgets(STDIN)), true);
$operations = (array)json_decode(trim(fgets(STDIN)), true);
// TODO: Buat platform
// TODO: Buat instruktur dari instructorData
// TODO: Buat semua kursus menggunakan method createCourse milik instruktur
// dan tambahkan ke platform
// TODO: Lacak siswa yang telah dibuat berdasarkan ID mereka
$students = [];
// TODO: Proses setiap operasi
foreach ($operations as $op) {
$operation = (array)$op;
// TODO: Tangani operasi "enroll"
// Buat Student baru dan daftarkan ke kursus
// Cetak hasil dari enrollStudent()
// TODO: Tangani operasi "progress"
// Perbarui progres siswa
// Cetak "[name] progress in [course]: [percent]%"
// TODO: Tangani operasi "stats"
// Cetak hasil dari getCourseStats()
}
?>Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengenalan OOPclass vs objectKata Kunci $thismethodpropertyConstructor (__construct)Destructor (__destruct)Ringkasan: Kalkulator Sederhana4Pewarisan
Pewarisan DasarKata Kunci parent::Penimpaan methodKata Kunci finalClass AbstrakRingkasan: Hierarki Karyawan7Enkapsulasi
Public, Protected, PrivateModifier Akses secara MendalamGetter dan SetterPenyembunyian InformasiPromosi Constructor (8.0)Ulasan: Sistem Catatan Siswa2Namespace dan Autoloading
Pengenalan NamespaceKata Kunci useStandar Autoloading PSR-4Autoloader ComposerRingkasan: Proyek yang Terorganisasi5Interface dan Kontrak
Pengenalan InterfaceMengimplementasikan InterfaceImplementasi Beberapa InterfaceInterface vs Abstract ClassPetunjuk Tipe dengan InterfaceRekap: Kalkulator Bentuk8Magic Methods
Pengantar Magic Methods__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Cloning Object__serialize & __unserializeRingkasan: Koleksi Kustom11Sistem Tipe Data dan Penanganan Error
Deklarasi TipeTipe NullableTipe Union dan IntersectionClass ExceptionHierarki Exception KustomTry, Catch, FinallyRekap: Validator Form3Property dalam class
Property instance vs staticKonstanta dalam classMethod & property staticProperty private & protectedProperty readonly (PHP 8.1)Ulasan: Pengelola Rekening Bank6Polimorfisme
Meninjau Kembali Method OverridingPolimorfisme melalui AntarmukaPetunjuk Tipe dan Tipe UnionPengikatan Statis TertundaRangkuman: Pemroses Pembayaran9Trait
Pengantar TraitMenggunakan Beberapa TraitResolusi Konflik TraitMetode Abstrak dalam TraitTrait vs Pewarisan15Tantangan Akhir
Platform E-LearningSistem PerbankanPengembangan Karakter GameLayanan Penyewaan KendaraanLatihan sendiri: Compiler PHP online