E-Öğrenme Platformu
Coddy'nin Java Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 84 / 87.
Final Zorluklar bölümüne hoş geldin! Bu zorluklar, bu kurs boyunca öğrendiğin tüm OOP kavramlarına ne kadar hâkim olduğunu sınamak için tasarlanmıştır.
Bu meydan okumada, kalıtım, arayüzler, çok biçimlilik, kapsülleme ve tasarım desenlerini uyumlu bir uygulamada birleştiren bir E-Learning Platform sistemi oluşturacaksın.
Platformunuz, dersler, öğrenciler ve eğitmenler arasındaki ilişkileri modellemelidir. Bir User temel sınıfının Student ve Instructor sınıfları tarafından nasıl genişletilebileceğini, derslerin dersleri nasıl içerdiğini ve kayıt takibinin öğrenciler ile dersler arasında nasıl çalıştığını düşünün.
Hangi OOP ilkelerinin geçerli olduğunu düşünün: kullanıcı verilerini korumak için kapsüllemeyi, ortak davranışları paylaşmak için kalıtımı, Enrollable veya Completable gibi sözleşmeleri tanımlamak için arayüzleri ve farklı kullanıcı türlerini tek tip olarak işlemek için çok biçimliliği kullanın.
Öğrendiğin her şeyi uygularken bol şans!
Görev
KolayBu kurs boyunca öğrendiğin tüm OOP kavramlarını bir araya getiren bir E-Learning Platform oluşturalım! Kalıtım, arayüzler, çok biçimlilik ve kapsülleme kullanarak kurslar, öğrenciler ve eğitmenler arasındaki ilişkileri modelleyen bir sistem oluşturacaksın.
Kodunu altı dosyada düzenleyeceksin:
Enrollable.java: Kayıt işlemleri için sözleşmeyi tanımlayan bir arayüz oluştur.enroll(Student student)adlı ve boolean döndüren bir yöntem ilegetEnrolledCount()adlı ve int döndüren bir yöntem bildirmelidir.User.java: Platformdaki herhangi bir kullanıcıyı temsil eden soyut bir temel sınıf oluştur.id(String) vename(String) için private alanlar, ikisini de başlatan bir yapıcı, uygun getter'lar ve kullanıcının rolünü açıklayan bir String döndüren soyutgetRole()yöntemi ekle.Student.java:Usersınıfını genişleten bir sınıf oluştur. Kayıt olunan kurs kimliklerini takip etmek için private bir ArrayList ekle. Üst sınıfın yapıcısını çağıran bir yapıcı ekle,getRole()yöntemini"Student"döndürecek şekilde uygula veaddCourse(String courseId)ilegetEnrolledCourseCount()yöntemlerini ekle.toString()yöntemini"Student: [name] ([enrolledCount] courses)"döndürecek şekilde geçersiz kıl.Instructor.java:Usersınıfını genişleten bir sınıf oluştur.specialty(String) için private bir alan ekle. id, name ve specialty alanlarını alan bir yapıcı ekle,getRole()yöntemini"Instructor"döndürecek şekilde uygula, specialty için bir getter ekle vetoString()yöntemini"Instructor: [name] - [specialty]"döndürecek şekilde geçersiz kıl.Course.java:Enrollablearayüzünü uygulayan bir sınıf oluştur.courseId(String),title(String),instructor(Instructor) ve kayıtlı Student nesnelerinden oluşan bir ArrayList için private alanlar ekle. Yapıcı courseId, title ve instructor değerlerini alır. Öğrenciyi listeye eklemek, öğrencininenroll(Student student)yöntemini bu kursun ID'siyle çağırmak ve true döndürmek içinaddCourse()yöntemini uygula.getEnrolledCount()yöntemini uygula. Kurs ID'sini değişmez köşeli parantezler içinde, ardından başlığı ve eğitmenin adını döndüren birgetDetails()yöntemi ekle; bu değer"[" + courseId + "] " + title + " by " + instructorNameolarak oluşturulmalıdır.Main.java: Platformunu oluştur! Virgülle ayrılmış bir komut dizisi alacaksın:ADD_INSTRUCTOR:id:name:specialtyADD_STUDENT:id:nameADD_COURSE:courseId:title:instructorIdENROLL:studentId:courseIdINFO:userId
Eğitmen, öğrenci ve kurs koleksiyonlarını tut. Her komutu işle ve şunları yazdır:
- ADD_INSTRUCTOR:
Instructor added: [name] - ADD_STUDENT:
Student added: [name] - ADD_COURSE:
Course added: [title] - ENROLL:
[studentName] enrolled in [courseTitle] - INFO: Kullanıcının
toString()çıktısını yazdır
Tüm komutlardan sonra
--- Platform Summary ---ifadesini, her kursun ayrıntıları ve kayıt sayısıyla birlikte[courseDetails] - [count] student(s)biçiminde yazdır.
Bir girdi alacaksın: virgülle ayrılmış komut dizisi.
Örneğin, girdi 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 olduğunda çıktın şöyle olur:
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)Bu meydan okuma; kalıtım (User hiyerarşisi), arayüzler (Enrollable), çok biçimlilik (kendi toString uygulamalarına sahip farklı kullanıcı türleri) ve kapsüllemeyi (kontrollü erişime sahip private alanlar) uyumlu bir sistemde bir araya getirir!
Kendin dene
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: Eğitmenleri, öğrencileri ve kursları saklamak için koleksiyonlar oluştur
// İpucu: Kolay arama için anahtar olarak id ile HashMap kullan
// TODO: Bireysel komutları almak için girdiyi virgülle ayır
// TODO: Her komutu işle:
// - 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 -> Öğrenciyi kursa kaydet, "[studentName] enrolled in [courseTitle]" yazdır
// - INFO:userId -> Kullanıcıyı (öğrenci veya eğitmen) bul ve toString() metodunu yazdır
// TODO: After processing all commands, print "--- Platform Summary ---"
// TODO: Her kurs için "[courseDetails] - [count] student(s)" yazdır
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1OOP Temelleri
Harici DosyalarOOP'ye GirişSınıflar ve Nesnelerthis Anahtar KelimesiMetotlarAlanlar (Öznitelikler)Yapıcı MetotYapıcı Metot Aşırı YüklemeÖzet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtım (extends)super Anahtar KelimesiMetot Geçersiz Kılma (@Override)Yapıcı Metot ZincirlemeObject SınıfıTekli ve Çok Seviyeli KalıtımNeden Çoklu Sınıf Kalıtımı Yok?Özet - Çalışan Hiyerarşisi7Özel Metotlar ve Object Sınıfı
toString() Metoduequals() ve hashCode()clone() MetoducompareTo() ve ComparableComparator ArayüzüÖzet - Özel Sıralama2Erişim Belirleyiciler ve Kapsülleme
Erişim Seviyelerine Genel BakışGetter ve Setter MetotlarıBilgi Gizlemefinal Anahtar KelimesiÖzet - Banka Hesabı Yöneticisi5Polimorfizm
Metot Aşırı Yükleme TemelleriMetot Geçersiz Kılma (Çalışma Zamanı)Upcasting ve Downcastinginstanceof OperatörüSoyut Sınıflar ve MetotlarÖzet - Şekil Hesaplayıcı8İleri Düzey OOP Kavramları
Kompozisyon vs KalıtımAgregasyon vs KompozisyonDahili, Yuvalanmış ve Anonim SınıflarEnum'lar ve Enum MetotlarıRecords (Java 16+)Sealed Classes (Java 17+)11Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişSingleton KalıbıFactory KalıbıBuilder KalıbıObserver KalıbıStrategy Kalıbı14Final Meydan Okumaları
E-Öğrenme PlatformuBankacılık SistemiOyun Karakteri GeliştirmeAraç Kiralama Servisi3Sınıf Özellikleri ve Statik Üyeler
Instance ve Statik DeğişkenlerStatik MetotlarStatik BloklarSabitler (static final)Özet - Sayaç ve Utility6Arayüzler ve Soyut Sınıflar
Arayüzlere GirişArayüzleri UygulamaÇoklu Arayüz UygulamaArayüzlerde Default ve StaticSoyut Sınıflar ve ArayüzlerFonksiyonel ArayüzlerÖzet - Ödeme Sistemi9Generics
Generics'e GirişGeneric SınıflarGeneric MetotlarSınırlandırılmış Tip ParametreleriWildcard'lar (?, extends, super)Özet - Generic Container12Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit KalıbıYineleyici KalıbıKendi başına pratik yap: Online Java derleyicisi