E-öğrenme Platformu
Coddy'nin Python Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 61 / 64.
Görev
ZorBu meydan okumada, nesne yönelimli bir e-öğrenme platformu sistemi uygulayacaksınız.
course.py-Coursesınıfını uygulayınstudent.py-Studentsınıfını uygulayıninstructor.py-Instructorsınıfını uygulayın
Kopya kağıdı
Bu ders, üç ana sınıfa sahip nesne yönelimli bir e-öğrenme platformu sisteminin uygulanmasına odaklanmaktadır:
- Course sınıfı - Platformdaki eğitim kurslarını temsil eder
- Student sınıfı - Kurslara kayıt olabilen öğrenenleri temsil eder
- Instructor sınıfı - Kurslar oluşturabilen ve yönetebilen öğretmenleri temsil eder
Sistem, gerçek dünya varlıklarını kendi özelliklerine ve yöntemlerine sahip sınıflar olarak modelleyerek nesne yönelimli programlama ilkelerini gösterir.
Kendin dene
from course import Course
from student import Student
from instructor import Instructor
# Test durumu işleyicisi
test_case = input()
if test_case == "course_creation":
# Farklı kapasitelerde kurslar oluşturmayı test et
course1 = Course("Python 101", "Introduction to Python", 20)
course2 = Course("Data Science", "Advanced data analysis techniques")
print(f"Course 1: {course1.title}, Max Capacity: {course1.max_capacity}")
print(f"Course 2: {course2.title}, Max Capacity: {course2.max_capacity}")
print(f"Initial student count: {len(course1.students)}")
elif test_case == "student_enrollment":
# Öğrenci kayıt sürecini test et
course = Course("Python 101", "Introduction to Python", 2)
student1 = Student("Alice", "alice@example.com")
student2 = Student("Bob", "bob@example.com")
student3 = Student("Charlie", "charlie@example.com")
# Öğrencileri kaydet
result1 = student1.enroll(course)
result2 = student2.enroll(course)
result3 = student3.enroll(course) # Başarısız olmalı (kapasite)
print(f"Enrollment 1 result: {result1}")
print(f"Enrollment 2 result: {result2}")
print(f"Enrollment 3 result: {result3}")
# Aynı öğrenciyi iki kez kaydetmeyi dene
result4 = student1.enroll(course)
print(f"Re-enrollment result: {result4}")
# Kurs ve öğrenci durumlarını kontrol et
print(f"Course has {len(course.students)} students")
print(f"Student 1 has {len(student1.enrolled_courses)} enrolled courses")
elif test_case == "student_unenrollment":
# Öğrenci kaydını silme sürecini test et
course = Course("Python 101", "Introduction to Python")
student = Student("Alice", "alice@example.com")
# Kaydet ve sonra kaydı sil
student.enroll(course)
print(f"Before unenroll: Course has {len(course.students)} students")
print(f"Before unenroll: Student has {len(student.enrolled_courses)} courses")
result = student.unenroll(course)
print(f"Unenrollment result: {result}")
print(f"After unenroll: Course has {len(course.students)} students")
print(f"After unenroll: Student has {len(student.enrolled_courses)} courses")
# Tekrar kaydı silmeyi dene
result = student.unenroll(course)
print(f"Second unenrollment result: {result}")
elif test_case == "course_completion":
# Kurs tamamlama sürecini test et
course = Course("Python 101", "Introduction to Python")
student = Student("Alice", "alice@example.com")
# Kaydol ve tamamla
student.enroll(course)
print(f"Before completion: Enrolled in {len(student.enrolled_courses)} courses")
print(f"Before completion: Completed {len(student.completed_courses)} courses")
result = student.complete_course(course)
print(f"Completion result: {result}")
print(f"After completion: Enrolled in {len(student.enrolled_courses)} courses")
print(f"After completion: Completed {len(student.completed_courses)} courses")
# Kurs durumunu kontrol et
print(f"Course has {len(course.students)} active students")
print(f"Course has {len(course.completed_students)} completed students")
elif test_case == "instructor_assignment":
# Eğitmen atamasını test et
course = Course("Python 101", "Introduction to Python")
instructor = Instructor("Dr. Smith", "smith@example.edu", "Computer Science")
print(f"Before assignment: Instructor has {len(instructor.courses)} courses")
print(f"Before assignment: Course instructor is {course.instructor}")
result = instructor.assign_to_course(course)
print(f"Assignment result: {result}")
print(f"After assignment: Instructor has {len(instructor.courses)} courses")
print(f"After assignment: Course instructor is {course.instructor.name}")
elif test_case == "course_management":
# Kurs kapasite yönetimini test et
course = Course("Limited Course", "Test capacity", 2)
student1 = Student("Alice", "alice@example.com")
student2 = Student("Bob", "bob@example.com")
student3 = Student("Charlie", "charlie@example.com")
# Kursu doldur
student1.enroll(course)
student2.enroll(course)
result = student3.enroll(course) # Başarısız olmalı
print(f"Enrolling to full course: {result}")
# Kaydı silerek yer aç
student1.unenroll(course)
result = student3.enroll(course) # Şimdi başarılı olmalı
print(f"Enrolling after unenrollment: {result}")
# Son durumu kontrol et
print(f"Final students in course: {len(course.students)}")
print(f"Students are: {[s.name for s in course.students]}")
elif test_case == "integrated_test":
# Tüm sistemin birlikte çalışmasını test et
# Kursları oluştur
python_course = Course("Python 101", "Introduction to Python", 3)
data_course = Course("Data Science", "Advanced data analysis", 2)
# Öğrencileri oluştur
alice = Student("Alice", "alice@example.com")
bob = Student("Bob", "bob@example.com")
charlie = Student("Charlie", "charlie@example.com")
# Eğitmeni oluştur
dr_smith = Instructor("Dr. Smith", "smith@example.edu", "Computer Science")
# Eğitmeni ata
dr_smith.assign_to_course(python_course)
dr_smith.assign_to_course(data_course)
# Öğrencileri kaydet
alice.enroll(python_course)
bob.enroll(python_course)
charlie.enroll(python_course)
alice.enroll(data_course)
bob.enroll(data_course) # Bu data_course'u doldurur
# Bir kursu tamamla
alice.complete_course(python_course)
# Sistem durumunu yazdır
print("System State:")
print(f"Python course has {len(python_course.students)} active students and {len(python_course.completed_students)} completed")
print(f"Data course has {len(data_course.students)} active students")
print(f"Dr. Smith teaches {len(dr_smith.courses)} courses")
print(f"Alice is enrolled in {len(alice.enrolled_courses)} courses and completed {len(alice.completed_courses)}")
print(f"Charlie is enrolled in {len(charlie.enrolled_courses)} courses")
elif test_case == "edge_cases":
# Uç durumları test et
course = Course("Small Course", "Test edge cases", 1)
student1 = Student("Alice", "alice@example.com")
student2 = Student("Bob", "bob@example.com")
# Tam kapasitede kaydı test et
result1 = student1.enroll(course)
result2 = student2.enroll(course) # Başarısız olmalı
print(f"Enrollment at capacity: {result1}")
print(f"Enrollment beyond capacity: {result2}")
# Öğrencinin kayıtlı olmadığı bir kursu tamamlamasını test et
other_course = Course("Other Course", "Not enrolled")
result3 = student1.complete_course(other_course)
print(f"Complete non-enrolled course: {result3}")
# Öğrencinin kayıtlı olmadığı bir kurstan kaydını silmesini test et
result4 = student2.unenroll(course)
print(f"Unenroll from non-enrolled course: {result4}")
# Bir eğitmeni yeniden atamayı test et
instructor1 = Instructor("Dr. Smith", "smith@example.edu", "Python")
instructor2 = Instructor("Dr. Jones", "jones@example.edu", "Java")
instructor1.assign_to_course(course)
print(f"First instructor: {course.instructor.name}")
instructor2.assign_to_course(course)
print(f"After reassignment: {course.instructor.name}")
elif test_case == "capacity_limits":
# Kapasite sınırlarını test et
zero_capacity = Course("Empty Course", "No students allowed", 0)
student = Student("Alice", "alice@example.com")
result1 = student.enroll(zero_capacity)
print(f"Enroll in zero-capacity course: {result1}")
large_capacity = Course("Huge Course", "Many students", 1000)
result2 = student.enroll(large_capacity)
print(f"Enroll in large-capacity course: {result2}")
print(f"Large course has capacity for {large_capacity.max_capacity} students")
elif test_case == "multiple_courses":
# Birden fazla kursu olan öğrenciyi test et
student = Student("Alice", "alice@example.com")
course1 = Course("Python 101", "Intro to Python")
course2 = Course("Java 101", "Intro to Java")
course3 = Course("C++ 101", "Intro to C++")
# Tüm kurslara kaydol
student.enroll(course1)
student.enroll(course2)
student.enroll(course3)
print(f"Enrolled in {len(student.enrolled_courses)} courses")
# Bazı kursları tamamla
student.complete_course(course1)
student.complete_course(course2)
print(f"After completion: Enrolled in {len(student.enrolled_courses)} courses")
print(f"After completion: Completed {len(student.completed_courses)} courses")
# Belirli kursları doğrula
enrolled_titles = [c.title for c in student.enrolled_courses]
completed_titles = [c.title for c in student.completed_courses]
print(f"Still enrolled in: {enrolled_titles}")
print(f"Completed: {completed_titles}")
elif test_case == "instructor_workload":
# Birden fazla kursu olan eğitmeni test et
instructor = Instructor("Dr. Smith", "smith@example.edu", ["Python", "Java", "C++"])
course1 = Course("Python 101", "Intro to Python")
course2 = Course("Java 101", "Intro to Java")
course3 = Course("C++ 101", "Intro to C++")
# Tüm kurslara ata
instructor.assign_to_course(course1)
instructor.assign_to_course(course2)
instructor.assign_to_course(course3)
print(f"Instructor teaches {len(instructor.courses)} courses")
course_titles = [c.title for c in instructor.courses]
print(f"Courses taught: {course_titles}")
# Eğitmenin her kursa düzgün şekilde atandığını doğrula
for i, course in enumerate([course1, course2, course3]):
print(f"Course {i+1} instructor: {course.instructor.name}")Object Oriented Programming bölümündeki tüm dersler
1OOP Temelleri
Harici DosyalarOOP'ye GirişSınıflar ve Nesnelerself ParametresiMetotlarÖzniteliklerYapıcı Metot (__init__)Özet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtımsuper() FonksiyonuMetot Geçersiz KılmaÇoklu KalıtımMetot Çözümleme SırasıÖzet - Çalışan Hiyerarşisi7Özel Metotlar
Sihirli Metotlara GirişOperatör Aşırı YüklemeKapsayıcı Sihirli MetotlarıÖzet - Özel Liste10Tasarım Kalıpları Bölüm 1
Tasarım kalıplarına girişSingleton KalıbıFactory KalıbıObserver KalıbıStrategy Kalıbı13Final Meydan Okumaları
E-öğrenme PlatformuBankacılık SistemiOyun Karakteri GeliştirmeAraç Kiralama Servisi5Çok Biçimlilik (Polymorphism)
Metot Geçersiz Kılmaya Yeniden BakışDuck TypingSoyut Sınıflar ve MetotlarArayüz TasarımıÖzet - Şekil Hesaplayıcı8İleri Düzey OOP Kavramları
Kompozisyon ve KalıtımMixinsStatik ve Sınıf MetotlarıSınıf DekoratörleriBağlam Yöneticileri11Tasarı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ı