Menu
Coddy logo textTech

Платформа онлайн-обучения

Часть раздела Объектно-ориентированное программирование путешествия по Dart на Coddy — урок 107 из 110.

challenge icon

Задание

Легко

Давайте создадим платформу для электронного обучения (E-Learning Platform), которая объединит все концепции ООП, которые вы освоили в этом курсе. Вы создадите систему, которая управляет пользователями, курсами и регистрациями, используя абстрактные классы, наследование, примеси (mixins) и инкапсуляцию.

Ваша платформа будет организована в пяти файлах:

  • user.dart: Создайте абстрактный класс User с приватными полями _id (String) и _name (String), а также публичными геттерами. Включите абстрактный метод String getRole(), который должны реализовать подклассы. Переопределите toString(), чтобы он возвращал [role] name (id), где role берется из getRole().
  • student.dart: Создайте класс Student, который расширяет User. Студенты должны использовать примесь ProgressTracking (определенную в этом же файле), которая предоставляет приватное целое число _completedLessons (начиная с 0) с геттером, а также методы completeLesson() для его увеличения и getProgressReport(), который возвращает Completed X lessons. Класс Student должен реализовать getRole(), чтобы он возвращал Student.
  • instructor.dart: Создайте класс Instructor, который расширяет User. У инструкторов есть приватный список _coursesCreated (список строк, представляющих названия курсов). Включите метод 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 урока, и выведите отчет о его прогрессе. Создайте регистрацию (enrollment) для 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: Создайте инструктора с id "I001" и именем "Dr. Smith"
  
  // TODO: Пусть инструктор создаст два курса: "Dart Fundamentals" и "Advanced OOP"
  
  // TODO: Выведите инструктора (используется toString())
  
  // TODO: Выведите "Courses created: X", где X — это courseCount
  
  // TODO: Создайте студента с id "S001" и именем "Alice"
  
  // TODO: Выведите студента
  
  // TODO: Пусть студент завершит 3 урока (вызовите completeLesson() 3 раза)
  
  // TODO: Выведите отчет об успеваемости студента
  
  // TODO: Создайте запись о зачислении (enrollment) для Alice (S001) на курс "Dart Fundamentals"
  
  // TODO: Выведите запись о зачислении
  
  // TODO: Отметьте зачисление как завершенное
  
  // TODO: Снова выведите запись о зачислении
}

Все уроки раздела Объектно-ориентированное программирование