Menu
Coddy logo textTech

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.

challenge icon

Desafío

Intermedio

Construye un directorio de personal como una jerarquía de clases.

  • Person(name) es abstracta. Declara role() como abstracto e implementa card(), que devuelve Ada (staff in sales) y no puede sobrescribirse.
  • Staff(name, department) es abierta; su rol es staff in sales.
  • Manager(name, department) extiende Staff y mantiene un equipo privado. hire(member) devuelve true y añade al miembro cuando este trabaja en el mismo departamento, no es el gerente y aún no está en el equipo, y devuelve false en cualquier otro caso. Su rol es el rol de Staff seguido de , 2 reports (usa super).
  • Contractor(name, days) extiende Person; su rol es contractor 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

Practica por tu cuenta: Playground de Kotlin