סיכום – היררכיית עובדים
חלק מהיחידה תכנות מונחה עצמים במסלול ה-GDScript של Coddy. שיעור 20 מתוך 65.
אתגר
בינוניבנו היררכיית מחלקות של חברה בחמישה קבצים.
Person:person_nameו-age, שנקבעים על ידי הבנאי.introduce()מחזירהHi, I'm NAME, AGE years old.Employeeיורשת מ-Personומוסיפהemployee_id(String) ו-salary(שנתי, int). דרסו אתintroduce()כדי להוסיףMy employee ID is ID.אחרי הטקסט של מחלקת האב.monthly_pay()מחזירה את המשכורת חלקי12.0.Managerיורשת מ-Employeeומוסיפהdepartment. הערך שלmonthly_pay()שלה הוא השכר של העובד כפול1.2, ו-manage_team()מחזירהManaging the DEPARTMENT department.Engineerיורשת מ-Employeeומוסיפהlanguage.code()מחזירהCoding in LANGUAGE.Payrollכוללת שתי פונקציות סטטיות.role(p)מחזירה אתManager,Engineer,EmployeeאוPerson— המחלקה הספציפית ביותר שלp.total_monthly(people)מחזירה את הסכום שלmonthly_pay()עבור האנשים שהם עובדים (כולל מנהלים ומהנדסים).
כל בנאי מעביר את הערכים של מחלקת האב אל super(), וכל דריסה שמרחיבה את התוצאה של מחלקת האב משתמשת ב-super().
הקוד שסופק קורא כמה אנשים מופיעים אחר כך, ואז שורה אחת לכל אחד: person NAME AGE, employee NAME AGE ID SALARY, manager NAME AGE ID SALARY DEPARTMENT או engineer NAME AGE ID SALARY LANGUAGE. עבור כל אדם הוא מדפיס את התפקיד בסוגריים מרובעים ואת introduce(), את השכר החודשי של עובדים, את manage_team() או את code() כאשר הן קיימות, ובסוף את הסכום הכולל. עבור employee Alice 35 E123 60000 ו-manager Bob 45 M54 85000 Marketing יודפס:
[Employee] Hi, I'm Alice, 35 years old. My employee ID is E123.
Monthly pay: 5000.00
[Manager] Hi, I'm Bob, 45 years old. My employee ID is M54.
Monthly pay: 8500.00
Managing the Marketing department.
Total monthly payroll: 13500.00הקוד שלכם ייכנס לקבצים person.gd, employee.gd, manager.gd, engineer.gd ו-payroll.gd. הקובץ main.gd מכיל את קוד הקלט/פלט שסופק ואי אפשר לערוך אותו.
נסו בעצמכם
extends Node
func _ready():
# קוד קלט/פלט שסופק: יש להשאיר אותו כפי שהוא
var count := int(OS.read_string_from_stdin())
var people: Array[Person] = []
for i in count:
var p := OS.read_string_from_stdin().split(" ")
if p[0] == "manager":
people.append(Manager.new(p[1], int(p[2]), p[3], int(p[4]), p[5]))
elif p[0] == "engineer":
people.append(Engineer.new(p[1], int(p[2]), p[3], int(p[4]), p[5]))
elif p[0] == "employee":
people.append(Employee.new(p[1], int(p[2]), p[3], int(p[4])))
else:
people.append(Person.new(p[1], int(p[2])))
for person in people:
print("[%s] %s" % [Payroll.role(person), person.introduce()])
if person is Employee:
print("Monthly pay: %.2f" % (person as Employee).monthly_pay())
if person is Manager:
print((person as Manager).manage_team())
elif person is Engineer:
print((person as Engineer).code())
print("Total monthly payroll: %.2f" % Payroll.total_monthly(people))
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים
קבצים חיצונייםמבוא ל-OOPמחלקות לעומת אובייקטיםמילת המפתח selfמתודותמאפייניםבנאי (_init)חזרה – מחשבון פשוט2מאפייני מחלקה
משתני מופע לעומת משתנים סטטייםפונקציות סטטיותקובעי מאפייניםמאחזרי מאפייניםפרטיים לפי מוסכמהסיכום – מנהל חשבון בנק5כימוס
איברים ציבוריים ופרטייםאימות באמצעות Settersהסתרת מידעמאפיינים לקריאה בלבדסיכום – מערכת לניהול רשומות תלמידים3ירושה
ירושה בסיסיתמילת המפתח superדריסת מתודותשרשראות ירושהבדיקת טיפוס באמצעות isסיכום – היררכיית עובדיםתרגלו בעצמכם: קומפיילר GDScript אונליין