Repaso: directorio del personal
Parte de la sección Programación orientada a objetos del Journey de Kotlin de Coddy. Lección 21 de 57.
Desafío
IntermedioConstruye un directorio de personal como una jerarquía de clases.
Person(name)es abstracta. Declararole()como abstracto e implementacard(), que devuelveAda (staff in sales)y no puede sobrescribirse.Staff(name, department)es abierta; su rol esstaff in sales.Manager(name, department)extiendeStaffy mantiene un equipo privado.hire(member)devuelvetruey añade al miembro cuando este trabaja en el mismo departamento, no es el gerente y aún no está en el equipo, y devuelvefalseen cualquier otro caso. Su rol es el rol deStaffseguido de, 2 reports(usasuper).Contractor(name, days)extiendePerson; su rol escontractor for 30 days.
El código proporcionado lee los comandos staff Ada sales, manager Bo sales, contractor Cy 30 o hire Bo Ada (imprime hired o refused, también cuando se desconoce un nombre), después imprime la tarjeta de cada persona en el orden en que fueron añadidas.
Tu código debe estar en Person.kt, Staff.kt, Manager.kt y Contractor.kt. Main.kt contiene el código proporcionado de entrada/salida y no se puede editar.
Pruébalo tú mismo
fun main() {
// Código de entrada/salida suministrado: mantenlo tal como está
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())
}
Todas las lecciones de Programación orientada a objetos
1Clases y objetos
Trabajar con archivosDefinir clasesConstructores primariosBloques init y validaciónConstructores secundariosRepaso - Tarjeta de biblioteca4Herencia
Clases abiertas y subclasesSobrescritura de miembrossuper y constructoresClases abstractasRepaso: directorio del personal2Propiedades y encapsulación
Accesores personalizadosModificadores de visibilidadSetters privadoslazy y lateinitRepaso: cuenta bancaria5Interfaces
Declaración de interfacesMétodos predeterminadosInterfaces múltiplesInterfaces como tiposRepaso: métodos de pago8Genéricos
Funciones genéricasClases genéricasRestricciones de tiposVariancia con in y outRepaso - Cola de prioridad11Proyecto: Gestión de biblioteca
Libros y miembrosPréstamo de librosPractica por tu cuenta: Playground de Kotlin