Menu
Coddy logo textTech

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!

challenge icon

Görev

Kolay

Bu 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 ile getEnrolledCount() 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) ve name (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 soyut getRole() yöntemi ekle.
  • Student.java: User sı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 ve addCourse(String courseId) ile getEnrolledCourseCount() yöntemlerini ekle. toString() yöntemini "Student: [name] ([enrolledCount] courses)" döndürecek şekilde geçersiz kıl.
  • Instructor.java: User sı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 ve toString() yöntemini "Instructor: [name] - [specialty]" döndürecek şekilde geçersiz kıl.
  • Course.java: Enrollable arayü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, öğrencinin enroll(Student student) yöntemini bu kursun ID'siyle çağırmak ve true döndürmek için addCourse() 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 bir getDetails() yöntemi ekle; bu değer "[" + courseId + "] " + title + " by " + instructorName olarak oluşturulmalıdır.
  • Main.java: Platformunu oluştur! Virgülle ayrılmış bir komut dizisi alacaksın:
    • ADD_INSTRUCTOR:id:name:specialty
    • ADD_STUDENT:id:name
    • ADD_COURSE:courseId:title:instructorId
    • ENROLL:studentId:courseId
    • INFO: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
    }
}
quiz iconKendini test et

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

Kendi başına pratik yap: Online Java derleyicisi