Платформа онлайн-обучения
Часть раздела Объектно-ориентированное программирование путешествия по Dart на Coddy — урок 107 из 110.
Задание
ЛегкоДавайте создадим платформу для электронного обучения (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: Снова выведите запись о зачислении
}
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыБиблиотеки и импортВведение в ООПКлассы и объектыКлючевое слово thisМетодыПеременные экземпляраОсновы конструкторовИтоги — Простой калькулятор4Null-безопасность
Введение в Null-безопасностьNullable и Non-Nullable типыОператоры ? и !Ключевое слово Late и Null-безопасностьNull-aware операторыNull-безопасность в классахИтоги — Система профилей пользователей7Абстрактные классы и интерфейсы
Абстрактные классыАбстрактные методыИнтерфейсы в DartНеявные интерфейсыРеализация против наследованияМножественные интерфейсыИтоги — Калькулятор фигур10Коллекции и обобщения
Обзор List, Set, MapТипобезопасные коллекцииОбобщенные классыОбобщенные методыОграничения обобщенийIterable и IteratorИтоги: Обобщенное хранилище13Продвинутые концепции ООП
Композиция против наследованияМетоды расширенияВызываемые классыЗапечатанные классы (Dart 3)Записи (Dart 3)Паттерны и сопоставление (3.0)Перечисления с методами16Проект: Управление библиотекой
Обзор проектаКлассы Book и User2Конструкторы в Dart
Конструктор по умолчаниюИменованные конструкторыСписки инициализацииКонстантные конструкторыФабричные конструкторыПеренаправляющие конструкторыИтоги — Shape Builder5Инкапсуляция
Публичные и приватные членыСоглашение о префиксе _Приватность на уровне библиотекГеттеры и сеттеры: подробный разборСкрытие данныхИтоги — Записи о студентах8Mixins
Введение в MixinsСоздание MixinsИспользование нескольких MixinsКлючевое слово on в MixinsMixin и наследованиеMixin и интерфейсИтоги: Система животных11Специальные методы
Переопределение toString()Переопределение hashCode и ==Интерфейс ComparableМетод call()Переопределение noSuchMethodПовторение — Пользовательская коллекция14Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн SingletonПаттерн FactoryПаттерн ObserverПаттерн Strategy17Финальные испытания
Платформа онлайн-обученияБанковская системаСистема игровых персонажейСервис аренды транспорта3Свойства классов
Члены экземпляра и статические членыПоля Final и ConstПеременные LateСтатические методы и поляГеттеры и сеттерыИтоги — Менеджер банковского счета6Наследование
Основы наследованияКлючевое слово superПереопределение методовАннотация @overrideКлючевое слово final для классовКонструкторы и наследованиеИтоги: Иерархия сотрудников9Полиморфизм
Основы полиморфизмаПолиморфизм через интерфейсыПроверка типов во время выполненияОператоры is и asКлючевое слово covariantИтоги — Обработчик платежей12Асинхронное ООП
Futures и async/awaitОсновы StreamsКонтроллеры StreamАсинхронные конструкторыАсинхронность в методах классовИтоги — Data Fetcher15Паттерны проектирования. Часть 2
Паттерн КомандаПаттерн АдаптерПаттерн ДекораторПаттерн Шаблонный методПаттерн СостояниеПаттерн КомпоновщикПаттерн Репозиторий