온라인 학습 플랫폼
Coddy GDScript 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 65개 중 62번째.
챌린지
어려움이러닝 플랫폼의 클래스인 강좌, 학생, 강사를 만들어 보세요. 학생과 강사는 모두 사람이므로 부모 클래스를 공유합니다.
객체들은 서로를 참조하면 안 됩니다. 강좌에는 학생의 이메일과 강사의 이름이 저장되고, 학생과 강사에는 강좌의 제목이 저장됩니다. 강좌가 필요한 메서드는 강좌를 인수로 받습니다.
person.gd의 Person: 생성자는 person_name과 email을 받아 저장합니다. _to_string()은 NAME (EMAIL)을 반환합니다.
course.gd의 Course:
- 속성:
title,max_capacity,instructor_name(초깃값은""), 그리고Array[String]타입의student_emails와completed_emails. - 생성자는 제목과 정원을 받으며, 정원의 기본값은
30입니다. add_student()가 마지막 빈자리를 채울 때 발생하는 신호course_full(title: String).add_student(email) -> bool: 강좌가 만석이거나 해당 이메일의 학생이 이미 등록되어 있으면false를 반환합니다. 그렇지 않으면 이메일을 추가하고true를 반환합니다.remove_student(email) -> bool: 현재 수강 중인 학생을 삭제합니다. 해당 이메일이 학생의 이메일이 아니면false를 반환합니다.mark_completed(email) -> bool: 현재 수강 중인 학생을completed_emails로 옮깁니다. 해당 이메일이 현재 수강 중인 학생의 이메일이 아니면false를 반환합니다.assign_instructor(instructor) -> bool: 강사의 이름을 저장하거나, 강좌에 이미 강사가 있으면false를 반환합니다._to_string()은TITLE: N/CAPACITY students, M completed, instructor: NAME을 반환하며, 강사가 없으면none을 사용합니다.
student.gd의 Student는 Person을 상속하고 생성자는 그대로 유지합니다. 제목을 저장하는 Array[String] 두 개, enrolled와 completed를 가집니다.
enroll(course: Course) -> bool: 강좌가 이미enrolled또는completed에 있거나course.add_student()가 거부하면false를 반환합니다. 그렇지 않으면 제목을 추가하고true를 반환합니다.unenroll(course: Course) -> bool: 수강 등록된 강좌에만 적용됩니다. 강좌에서 학생을 삭제하고enrolled에서 제목을 삭제합니다.complete_course(course: Course) -> bool: 수강 등록된 강좌에만 적용됩니다.course.mark_completed()를 호출하고 제목을enrolled에서completed로 옮깁니다._to_string()은Student,Person의 텍스트, 그리고: N enrolled, M completed를 반환합니다.
instructor.gd의 Instructor는 Person을 상속합니다. 생성자는 person_name, email, expertise를 받으며, Array[String] 타입의 course_titles를 가집니다.
assign_to_course(course: Course) -> bool: 자신의 이름을 사용해course.assign_instructor()를 호출합니다. 성공하면 제목을 추가하고true를 반환합니다._to_string()은Instructor,Person의 텍스트,, EXPERTISE:와,로 결합한 제목을 반환하며, 제목이 없으면no courses를 반환합니다.
제공된 코드는 필드가 |로 구분된 명령을 읽고, course_full에 연결하여 Course full: TITLE을 출력합니다. 다음 입력의 경우:
course Python 101|2
course Data Science
student Ana|ana@mail.com
student Ben|ben@mail.com
instructor Grace Hopper|grace@mail.com|Compilers
enroll ana@mail.com|Python 101
enroll ben@mail.com|Python 101
enroll ben@mail.com|Data Science
assign grace@mail.com|Python 101
report출력은 다음과 같습니다.
Enroll Ana in Python 101: true
Course full: Python 101
Enroll Ben in Python 101: true
Enroll Ben in Data Science: true
Assign Grace Hopper to Python 101: true
Python 101: 2/2 students, 0 completed, instructor: Grace Hopper
Data Science: 1/30 students, 0 completed, instructor: none
Student Ana (ana@mail.com): 1 enrolled, 0 completed
Student Ben (ben@mail.com): 2 enrolled, 0 completed
Instructor Grace Hopper (grace@mail.com), Compilers: Python 101코드는 person.gd, course.gd, student.gd, instructor.gd에 작성합니다. main.gd에는 제공된 입력/출력 코드가 있으며 수정할 수 없습니다.
직접 해보기
extends Node
func _ready():
# 제공된 입력/출력 코드: 그대로 유지하세요
var courses := {}
var people := {}
var line := OS.read_string_from_stdin()
while line != "":
var parts := line.split(" ", true, 1)
var f: PackedStringArray = parts[1].split("|") if parts.size() > 1 else PackedStringArray()
match parts[0]:
"course":
var course: Course
if f.size() > 1:
course = Course.new(f[0], int(f[1]))
else:
course = Course.new(f[0])
course.course_full.connect(func(title): print("Course full: ", title))
courses[f[0]] = course
"student":
people[f[1]] = Student.new(f[0], f[1])
"instructor":
people[f[1]] = Instructor.new(f[0], f[1], f[2])
"enroll":
var ok: bool = people[f[0]].enroll(courses[f[1]])
print("Enroll ", people[f[0]].person_name, " in ", f[1], ": ", ok)
"unenroll":
var ok: bool = people[f[0]].unenroll(courses[f[1]])
print("Unenroll ", people[f[0]].person_name, " from ", f[1], ": ", ok)
"complete":
var ok: bool = people[f[0]].complete_course(courses[f[1]])
print(people[f[0]].person_name, " completes ", f[1], ": ", ok)
"assign":
var ok: bool = people[f[0]].assign_to_course(courses[f[1]])
print("Assign ", people[f[0]].person_name, " to ", f[1], ": ", ok)
"report":
for title in courses:
print(courses[title])
for email in people:
print(people[email])
line = OS.read_string_from_stdin()
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: 온라인 GDScript 컴파일러