Podsumowanie – katalog pracowników
Część sekcji Programowanie obiektowe ścieżki Kotlin w Coddy. Lekcja 21 z 57.
Wyzwanie
ŚredniUtwórz katalog pracowników jako hierarchię klas.
Person(name)jest abstrakcyjna. Deklaruje abstrakcyjną metodęrole()i implementujecard(), która zwracaAda (staff in sales)i nie może zostać przesłonięta.Staff(name, department)jest otwarta; jej rola tostaff in sales.Manager(name, department)rozszerzaStaffi przechowuje prywatny zespół.hire(member)zwracatruei dodaje członka, gdy pracuje on w tym samym dziale, nie jest menedżerem i nie należy jeszcze do zespołu; w przeciwnym razie zwracafalse. Jego rola to rolaStaff, po której następuje, 2 reports(użyjsuper).Contractor(name, days)rozszerzaPerson; jego rola tocontractor for 30 days.
Dostarczony kod odczytuje polecenia staff Ada sales, manager Bo sales, contractor Cy 30 lub hire Bo Ada (wypisuje hired lub refused, również gdy nazwa jest nieznana), a następnie wypisuje wizytówkę każdej osoby w kolejności, w jakiej zostały dodane.
Twój kod umieść w plikach Person.kt, Staff.kt, Manager.kt i Contractor.kt. Main.kt zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.
Spróbuj swoich sił
fun main() {
// Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
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())
}
Wszystkie lekcje w sekcji Programowanie obiektowe
1Klasy i obiekty
Praca z plikamiDefiniowanie klasKonstruktory główneBloki init i walidacjaKonstruktory dodatkowePodsumowanie — karta biblioteczna4Dziedziczenie
Klasy otwarte i podklasyNadpisywanie składowychsuper i konstruktoryKlasy abstrakcyjnePodsumowanie – katalog pracowników7Klasy specjalne
Klasy danychKlasy wyliczenioweHierarchie zapieczętowaneequals, hashCode, toStringPodsumowanie — śledzenie zamówień10Wzorce projektowe, część 2
Delegowanie za pomocą byWzorzec dekoratoraWzorzec budowniczegoWzorzec stanu2Właściwości i hermetyzacja
Własne akcesoryModyfikatory widocznościPrywatne setterylazy i lateinitPowtórka – konto bankowe5Interfejsy
Deklarowanie interfejsówMetody domyślneWiele interfejsówInterfejsy jako typyPowtórzenie – metody płatności8Typy generyczne
Funkcje generyczneKlasy generyczneOgraniczenia typówKowariancja i kontrawariancja: in i outPodsumowanie — kolejka priorytetowa11Projekt: Zarządzanie biblioteką
Książki i czytelnicyWypożyczanie książekPoćwicz samodzielnie: Edytor online Kotlin