Menu
Coddy logo textTech

Riepilogo - Elenco del personale

Fa parte della sezione Programmazione orientata agli oggetti del percorso Kotlin di Coddy. Lezione 21 di 57.

challenge icon

Sfida

Medio

Crea un elenco del personale come gerarchia di classi.

  • Person(name) è astratta. Dichiara role() astratta e implementa card(), che restituisce Ada (staff in sales) e non può essere sovrascritta.
  • Staff(name, department) è aperta; il suo ruolo è staff in sales.
  • Manager(name, department) estende Staff e mantiene una squadra privata. hire(member) restituisce true e aggiunge il membro se lavora nello stesso reparto, non è il manager e non è ancora nella squadra, e restituisce false altrimenti. Il suo ruolo è quello di Staff seguito da , 2 reports (usa super).
  • Contractor(name, days) estende Person; il suo ruolo è contractor for 30 days.

Il codice fornito legge i comandi staff Ada sales, manager Bo sales, contractor Cy 30 o hire Bo Ada (stampa hired o refused, anche quando un nome è sconosciuto), quindi stampa la scheda di ogni persona nell'ordine in cui sono state aggiunte.

Il tuo codice va in Person.kt, Staff.kt, Manager.kt e Contractor.kt. Main.kt contiene il codice di input/output fornito e non può essere modificato.

Provalo tu

fun main() {
    // Codice di input/output fornito: lascialo così com'è
    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())
}

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Playground Kotlin