Récapitulatif – Hiérarchie des employés
Fait partie de la section Programmation orientée objet du Journey GDScript de Coddy. Leçon 20 sur 65.
Défi
MoyenCréez la hiérarchie de classes d’une entreprise répartie sur cinq fichiers.
Person:person_nameetage, définis par le constructeur.introduce()renvoieHi, I'm NAME, AGE years old.EmployeeétendPersonet ajouteemployee_id(String) etsalary(annuel, int). Redéfinissezintroduce()pour ajouterMy employee ID is ID.après le texte du parent.monthly_pay()renvoie le salaire divisé par12.0.ManagerétendEmployeeet ajoutedepartment. Sonmonthly_pay()correspond au salaire mensuel de l’employé multiplié par1.2, etmanage_team()renvoieManaging the DEPARTMENT department.EngineerétendEmployeeet ajoutelanguage.code()renvoieCoding in LANGUAGE.Payrollpossède deux fonctions statiques.role(p)renvoieManager,Engineer,EmployeeouPerson, la classe la plus spécifique dep.total_monthly(people)renvoie la somme desmonthly_pay()des personnes qui sont des employés (y compris les managers et les ingénieurs).
Chaque constructeur transmet les valeurs du parent à super(), et chaque redéfinition qui étend le résultat du parent utilise super().
Le code fourni lit le nombre de personnes qui suivent, puis une ligne par personne : person NAME AGE, employee NAME AGE ID SALARY, manager NAME AGE ID SALARY DEPARTMENT ou engineer NAME AGE ID SALARY LANGUAGE. Pour chaque personne, il affiche le rôle entre crochets et introduce(), le salaire mensuel pour les employés, manage_team() ou code() le cas échéant, puis le total à la fin. Pour employee Alice 35 E123 60000 et manager Bob 45 M54 85000 Marketing, il affiche :
[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.00Votre code va dans person.gd, employee.gd, manager.gd, engineer.gd et payroll.gd. main.gd contient le code d’entrée/sortie fourni et ne peut pas être modifié.
Essayez vous-même
extends Node
func _ready():
# Code d'entrée/sortie fourni : conservez-le tel quel
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))
Toutes les leçons de Programmation orientée objet
1Fondamentaux de la POO
Fichiers externesIntroduction à la POOClasses et objetsLe mot-clé selfMéthodesPropriétésConstructeur (_init)Récapitulatif - Calculatrice simple4Polymorphisme
Retour sur la redéfinition des méthodesTypage canardClasses et méthodes abstraitesConception d’interfacesRécapitulatif – Calculateur de formes7Signaux
Qu’est-ce qu’un signal ?Déclarer et émettreSe connecter aux signauxSignaux avec argumentsRécapitulatif - système de santé10Patrons de conception, partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode modèlePatron ÉtatPatron Composite2Propriétés de classe
Variables d’instance et variables statiquesFonctions statiquesSetters de propriétésGetters de propriétésPrivé par conventionRécapitulatif - Gestionnaire de comptes bancaires5Encapsulation
Membres publics et privésValidation avec les méthodes setterMasquage de l’informationPropriétés en lecture seuleRécapitulatif - Système de dossiers étudiants8Concepts avancés de la POO
Composition ou héritageClasses internesLes nœuds comme composantsRefCounted ou NodeEnums dans les classes3Héritage
Héritage de baseLe mot-clé superRedéfinition de méthodesChaînes d’héritageVérifier les types avec isRécapitulatif – Hiérarchie des employés6Méthodes spéciales
Introduction aux méthodes virtuellesLa méthode _to_stringItérateurs personnalisésRécapitulatif – Liste personnalisée9Patrons de conception, partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FactoryPatron ObserverPatron StrategyEntraînez-vous par vous-même : Compilateur GDScript en ligne