ДЗ 5. Solid. Abstract class. Anonymous class.
Дедлайн
Мягкий дедлайн - 13 октября в 21-00
Жесткий дедлайн - 20 октября в 21-00
Как сдать
Реализуйте нужные классы. Запустите у себя на компьютере тесты. Для этого откройте консоль и выполните команду
./gradlew test
Если тесты прошли успешно - вы увидите надпись BUILD SUCCESSFUL
, если же вы увидите надпись BUILD FAILED
, то найдите в сообщении в терминале название теста и посмотрите этот тест в директории src/test/groovy/
После этого отправьте свое решение в ветку main. Призовите меня (ivanetc) в комментариях, где, пожалуйста, напишите “Cдаю задачи 1, 2, 3 … n”. Убедитесь, что тесты проходят локально.
Solid. Abstract class. Anonymous class.
В прошлом семестре у вас был курс по алгоритмам и структурам данных. Давайте, попробуем применить теоретические знания из того курса на практике. Важно - использовать коллекции в данном задании запрещено.
Связный список
Давайте попробуем реализовать список целых чисел, реализованный на массиве. В каком-то смысле попробуем написать собственный ArrayList.
-
Создайте абстрактный класс
MyList
в файлеMyList.java
и добавьте в него все необходимые методы из задач 2-8. Создайте классMyArrayList
, который бы реализовывал абстрактный классMyList
. -
Создайте реализацию метода
add
, который принимает на вход целое число и добавляет его в конец списка за o(1) ((в некоторых случаях за o(n), когда требуется увеличить внутренний массив). -
Создайте реализацию метода
addFirst
, который принимает на вход целое число и добавляет его в начало списка за o(n) -
Создайте реализацию метода
insert
, который принимает на вход 2 целых числа a и i. Метод вставляет число a на i-ое место за o(n) -
Создайте реализацию метода
delete
, который принимает на вход одно число i. Метод удаляет i-ое число в списке за о(n) -
Создайте реализацию метода
get
, который принимает на вход одно число i. Метод возвращает i-ое число в списке за о(1) -
Создайте реализацию метода
size
, который выводит длину списка за o(1) -
Создайте реализацию метода
toArray
, который возвращает список как массив интов за o(n)
В комментариях к методам 2-8 укажите почему ваш алгоритм метода соответствует заданной асимптотике. Для комментариев используйте javadoc.
Список, основанный на массиве (свой ArrayList)
Давайте сделаем чуть более странный список - пусть он добавляет только числа делящиеся на 14, а удаляет только элементы, у которых есть хотя бы одна цифра 5. Давайте не будем заводить отдельный файлик для такого странного списка, а создадим объект этого класса, используя анонимный класс
-
Создайте объект анонимного класса и верните его в методе getStrangeList() в классе MyStrangeList.
-
-
- Определите в этом анонимном классе все методы, заданные в MyList с теми отличиями, которые описаны выше
-
А как же Solid?
В файле SOLID.md ответьте на следующие вопросы:
- Какие принципы SOLID учтены при реализации списка? Проиллюстрируйте примером каждый из названых принципов.
- Какие принципы SOLID не были учтены при реализации списка? Проиллюстрируйте примером каждый из названых принципов. Объясните, почему
- Какие принципы SOLID учтены при реализации странного списка? Проиллюстрируйте примером каждый из названых принципов.
- Какие принципы SOLID не были учтены при реализации странного списка? Проиллюстрируйте примером каждый из названых принципов.
Полезные ссылки
Статья про SOLID - примеры, которые мы рассматривали на лекции частично отсюда