Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

منصة التعليم الإلكتروني

جزء من قسم Object Oriented Programming في رحلة Dart على Coddy — الدرس 107 من 110.

challenge icon

التحدي

سهل

لنقم ببناء منصة تعليم إلكتروني (E-Learning Platform) تجمع بين جميع مفاهيم البرمجة كائنية التوجه (OOP) التي أتقنتها طوال هذه الدورة. ستقوم بإنشاء نظام يدير المستخدمين، الدورات، والتسجيلات باستخدام الفئات المجردة (abstract classes)، الوراثة (inheritance)، الـ mixins، والكبسلة (encapsulation).

سيتم تنظيم منصتك عبر خمسة ملفات:

  • user.dart: أنشئ فئة مجردة User تحتوي على حقول خاصة لـ _id (String) و _name (String)، مع دوال جلب (getters) عامة. قم بتضمين طريقة مجردة String getRole() يجب على الفئات الفرعية تنفيذها. قم بإعادة كتابة (Override) لـ toString() لتعيد [role] name (id) حيث يأتي role من getRole().
  • student.dart: أنشئ فئة Student ترث من User. يجب أن يستخدم الطلاب mixin يسمى ProgressTracking (يتم تعريفه في هذا الملف) يوفر متغيراً صحيحاً خاصاً _completedLessons (يبدأ بـ 0) مع دالة جلب، وطرق completeLesson() لزيادته و getProgressReport() التي تعيد Completed X lessons. يجب أن تنفذ فئة Student طريقة getRole() لتعيد Student.
  • instructor.dart: أنشئ فئة Instructor ترث من User. يمتلك المعلمون قائمة خاصة _coursesCreated (قائمة من Strings تمثل عناوين الدورات). قم بتضمين طريقة createCourse(String title) تضيف العنوان إلى القائمة وتعيد العنوان. قم بتنفيذ getRole() لتعيد Instructor. أضف دالة جلب courseCount تعيد عدد الدورات التي تم إنشاؤها.
  • enrollment.dart: أنشئ فئة Enrollment تتبع تسجيل الطالب في دورة ما. يجب أن تحتوي على studentId (String)، و courseName (String)، ومتغير بوليني خاص _isCompleted (افتراضياً false) مع دالة جلب. قم بتضمين طريقة markComplete() تجعل حالة الإكمال true. قم بإعادة كتابة toString() لتعيد studentId enrolled in "courseName" - Status: Completed أو Status: In Progress بناءً على حالة الإكمال.
  • main.dart: اجمع كل شيء معاً. أنشئ معلماً (I001, Dr. Smith) واجعله ينشئ دورتين: Dart Fundamentals و Advanced OOP. اطبع بيانات المعلم وعدد دوراته كـ Courses created: X. أنشئ طالباً (S001, Alice)، اطبعه، ثم اجعله يكمل 3 دروس واطبع تقرير تقدمه. أنشئ تسجيلاً لـ Alice في Dart Fundamentals، اطبعه، ثم علمه كمكتمل، واطبعه مرة أخرى.

المخرجات المتوقعة:

[Instructor] Dr. Smith (I001)
Courses created: 2
[Student] Alice (S001)
Completed 3 lessons
S001 enrolled in "Dart Fundamentals" - Status: In Progress
S001 enrolled in "Dart Fundamentals" - Status: Completed

جرّب بنفسك

import 'user.dart';
import 'student.dart';
import 'instructor.dart';
import 'enrollment.dart';

void main() {
  // TODO: "Dr. Smith" والاسم "I001" قم بإنشاء محاضر بالمعرف
  
  // TODO: "Advanced OOP" و "Dart Fundamentals" اجعل المحاضر ينشئ دورتين:
  
  // TODO: (toString() اطبع المحاضر (يستخدم
  
  // TODO: courseCount حيث تمثل X "Courses created: X" اطبع
  
  // TODO: "Alice" والاسم "S001" قم بإنشاء طالب بالمعرف
  
  // TODO: اطبع الطالب
  
  // TODO: (ثلاث مرات completeLesson() اجعل الطالب يكمل 3 دروس (استدعِ
  
  // TODO: اطبع تقرير تقدم الطالب
  
  // TODO: "Dart Fundamentals" في (S001) قم بإنشاء تسجيل لـ أليس
  
  // TODO: اطبع التسجيل
  
  // TODO: حدد التسجيل كمكتمل
  
  // TODO: اطبع التسجيل مرة أخرى
}

جميع دروس Object Oriented Programming