مراجعة - التسلسل الهرمي للموظفين
جزء من قسم البرمجة كائنية التوجّه في رحلة 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)الفئة الأكثر تحديدًا لـp:ManagerأوEngineerأوEmployeeأوPerson. تُعيد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أساسيات البرمجة كائنية التوجه
الملفات الخارجيةمقدمة إلى البرمجة كائنية التوجهالفئات مقابل الكائناتالكلمة المفتاحية selfالأساليبالخصائصالمُنشئ (_init)مراجعة - آلة حاسبة بسيطة4تعدد الأشكال
إعادة النظر في تجاوز الأساليبكتابة الأنواع بأسلوب البطةالفئات والأساليب المجرّدةتصميم الواجهاتمراجعة - حاسبة الأشكال10أنماط التصميم، الجزء الثاني
نمط الأوامرنمط المحوّلنمط المُزيّننمط الطريقة القالبيةنمط الحالةالنمط المركّب2خصائص الأصناف
متغيرات الكائن مقابل المتغيرات الساكنةالدوال الساكنةمُعيِّنات الخصائصمُسترجِعات الخصائصخاص وفقًا للاتفاقيةمراجعة - مدير الحسابات البنكية5التغليف
الأعضاء العامة والخاصةالتحقق من الصحة باستخدام دوال الضبطإخفاء المعلوماتالخصائص للقراءة فقطمراجعة - نظام سجلات الطلاب8مفاهيم متقدمة في البرمجة كائنية التوجه
التركيب مقابل الوراثةالأصناف الداخليةالعُقد كمكوّناتRefCounted مقابل Nodeالتعدادات في الأصناف3الوراثة
الوراثة الأساسيةالكلمة المفتاحية superإعادة تعريف الأساليبسلاسل الوراثةالتحقق من الأنواع باستخدام isمراجعة - التسلسل الهرمي للموظفينتدرّب بنفسك: مترجم GDScript عبر الإنترنت