ЛР1. Наследование абстрактных классов
Задание
Списки, как структуры данных, могут быть реализованы несколькими, несовместимыми друг с другом методами.
В таких случаях ООП предлагает разработку базового класса-предка (суперкласса), в который, кроме набора статических методов,
будут включены и основные
абстрактные методы, необходимые для обработки списков. Разработанные на основе суперкласса классы-потомки (подклассы)
реализуют указанные методы, каждый - своим способом. Задача заключается в разработке трех классов:
TAbstractStringList - базовый абстрактный суперкласс, предполагающий обработку списка строк.
TStringListP1 - подкласс TAbstractStringList, реализующий функциональность средствами односвязных списков
TStringListDA - подкласс TAbstractStringList, реализующий функциональность средствами динамических массивов
Декларируемые возможности TAbstractStringList:
- Конструктор (статический) и деструктор (override)
- Функция создания строкового узла (abstract, класс-метод)
- Процедура установки обработчика списка на начало списка (abstract)
- Процедура установки обработчика списка в конец списка (abstract)
- Функция получения текущего узла списка (abstract), возращает nil, если обработчик находится за пределами списка
- Функция перемещения обработчика списка на следующий элемент списка (abstract), должна возвращать false при выходе за пределы списка
- Функция перемещения обработчика списка на предыдущий элемент списка (abstract), должна возвращать false при выходе за пределы списка
- Функция получения строки по узлу (abstract)
- Функция получения узла по строке (abstract)
- Процедура вывода списка (статическая)
- Функция получения количества элементов списка (статическая)
- Функции добавления узла в начало списка (abstract), отдельные варианты для узла и для строки, абстрактный метод только один.
- Функции добавления узла в конец списка (abstract), отдельные варианты для узла и для строки, абстрактный метод только один.
- Функции вставки узла (abstract) после другого узла, отдельные варианты для узла и для строки (4 штуки), абстрактный метод только один.
- Функции удаления переданного узла (abstract), отдельные варианты для узла и для строки, абстрактный метод только один.
- Функция лексикографической сортировки списка (abstract)
- *Функция лексикографической сортировки списка (статическая)
В TAbstractStringList используется концепция последовательного обработчика списка. Такой обработчик позволяет перемещаться
по списку вперед и назад
по одному элементу, в начало и конец списка, получать текущий элемент списка. Благодаря такому обработчику некоторые методы TAbstractStringList
могут быть реализованы как статические и не требуют перекрытия в классах-потомках.
Классы TStringListP1 и TStringListDA должны реализовать все абстрактные методы, заявленные в суперклассе, перекрыть конструктор и деструктор,
создать все необходимые дополнительные поля и методы в приватной области.
Шаблон программы проверки:
...
var L:TAbstractStringList;
begin
L:=TStringListP1.Create();
//L:=TStringListDA.Create();
// Далее - проверка работоспособности списка.
// Смена типа списка в предыдущих строках
// не должна влиять на результат работы программы.
L.free;
end.