Menu
Coddy logo textTech

Revisão - Diretório de Funcionários

Parte da seção Programação Orientada a Objetos do Journey de Kotlin da Coddy. Lição 21 de 57.

challenge icon

Desafio

Médio

Construa um diretório de funcionários como uma hierarquia de classes.

  • Person(name) é abstrata. Ela declara a role() abstrata e implementa card(), que retorna Ada (staff in sales) e não pode ser sobrescrita.
  • Staff(name, department) é aberta; sua função é staff in sales.
  • Manager(name, department) estende Staff e mantém uma equipe privada. hire(member) retorna true e adiciona o membro quando ele trabalha no mesmo departamento, não é o gerente e ainda não está na equipe; caso contrário, retorna false. Sua função é a função de Staff seguida por , 2 reports (use super).
  • Contractor(name, days) estende Person; sua função é contractor for 30 days.

O código fornecido lê os comandos staff Ada sales, manager Bo sales, contractor Cy 30 ou hire Bo Ada (ele imprime hired ou refused, inclusive quando um nome é desconhecido) e, em seguida, imprime o cartão de cada pessoa na ordem em que foram adicionadas.

Seu código deve estar em Person.kt, Staff.kt, Manager.kt e Contractor.kt. Main.kt contém o código fornecido de entrada/saída e não pode ser editado.

Experimente você mesmo

fun main() {
    // Código de entrada/saída fornecido: mantenha-o 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 as lições de Programação Orientada a Objetos

Pratique por conta própria: Playground de Kotlin