Ôn tập: Danh bạ nhân viên
Thuộc phần Lập trình hướng đối tượng trong hành trình Kotlin của Coddy. Bài học 21 trên 57.
Thử thách
Trung bìnhXây dựng danh bạ nhân viên bằng hệ thống phân cấp lớp.
Person(name)là lớp trừu tượng. Lớp này khai báo hàm trừu tượngrole()và triển khaicard(), hàm này trả vềAda (staff in sales)và không thể bị ghi đè.Staff(name, department)có thể được kế thừa; vai trò của lớp này làstaff in sales.Manager(name, department)kế thừaStaffvà quản lý một nhóm riêng tư.hire(member)trả vềtruevà thêm thành viên nếu người đó làm cùng phòng ban, không phải là người quản lý và chưa có trong nhóm; nếu không thì trả vềfalse. Vai trò của lớp này là vai trò củaStaff, theo sau là, 2 reports(dùngsuper).Contractor(name, days)kế thừaPerson; vai trò của lớp này làcontractor for 30 days.
Code được cung cấp đọc các lệnh staff Ada sales, manager Bo sales, contractor Cy 30 hoặc hire Bo Ada (lệnh này in ra hired hoặc refused, kể cả khi không biết tên), sau đó in thẻ của từng người theo thứ tự họ được thêm vào.
Code của bạn nằm trong các tệp Person.kt, Staff.kt, Manager.kt và Contractor.kt. Main.kt chứa code đầu vào/đầu ra được cung cấp và bạn không thể chỉnh sửa tệp này.
Tự làm thử
fun main() {
// Đoạn code đầu vào/đầu ra có sẵn: giữ nguyên
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())
}
Tất cả bài học trong Lập trình hướng đối tượng
1Lớp và đối tượng
Làm việc với tệpĐịnh nghĩa lớpHàm khởi tạo chínhKhối init và kiểm tra tính hợp lệHàm khởi tạo phụÔn tập: thẻ thư viện4Kế thừa
Lớp mở và lớp conGhi đè thành viênsuper và hàm khởi tạoLớp trừu tượngÔn tập: Danh bạ nhân viên2Thuộc tính và tính đóng gói
Trình truy cập tùy chỉnhBộ sửa đổi phạm vi truy cậpSetter riêng tưlazy và lateinitÔn tập: tài khoản ngân hàng5Giao diện
Khai báo giao diệnPhương thức mặc địnhNhiều giao diệnGiao diện như kiểu dữ liệuÔn tập: Phương thức thanh toánTự luyện tập: Playground Kotlin