Récapitulatif – Annuaire du personnel
Fait partie de la section Programmation orientée objet du Journey Kotlin de Coddy. Leçon 21 sur 57.
Défi
MoyenConstruisez un annuaire du personnel sous forme de hiérarchie de classes.
Person(name)est abstraite. Elle déclarerole()comme abstraite et implémentecard(), qui renvoieAda (staff in sales)et ne peut pas être redéfinie.Staff(name, department)est ouverte ; son rôle eststaff in sales.Manager(name, department)étendStaffet conserve une équipe privée.hire(member)renvoietrueet ajoute le membre lorsque celui-ci travaille dans le même service, n’est pas le manager et ne fait pas encore partie de l’équipe, et renvoiefalsedans les autres cas. Son rôle est le rôle deStaffsuivi de, 2 reports(utilisezsuper).Contractor(name, days)étendPerson; son rôle estcontractor for 30 days.
Le code fourni lit les commandes staff Ada sales, manager Bo sales, contractor Cy 30 ou hire Bo Ada (il affiche hired ou refused, également lorsqu’un nom est inconnu), puis affiche la fiche de chaque personne dans l’ordre où elles ont été ajoutées.
Votre code doit se trouver dans Person.kt, Staff.kt, Manager.kt et Contractor.kt. Main.kt contient le code d’entrée/sortie fourni et ne peut pas être modifié.
Essayez vous-même
fun main() {
// Code d'entrée/sortie fourni : le garder tel quel
val input = generateSequence(::readLine).toList()
val people = mutableListOf<Person>()
val staff = mutableMapOf<String, Staff>()
val managers = mutableMapOf<String, Manager>()
for (cmd in input) {
val p = cmd.split(" ")
when (p[0]) {
"staff" -> Staff(p[1], p[2]).also { people.add(it); staff[it.name] = it }
"manager" -> Manager(p[1], p[2]).also { people.add(it); staff[it.name] = it; managers[it.name] = it }
"contractor" -> people.add(Contractor(p[1], p[2].toInt()))
"hire" -> {
val boss = managers[p[1]]
val worker = staff[p[2]]
println(if (boss != null && worker != null && boss.hire(worker)) "hired" else "refused")
}
}
}
for (person in people) println(person.card())
}
Toutes les leçons de Programmation orientée objet
1Classes et objets
Travailler avec des fichiersDéfinir des classesConstructeurs primairesBlocs init et validationConstructeurs secondairesRécapitulatif - Carte de bibliothèque4Héritage
Classes ouvertes et sous-classesRedéfinition des membressuper et constructeursClasses abstraitesRécapitulatif – Annuaire du personnel2Propriétés et encapsulation
Accesseurs personnalisésModificateurs de visibilitéSetters privéslazy et lateinitRécapitulatif - Compte bancaire5Interfaces
Déclarer des interfacesMéthodes par défautInterfaces multiplesInterfaces en tant que typesRécapitulatif - Méthodes de paiement8Génériques
Fonctions génériquesClasses génériquesContraintes de typeVariance avec in et outRécapitulatif - File de priorité11Projet : Gestion de bibliothèque
Livres et membresEmprunter des livresEntraînez-vous par vous-même : Playground Kotlin