Ulasan: Direktori Staf
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Kotlin di Coddy. Pelajaran 21 dari 57.
Tantangan
SedangBuat direktori staf sebagai hierarki class.
Person(name)bersifat abstrak. Class ini mendeklarasikanrole()abstrak dan mengimplementasikancard(), yang mengembalikanAda (staff in sales)dan tidak dapat ditimpa.Staff(name, department)bersifat terbuka; perannya adalahstaff in sales.Manager(name, department)mewarisiStaffdan menyimpan tim privat.hire(member)mengembalikantruedan menambahkan anggota jika anggota tersebut bekerja di departemen yang sama, bukan manajernya, dan belum ada di tim, serta mengembalikanfalsejika tidak. Perannya adalah peranStaffdiikuti, 2 reports(gunakansuper).Contractor(name, days)mewarisiPerson; perannya adalahcontractor for 30 days.
Kode yang disediakan membaca perintah staff Ada sales, manager Bo sales, contractor Cy 30 atau hire Bo Ada (kode ini mencetak hired atau refused, juga ketika nama tidak dikenal), lalu mencetak kartu setiap orang sesuai urutan mereka ditambahkan.
Tulis kodemu di Person.kt, Staff.kt, Manager.kt dan Contractor.kt. Main.kt berisi kode input/output yang disediakan dan tidak boleh diedit.
Coba sendiri
fun main() {
// Kode input/output yang disediakan: biarkan tetap seperti semula
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())
}
Semua pelajaran di Pemrograman Berorientasi Objek
1class dan object
Bekerja dengan fileMendefinisikan classKonstruktor utamaBlok init dan validasiKonstruktor sekunderRingkasan: Kartu Perpustakaan4Pewarisan
Kelas Terbuka dan SubkelasMenimpa Anggotasuper dan KonstruktorKelas AbstrakUlasan: Direktori Staf2property dan Enkapsulasi
Accessor KustomModifier VisibilitasSetter Privatlazy dan lateinitRingkasan: Rekening Bank5Interface
Mendeklarasikan Interfacemethod DefaultBeberapa InterfaceInterface sebagai TipeUlasan: Metode Pembayaran11Proyek: Pengelolaan Perpustakaan
Buku dan AnggotaPeminjaman BukuLatihan sendiri: Playground Kotlin