Riepilogo - Elenco del personale
Fa parte della sezione Programmazione orientata agli oggetti del percorso Kotlin di Coddy. Lezione 21 di 57.
Sfida
MedioCrea un elenco del personale come gerarchia di classi.
Person(name)è astratta. Dichiararole()astratta e implementacard(), che restituisceAda (staff in sales)e non può essere sovrascritta.Staff(name, department)è aperta; il suo ruolo èstaff in sales.Manager(name, department)estendeStaffe mantiene una squadra privata.hire(member)restituiscetruee aggiunge il membro se lavora nello stesso reparto, non è il manager e non è ancora nella squadra, e restituiscefalsealtrimenti. Il suo ruolo è quello diStaffseguito da, 2 reports(usasuper).Contractor(name, days)estendePerson; 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
1Classi e oggetti
Lavorare con i fileDefinire le classiCostruttori primariBlocchi init e convalidaCostruttori secondariRiepilogo - Tessera della biblioteca4Ereditarietà
Classi aperte e sottoclassiRidefinizione dei membrisuper e costruttoriClassi astratteRiepilogo - Elenco del personale2Proprietà e incapsulamento
Accessor personalizzatiModificatori di visibilitàSetter privatilazy e lateinitRipasso - Conto bancario5Interfacce
Dichiarare le interfacceMetodi predefinitiInterfacce multipleLe interfacce come tipiRiepilogo - Metodi di pagamento8Tipi generici
Funzioni genericheClassi genericheVincoli sui tipiVarianza con in e outRiepilogo - Coda con priorità11Progetto: Gestione della biblioteca
Libri e sociPrendere in prestito i libriEsercitati da solo: Playground Kotlin