이러닝 플랫폼
Coddy Dart 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 110개 중 107번째.
챌린지
쉬움이 과정에서 익힌 모든 OOP 개념을 하나로 모으는 E-Learning 플랫폼을 구축해 보겠습니다. 추상 클래스, 상속, 믹스인(mixin), 캡슐화를 사용하여 사용자, 강좌 및 등록을 관리하는 시스템을 만들게 됩니다.
플랫폼은 다음 다섯 개의 파일로 구성됩니다:
user.dart:_id(String) 및_name(String)에 대한 프라이빗 필드와 퍼블릭 게터(getter)를 가진 추상 클래스User를 생성하세요. 하위 클래스에서 반드시 구현해야 하는 추상 메서드String getRole()을 포함하세요.toString()을 오버라이드하여[role] name (id)형식을 반환하도록 하세요. 여기서 role은getRole()에서 가져옵니다.student.dart:User를 상속받는Student클래스를 생성하세요. 학생은 이 파일에 정의된ProgressTracking믹스인을 사용해야 합니다. 이 믹스인은 0으로 시작하는 프라이빗_completedLessons정수 필드와 게터, 이를 증가시키는completeLesson()메서드, 그리고Completed X lessons를 반환하는getProgressReport()메서드를 제공합니다.Student클래스는getRole()을 구현하여Student를 반환해야 합니다.instructor.dart:User를 상속받는Instructor클래스를 생성하세요. 강사는 프라이빗 리스트_coursesCreated(강좌 제목을 나타내는 String 리스트)를 가집니다. 리스트에 제목을 추가하고 해당 제목을 반환하는createCourse(String title)메서드를 포함하세요.getRole()을 구현하여Instructor를 반환하세요. 생성된 강좌 수를 반환하는courseCount게터를 추가하세요.enrollment.dart: 학생의 강좌 등록을 추적하는Enrollment클래스를 생성하세요.studentId(String),courseName(String), 그리고 기본값이 false인 프라이빗_isCompleted불리언 필드와 게터를 가져야 합니다. 완료 상태를 true로 설정하는markComplete()메서드를 포함하세요.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개의 레슨을 완료하게 하고 진행 보고서(progress report)를 출력하세요. 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"인 강사(instructor)를 생성하세요.
// TODO: 강사가 "Dart Fundamentals"와 "Advanced OOP"라는 두 개의 강의를 생성하도록 하세요.
// TODO: 강사 정보를 출력하세요 (toString() 사용)
// TODO: "Courses created: X"를 출력하세요 (X는 courseCount입니다)
// TODO: ID가 "S001"이고 이름이 "Alice"인 학생(student)을 생성하세요.
// TODO: 학생 정보를 출력하세요.
// TODO: 학생이 3개의 레슨을 완료하도록 하세요 (completeLesson()을 3번 호출)
// TODO: 학생의 진도 보고서(progress report)를 출력하세요.
// TODO: "Dart Fundamentals" 강의에 Alice(S001)를 등록(enrollment)시키세요.
// TODO: 등록 정보를 출력하세요.
// TODO: 등록 상태를 완료(complete)로 표시하세요.
// TODO: 등록 정보를 다시 출력하세요.
}