חזרה – מדריך הסגל
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Kotlin של Coddy. שיעור 21 מתוך 57.
אתגר
בינוניבנו ספריית עובדים כהיררכיית מחלקות.
Person(name)היא מחלקה מופשטת. היא מצהירה עלrole()המופשטת ומממשת אתcard(), שמחזירהAda (staff in sales)ואי אפשר לדרוס אותה.Staff(name, department)פתוחה להרחבה; התפקיד שלה הוא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 ואימות נתוניםבנאים משנייםסיכום – כרטיס ספרייהתרגלו בעצמכם: Kotlin אונליין