Парковочный гараж
Часть раздела Объектно-ориентированное программирование путешествия по Kotlin на Coddy. Урок 55 из 57.
Задание
СложноСоздай парковочный гараж.
- Перечисление
SizeсодержитSMALL,MEDIUMиLARGEв таком порядке, каждое со строчнойlabel. Vehicle(plate)— запечатанный класс с абстрактными свойствамиsizeиhourlyRate.Motorbikeимеет малый размер (1 в час),Car— средний (3), аVan— большой (5).Garage(small, medium, large)создаётся с указанием количества мест каждого размера.park(vehicle)помещает транспортное средство на свободное место своего размера или, если такого нет, на место следующего большего размера, если оно есть, и возвращаетparked AB12 in medium,full for AB12илиAB12 is already parked.leave(plate, hours)освобождает место и возвращаетAB12 paid 9(тариф, умноженный на количество часов, но минимум за 1 час) илиno vehicle AB12.status()возвращаетfree: small 1, medium 0, large 2.
Предоставленный код считывает места в формате small,medium,large, затем команды park car AB12 (bike, car или van), leave AB12 3 или status и выводит каждый ответ.
Твой код должен находиться в файлах Size.kt, Vehicle.kt, Motorbike.kt, Car.kt, Van.kt и Garage.kt. В Main.kt находится предоставленный код ввода-вывода, и его нельзя редактировать.
Попробуйте сами
fun main() {
// Предоставленный код ввода/вывода: оставьте его как есть
val input = generateSequence(::readLine).toList()
val (small, medium, large) = input[0].split(",").map { it.toInt() }
val garage = Garage(small, medium, large)
for (cmd in input.drop(1)) {
val p = cmd.split(" ")
when (p[0]) {
"park" -> {
val vehicle = when (p[1]) {
"bike" -> Motorbike(p[2])
"van" -> Van(p[2])
else -> Car(p[2])
}
println(garage.park(vehicle))
}
"leave" -> println(garage.leave(p[1], p[2].toInt()))
else -> println(garage.status())
}
}
}
Все уроки раздела Объектно-ориентированное программирование
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