- Добавить в класс Animal публичные методы двигаться(toGo), летать(fly), плавать(swim).
- Создать по два класса наследника Animal, умеющих летать, плавать, бегать (животное может как уметь что-то одно, так и все сразу).
- В main добиться того, чтобы при вызове метода действия, которое конкретное животное не умеет, оно этого не делало (кошки не летают, рыбы не ходят).
- В файле readme.md в репозитории гитхаб описать какие проблемы в таком проектировании Вы увидели, а также там же написать возникшие при выполнении дз вопросы.
- Добавлены методы класса Animal:
- toGo() - идти.
- toFly() - летать.
- toSwim() - плыть.
- Добавлены классы:
- Cat - реализованно переопределение метода
toFly()
. - Dog - реализованно переопределение метода
toFly()
. - Penguin - реализованно переопределение метода
toFly()
. - Dolphin - реализованно переопределение метода
toGo()
. - Duck
- Eagle - реализованно переопределение метода
toSwim()
.
- Cat - реализованно переопределение метода
- Нужно явно указывать что животное умеет делать, а что не умеет.
- Вероятнее всего нужно создать функцию, которая будет сортировать действие (способности) животного по его реальным способностям, или создавать отдельный класс животных, определяющий класс животного по его происхождению (Тип, Класс, Семейство, Вид, и тд.).
- Создать класс Doctor и подумать над его состоянием и поведением.
- Создать класс Nurse(Медсестра) и подумать над его состоянием и поведением.
- Создайте интерфейсы Goable, Flyable, Swimable.
- У интерфейсов должны быть методы получения скорости заданного действия:
double run()
,double fly()
,double swim()
. - Добавьте наследников этим интерфейсам, но таким образом, чтобы у каждого интерфейса было минимум по два наследника (при необходимости, добавьте в приложение новые классы).
- Создать класс Ветеринарная Клиника (VeterinaryClinic).
- У ветеринарной клиники добавьте методы получения всех бегающих, всех плавающих и всех летающих. А также методы для работы с персоналом клиники.
- Создать классы:
- Doctor
- Nurse
- VeterinaryClinic - добавлены методы получения всех бегающих, плавающих и летающих. А также методы для работы с персоналом клиники.
- Создать интерфейсы:
- Goable - добавлен метод получения скорости
double run()
. - Flyable - добавлен метод получения скорости
double fly()
. - Swimable - добавлен метод получения скорости
double swim()
.
- Goable - добавлен метод получения скорости
- Я бы реализовал абстрактный класс "Cотрудники" и от него наследовал бы уже Доктора и Медсестру. Из класса "Сотрудники" было бы проще что-то делать с персоналом. Далее можно создать интерфейс задачи (должностные обязанности) и реализовать их к Доктору и Медсестре, если я правильно рассуждаю то создал бы отдельную папку и распределил все эти интерфейсы и классы по смыслу и логике.
- Добавить интерфейс Copmparable к классу Pharmacy. Переопределить метод
compareTo()
подсказка: можно добавить, а можно не добавлять в класс поля. - Создать несколько экземпляров Pharmacy, добавить их в ArrayList, написать метод, выводящий Pharmacy в отсортированном виде.
- *(усложненное, не обязательное). Постараться написать еще 1 метод сортировки лекарств, но уже по другому параметру.
- Добавить интерфейс:
- Copmparable<Pharmacy> - метод
compareTo()
переопределен.
- Copmparable<Pharmacy> - метод
- Создать экземпляры Pharmacy:
- Созданы несколько экземпляров Pharmacy и добавлены в ArrayList.
- Метод выводящий Pharmacy в отсортированном виде написан.
- Написать метод сортировки:
- Написать еще 1 метод сортировки лекарств, но уже по другому параметру.
- Реализовать свой LinkedList с методами вставки в начало, конец списка, получения размера списка и получения элемента по индексу.
- Создан класс MyLinkedList.
- Реализованы методы:
-
addFirst(T value)
- добавление элемента в начало списка. -
addLast(T value)
- добавление элемента в конец списка. -
size()
- получение размера списка. -
get(int index)
- получение элемента по индексу.
-
- Реализуйте удаление пользователей.
- Подумать, где должен находиться метод createUser из UserView и если получится, вынести его в нужный слой. Вынести логику dao в слой репозитория, а от слоя dao избавится физически(перенести нужный код в класс репозитория, а пакет dao удалить).
- На выбор (не обязательно): подумайте как оптимизировать код приложения (например, хэшировать все данные, а в файл писать только при выходе из приложения). Дописать код для оставшихся команд в Commands (можно реализовать сохранение списка User).
ИЛИ ВНЕСИТЕ СВОИ ИЗМЕНЕНИЯ В ПРОЕКТ, КОТОРЫЕ КАЖУТЬСЯ ЛОГИЧНЫМИ ВАМ!\
- Добавлен метод
delete
- удаление пользователя по ID. - Метод
createUser
из UserView находится на своём месте, т.к. согласно паттерну MVP - UserView подготавливает информацию как для пользователя, так для и для контроллера. - Необходимый код из dao был перенесен в UserRepository.
- В методе run добавлен метод строк =>
.toUpperCase()
.
- Исправить код из пакета homework, согласно принципам SOLID.
- Если не успели реализовать какие-то задумки для приложения notebook (5 семинар) можно доделать и прислать вместе с этим заданием (2 ссылки на гит).
- Внесены изменения в класс User:
- Заменен тип переменной userSaver на Saver, чтобы соблюсти принцип инверсии зависимостей (Dependency Inversion Principle, DIP).
- Конструктор User теперь принимает объект типа Saver, что позволяет передавать различные реализации интерфейса Saver для сохранения пользовательских данных.
- Добавлен интерфейс Saver:
- Saver определяет метод
save
, который принимает объект типа User и представляет собой абстракцию для сохранения пользовательских данных.
- Saver определяет метод
- Создан класс UserSaver (переименованный и изменённый класс Persister), который реализует интерфейс Saver:
- UserSaver предоставляет конкретную реализацию метода
save
, который выводит сообщение о сохранении имени пользователя.
- UserSaver предоставляет конкретную реализацию метода
- В Main классе:
- Создается экземпляр класса UserSaver и присваивается переменной типа Saver.
- Создается объект класса User, который принимает имя пользователя и экземпляр Saver.
- Вызывается метод
report
для вывода отчета о пользователе. - Вызывается метод
save
, который сохраняет данные пользователя с помощью объекта UserSaver.