Повторение — иерархия сотрудников
Часть раздела Объектно-ориентированное программирование путешествия по 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Основы ООП
Внешние файлыВведение в ООПКлассы и объектыКлючевое слово selfМетодыСвойстваКонструктор (_init)Повторение: простой калькулятор4Полиморфизм
Переопределение методов: повторениеУтиная типизацияАбстрактные классы и методыПроектирование интерфейсовПовторение — калькулятор фигур7Сигналы
Что такое сигнал?Объявление и отправкаПодключение к сигналамСигналы с аргументамиПовторение — система здоровья10Паттерны проектирования. Часть 2
Паттерн «Команда»Паттерн «Адаптер»Паттерн «Декоратор»Паттерн «Шаблонный метод»Паттерн «Состояние»Паттерн «Компоновщик»2Свойства классов
Переменные экземпляра и классаСтатические функцииСеттеры свойствГеттеры свойствПриватность по соглашениюПовторение — менеджер банковского счёта5Инкапсуляция
Открытые и закрытые членыПроверка данных с помощью сеттеровСокрытие информацииСвойства только для чтенияПовторение — система учета студентов8Продвинутые концепции ООП
Композиция и наследованиеВнутренние классыУзлы как компонентыRefCounted и NodeПеречисления в классах11Проект: Управление библиотекой
Обзор проектаКлассы книг и пользователей3Наследование
Основы наследованияКлючевое слово superПереопределение методовЦепочки наследованияПроверка типов с помощью isПовторение — иерархия сотрудников6Специальные методы
Введение в виртуальные методыМетод _to_stringПользовательские итераторыПовторение: пользовательский список9Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн «Одиночка»Паттерн «Фабрика»Паттерн «Наблюдатель»Паттерн «Стратегия»Потренируйтесь самостоятельно: Онлайн-компилятор GDScript