Menu
Coddy logo textTech

חזרה – מדריך הסגל

חלק מהיחידה תכנות מונחה עצמים במסלול ה-Kotlin של Coddy. שיעור 21 מתוך 57.

challenge icon

אתגר

בינוני

בנו ספריית עובדים כהיררכיית מחלקות.

  • 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())
}

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: Kotlin אונליין