Menu
CoddyTech

在线学习平台

本课属于 Coddy Dart 学习旅程的“面向对象编程”单元。第 107 课,共 110 课。

challenge icon

挑战

简单

让我们来构建一个电子学习平台,把你在本课程中掌握的所有 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。添加 getter courseCount,使其返回已创建课程的数量。
  • 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 在线编译器