Menu
Coddy logo textTech

Revisão - Cuidador do zoológico

Parte da seção Programação Orientada a Objetos do Journey de Kotlin da Coddy. Lição 31 de 57.

challenge icon

Desafio

Médio

Planeje um dia no zoológico.

  • Animal(name, kg) é abstrata, com os membros abstratos species, food e dailyGrams(), e um método line() que retorna Leo the lion: 5700 g meat.
  • Lion come carne, 30 g por kg. Parrot come sementes, 50 g por dia, independentemente de quanto pesa. Seal come peixe, 40 g por kg.
  • A interface Trainable tem trick(). Papagaios (Polly says hello) e focas (Sammy balances a ball) podem ser treinados; leões não.
  • A extensão List<Animal>.foodTotals() retorna os gramas por alimento, com os alimentos em ordem alfabética: fish 4000, meat 5700.
  • showLineup(animals) retorna os truques dos animais treináveis na ordem, usando uma verificação de tipo, ou no show quando não houver nenhum.

O código fornecido lê linhas lion,Leo,190, parrot,Polly,1 ou seal,Sammy,100 e imprime cada line(), depois food: com os totais e uma linha show: para cada truque retornado.

Seu código deve ser colocado em Animal.kt, Trainable.kt, Lion.kt, Parrot.kt, Seal.kt e Functions.kt. Main.kt contém o código fornecido de entrada/saída e não pode ser editado.

Experimente você mesmo

fun main() {
    // Código de entrada/saída fornecido: mantenha-o como está
    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")
}

Todas as lições de Programação Orientada a Objetos

Pratique por conta própria: Playground de Kotlin