Для каждого класса необходимо предоставить его графическое представление в диаграмме классов UML. Графическое представление добавить в протокол лабораторной работы и принести на защиту лабораторной работы.
Необходимо создать класс DynamicIntArray
, который реализует функционал динамического массива целых чисел.
При реализации динамического массива учитывайте следующее:
при реализации класса вам необходимо указать область видимости для полей и методов. Подумайте о том, какие методы необходимо отнести к "интерфейсу", а какие к реализации;
размер динамического массива для внешнего пользователя не имеет значения и теоретически неограничен;
внешний пользователь не должен знать и догадываться, что динамический массив "внутри" реализован с помощью обычного статического массива;
вы должны предусмотреть различные проверки на некорректность индексов, которые мог ввести пользователь;
вы должны написать "реализацию" класса таким образом, чтобы можно моделировать динамическое поведение массива с помощью обычного статического;
продумайте, какие аргументы методы должны принимать и какие значения возвращать.
Перейдите во вкладку "Подсказка", чтобы получить подсказку, которая поможет вам в реализации класса или попробуйте реализовать класс без подсказки.
При создании динамического массива инициализируйте внутренний статический массив с каким-то дефолтным изначальным размером;
При вставке элементов проверяйте, не выходите ли вы за пределы внутреннего статического массива;
Если внутренний массив переполнен, создавайте новый массив большего размера: создавайте новый массив, копируйте значения из старого массива в новый, заменяйте новый массив на старый. Помните, что массивы в Java - объекты и что поле - просто указатель на массив и что указатель может указывать на другой массив;
При уменьшении размера массива реализуйте уменьшение внутреннего статического массива. Подумайте, как это лучше сделать, чтобы не уменьшать внутренний массив при каждом удалении элемента.
ВАЖНО! Динамический массив необходимо реализовать с помощью статического целочисленного массива!
Для внешнего пользователя класса поведение класса выглядит следующим образом:
пользователь может создать новый динамический массив с конструктором без параметров или с указанием начальных значений динамического массива;
пользователь может вставить элемент в определенный индекс динамического массива (остальные элементы динамического массива сдвигаются вправо) с помощью метода add()
. Если метод add()
вызывается без указания индекса, элемент добавляется в конец динамического массива;
пользователь может перезаписать значение i-го элемента динамического массива с помощью метода set()
;
пользователь может удалить элемент динамического массива по индексу с помощью метода removeAt()
. Если метод removeAt()
вызывается без указания индекса, то удаляется последний элемент в динамическом массиве.
пользователь может удалить первое вхождение значения в динамическом массиве с помощью метода remove()
.
пользователь может получить индекс первого вхождения элемента в динамическом массиве с помощью метода indexOf()
. Подумайте о том, как сигнализировать пользователю о том, что искомый элемент в динамическом массиве не найден;
пользователь может проверить, есть ли такой элемент в массиве с помощью метода contains()
;
пользователь может получить размер динамического массива с помощью метода size()
;
пользователь может проверить, пустой ли массив с помощью метода isEmpty()
;
пользователь может очистить массив полностью с помощью метода clear()
.