Rückblick – Mitarbeiterverzeichnis
Teil des Abschnitts Objektorientierte Programmierung der Kotlin-Journey von Coddy. Lektion 21 von 57.
Aufgabe
MittelErstelle ein Mitarbeiterverzeichnis als Klassenhierarchie.
Person(name)ist abstrakt. Sie deklariert die abstrakterole()und implementiertcard(), dieAda (staff in sales)zurückgibt und nicht überschrieben werden kann.Staff(name, department)ist offen; ihre Rolle iststaff in sales.Manager(name, department)erweitertStaffund verwaltet ein privates Team.hire(member)gibttruezurück und fügt das Mitglied hinzu, wenn das Mitglied in derselben Abteilung arbeitet, nicht der Manager ist und noch nicht im Team ist, andernfallsfalse. Seine Rolle ist dieStaff-Rolle gefolgt von, 2 reports(verwendesuper).Contractor(name, days)erweitertPerson; seine Rolle istcontractor for 30 days.
Der bereitgestellte Code liest Befehle wie staff Ada sales, manager Bo sales, contractor Cy 30 oder hire Bo Ada (er gibt hired oder refused aus, auch wenn ein Name unbekannt ist) und gibt anschließend die Karte jeder Person in der Reihenfolge aus, in der sie hinzugefügt wurden.
Dein Code gehört in Person.kt, Staff.kt, Manager.kt und Contractor.kt. Main.kt enthält den bereitgestellten Ein-/Ausgabecode und kann nicht bearbeitet werden.
Probier es selbst
fun main() {
// Gelieferter Ein-/Ausgabe-Code: belasse ihn wie er ist
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())
}
Alle Lektionen in Objektorientierte Programmierung
1Klassen und Objekte
Arbeiten mit DateienKlassen definierenPrimärkonstruktoreninit-Blöcke und ValidierungSekundärkonstruktorenRückblick – Bibliotheksausweis4Vererbung
Offene Klassen und UnterklassenÜberschreiben von Membernsuper und KonstruktorenAbstrakte KlassenRückblick – Mitarbeiterverzeichnis2Eigenschaften und Kapselung
Benutzerdefinierte ZugriffsmethodenSichtbarkeitsmodifikatorenPrivate Setterlazy und lateinitWiederholung – Bankkonto5Schnittstellen
Schnittstellen deklarierenStandardmethodenMehrere SchnittstellenSchnittstellen als TypenRückblick – Zahlungsmethoden8Generics
Generische FunktionenGenerische KlassenTypbeschränkungenVarianz mit in und outRückblick – Prioritätswarteschlange11Projekt: Bibliotheksverwaltung
Bücher und MitgliederBücher ausleihenÜbe selbstständig: Kotlin-Playground