مراجعة - دليل الموظفين
جزء من قسم البرمجة كائنية التوجه في رحلة Kotlin على Coddy. الدرس 21 من 57.
التحدي
متوسطأنشئ دليلًا للموظفين باعتباره تسلسلًا هرميًا من الفئات.
Person(name)فئة مجردة. تصرّح بالدالة المجردةrole()وتنفّذcard()، التي تُرجعAda (staff in sales)ولا يمكن تجاوزها.Staff(name, department)فئةopen؛ ودورها هوstaff in sales.Manager(name, department)تمتد منStaffوتحتفظ بفريق خاص. تُرجعhire(member)القيمةtrueوتضيف العضو عندما يعمل العضو في القسم نفسه، ولا يكون المدير نفسه، ولا يكون موجودًا في الفريق بعد، وتُرجعfalseبخلاف ذلك. ودورها هو دورStaffمتبوعًا بـ, 2 reports(استخدمsuper).Contractor(name, days)تمتد منPerson؛ ودورها هوcontractor for 30 days.
يقرأ الكود المزوَّد الأوامر staff Ada sales أو manager Bo sales أو contractor Cy 30 أو hire Bo Ada (ويطبع hired أو refused، بما في ذلك عندما يكون الاسم غير معروف)، ثم يطبع بطاقة كل شخص بالترتيب الذي أُضيفوا به.
ضع كودك في Person.kt وStaff.kt وManager.kt وContractor.kt. يحتوي Main.kt على كود الإدخال/الإخراج المزوَّد، ولا يمكن تعديله.
جرّب بنفسك
fun main() {
// كود الإدخال/الإخراج المُزوَّد: أبقِه كما هو
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())
}
جميع دروس البرمجة كائنية التوجه
1الفئات والكائنات
العمل مع الملفاتتعريف الفئاتالمنشئات الأساسيةكتل init والتحقق من الصحةالمنشئات الثانويةمراجعة - بطاقة المكتبة4الوراثة
الأصناف المفتوحة والأصناف الفرعيةتجاوز الأعضاءsuper والمنشئاتالأصناف المجرّدةمراجعة - دليل الموظفينتدرّب بنفسك: Playground لـ Kotlin