Повторение — смотритель зоопарка
Часть раздела Объектно-ориентированное программирование путешествия по Kotlin на Coddy. Урок 31 из 57.
Задание
СреднеСпланируйте день в зоопарке.
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")
}
Все уроки раздела Объектно-ориентированное программирование
1Классы и объекты
Работа с файламиОпределение классовПервичные конструкторыБлоки init и валидацияВторичные конструкторыПовторение — читательский билет4Наследование
Открытые классы и подклассыПереопределение членовsuper и конструкторыАбстрактные классыПовторение — каталог сотрудников7Специальные классы
Классы данныхКлассы перечисленийЗапечатанные иерархииequals, hashCode, toStringПовторение — трекер заказов10Паттерны проектирования. Часть 2
Делегирование с помощью byПаттерн декораторПаттерн строительПаттерн состояние2Свойства и инкапсуляция
Пользовательские аксессорыМодификаторы видимостиПриватные сеттерыlazy и lateinitПовторение — банковский счёт5Интерфейсы
Объявление интерфейсовМетоды по умолчаниюМножественные интерфейсыИнтерфейсы как типыПовторение — способы оплаты8Обобщения
Обобщённые функцииОбобщённые классыОграничения типовВариативность с in и outПовторение — очередь с приоритетом11Проект: Управление библиотекой
Книги и читателиВыдача книг3Объекты и компаньоны
Объявления объектовОбъекты-компаньоныКонстанты с constОбъектные выраженияПовторение — билетная касса6Полиморфизм
Динамическая диспетчеризацияПроверка типов и умные приведения типовwhen с типамиФункции-расширенияПовторение — смотритель зоопарка9Паттерны проектирования. Часть 1
Паттерн «Одиночка»Фабричный паттернПаттерн «Наблюдатель»Паттерн «Стратегия»Потренируйтесь самостоятельно: Песочница Kotlin