Menu
Coddy logo textTech

סיכום – שומר גן החיות

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

challenge icon

אתגר

בינוני

תכננו יום בגן החיות.

  • Animal(name, kg) היא מחלקה מופשטת עם האיברים המופשטים species, food ו־dailyGrams(), ומתודה line() שמחזירה Leo the lion: 5700 g meat.
  • Lion אוכל בשר, 30 גרם לכל ק״ג. Parrot אוכל זרעים, 50 גרם ביום ללא קשר למשקלו. Seal אוכל דגים, 40 גרם לכל ק״ג.
  • לממשק Trainable יש trick(). תוכים (Polly says hello) וכלבי ים (Sammy balances a ball) ניתנים לאילוף; אריות אינם ניתנים לאילוף.
  • הרחבת List<Animal>.foodTotals() מחזירה את מספר הגרמים לכל סוג מזון, כשהמזונות מסודרים בסדר אלפביתי: fish 4000, meat 5700.
  • showLineup(animals) מחזירה את הטריקים של בעלי החיים הניתנים לאילוף לפי הסדר, תוך שימוש בבדיקת טיפוס, או no show כשאין כאלה.

הקוד שסופק קורא שורות lion,Leo,190, parrot,Polly,1 או seal,Sammy,100 ומדפיס את כל הקריאות ל־line(), ולאחר מכן food: עם הסיכומים ושורת show: אחת לכל טריק שמוחזר.

הקוד שלך ייכתב בקבצים Animal.kt, Trainable.kt, Lion.kt, Parrot.kt, Seal.kt ו־Functions.kt. הקובץ Main.kt מכיל את קוד הקלט/פלט שסופק, ואי אפשר לערוך אותו.

נסו בעצמכם

fun main() {
    // קוד קלט/פלט שסופק: יש להשאיר אותו כפי שהוא
    val input = generateSequence(::readLine).toList()
    val animals = input.map { line ->
        val (kind, name, kg) = line.split(",")
        when (kind) {
            "lion" -> Lion(name, kg.toInt())
            "parrot" -> Parrot(name, kg.toInt())
            else -> Seal(name, kg.toInt())
        }
    }
    for (a in animals) println(a.line())
    println("food: " + animals.foodTotals())
    for (s in showLineup(animals)) println("show: $s")
}

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

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