在线学习平台
本课属于 Coddy Dart 学习旅程的“面向对象编程”单元。第 107 课,共 110 课。
挑战
简单让我们来构建一个电子学习平台,把你在本课程中掌握的所有 OOP 概念结合起来。你将使用抽象类、继承、混入和封装,创建一个管理用户、课程和选课信息的系统。
你的平台将由 5 个文件组成:
user.dart:创建一个抽象User类,其中包含私有字段_id(字符串)和_name(字符串),并为它们提供公开的 getter。添加一个抽象方法String getRole(),要求子类实现。重写toString(),使其返回[role] name (id),其中 role 的值来自getRole()。student.dart:创建一个继承自User的Student类。学生应使用此文件中定义的ProgressTracking混入。该混入提供一个私有整数_completedLessons(初始值为 0)及其 getter,还提供方法completeLesson()(用于递增该值)和getProgressReport()(返回Completed X lessons)。Student类应实现getRole(),并返回Student。instructor.dart:创建一个继承自User的Instructor类。讲师有一个私有列表_coursesCreated(由表示课程标题的字符串组成)。添加方法createCourse(String title),将标题添加到列表中并返回该标题。实现getRole(),使其返回Instructor。添加 gettercourseCount,使其返回已创建课程的数量。enrollment.dart:创建一个Enrollment类,用于跟踪学生的课程选课信息。该类应包含studentId(字符串)、courseName(字符串)和私有布尔值_isCompleted(默认值为 false),并为该布尔值提供 getter。添加方法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: 创建一名 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: 为 Alice (S001) in "Dart Fundamentals" 创建一条选课记录
// TODO: 打印选课记录
// TODO: 将选课记录标记为已完成
// TODO: 再次打印选课记录
}
面向对象编程中的所有课
自己练习: Dart 在线编译器