Проект к пятому занятию:
- интерфейсы
- классы
- объекты
- внутренние статические и динамические классы
- объекты-компаньоны
- sealed интерфейсы и классы
В этом домашнем задании вам предстоит добавить топливную систему в наши машины и заправить её бензином.
- Топливная система машины будет состоять из бака(
Tank
) и горловины (TankMouth
) - Бак (его реализация) спрятана от пользователя машины
- Машина заправляется через горловину бака
- Горловина может принимать или бензин, или сжиженный газ
- Уровень бензина доступен водителю через интерфейс
CarOutput
(добавить метод в интерфейс) - Считаем, что бак может принимать и бензин, и газ. Что именно туда заливается - определяется горловиной, которая установлена на баке
- Топливная система должна устанавливаться "специалистом" - сборщиком нашей машины
Интерфейс бака и его связь с другими компонентами может выглядеть, например, вот так:
Полный интерфейс машины (для водителя) должен выглядеть вот так:
Сделайте машинам топливную систему:
- Семерка пусть ездит на газу
- Восьмерка пусть ездит на бензине
- ТАЗ может иметь любую систему, но его бак взрывается при попытке заправить (бросает исключение)
Создайте заправку и залейте топливо в баки:
- заправка на вход получает машину
- в зависимости от того, какая на машине горловина - использует разный метод заправки
- заправка должна быть безопасной: если бак взорвался - должна обработать исключение
Результат: добавьте функцию заправки для коллекции машин:
- создаем коллекцию машин
- выводим содержимое баков (например, модифицировав метод
toString
машины) - заправляем машины на заправке
- выводим содержимое баков после заправки
В заданиях можно использовать любые виды классов, что мы разбирали на лекции:
- статические внутренние класс и объекты (например, для бачка внутри машины)
- объекты-компаньоны (для сборщика бака и горловины)
- Sealed-интерфейсы или классы (горловина бачка)