Skip to the content.

ДЗ 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.

  1. Создайте абстрактный класс MyList в файле MyList.java и добавьте в него все необходимые методы из задач 2-8. Создайте класс MyArrayList, который бы реализовывал абстрактный класс MyList.

  2. Создайте реализацию метода add, который принимает на вход целое число и добавляет его в конец списка за o(1) ((в некоторых случаях за o(n), когда требуется увеличить внутренний массив).

  3. Создайте реализацию метода addFirst, который принимает на вход целое число и добавляет его в начало списка за o(n)

  4. Создайте реализацию метода insert, который принимает на вход 2 целых числа a и i. Метод вставляет число a на i-ое место за o(n)

  5. Создайте реализацию метода delete, который принимает на вход одно число i. Метод удаляет i-ое число в списке за о(n)

  6. Создайте реализацию метода get, который принимает на вход одно число i. Метод возвращает i-ое число в списке за о(1)

  7. Создайте реализацию метода size, который выводит длину списка за o(1)

  8. Создайте реализацию метода toArray, который возвращает список как массив интов за o(n)

В комментариях к методам 2-8 укажите почему ваш алгоритм метода соответствует заданной асимптотике. Для комментариев используйте javadoc.

Список, основанный на массиве (свой ArrayList)

Давайте сделаем чуть более странный список - пусть он добавляет только числа делящиеся на 14, а удаляет только элементы, у которых есть хотя бы одна цифра 5. Давайте не будем заводить отдельный файлик для такого странного списка, а создадим объект этого класса, используя анонимный класс

  1. Создайте объект анонимного класса и верните его в методе getStrangeList() в классе MyStrangeList.

      1. Определите в этом анонимном классе все методы, заданные в MyList с теми отличиями, которые описаны выше

А как же Solid?

В файле SOLID.md ответьте на следующие вопросы:

  1. Какие принципы SOLID учтены при реализации списка? Проиллюстрируйте примером каждый из названых принципов.
  2. Какие принципы SOLID не были учтены при реализации списка? Проиллюстрируйте примером каждый из названых принципов. Объясните, почему
  3. Какие принципы SOLID учтены при реализации странного списка? Проиллюстрируйте примером каждый из названых принципов.
  4. Какие принципы SOLID не были учтены при реализации странного списка? Проиллюстрируйте примером каждый из названых принципов.

Полезные ссылки

SOLID в картинках

Принцип подстановки Лисков

Статья про SOLID - примеры, которые мы рассматривали на лекции частично отсюда