ЛР1. Наследование абстрактных классов

Задание

Списки, как структуры данных, могут быть реализованы несколькими, несовместимыми друг с другом методами. В таких случаях ООП предлагает разработку базового класса-предка (суперкласса), в который, кроме набора статических методов, будут включены и основные абстрактные методы, необходимые для обработки списков. Разработанные на основе суперкласса классы-потомки (подклассы) реализуют указанные методы, каждый - своим способом. Задача заключается в разработке трех классов:
TAbstractStringList - базовый абстрактный суперкласс, предполагающий обработку списка строк.
TStringListP1 - подкласс TAbstractStringList, реализующий функциональность средствами односвязных списков
TStringListDA - подкласс TAbstractStringList, реализующий функциональность средствами динамических массивов

Декларируемые возможности TAbstractStringList:

  1. Конструктор (статический) и деструктор (override)
  2. Функция создания строкового узла (abstract, класс-метод)
  3. Процедура установки обработчика списка на начало списка (abstract)
  4. Процедура установки обработчика списка в конец списка (abstract)
  5. Функция получения текущего узла списка (abstract), возращает nil, если обработчик находится за пределами списка
  6. Функция перемещения обработчика списка на следующий элемент списка (abstract), должна возвращать false при выходе за пределы списка
  7. Функция перемещения обработчика списка на предыдущий элемент списка (abstract), должна возвращать false при выходе за пределы списка
  8. Функция получения строки по узлу (abstract)
  9. Функция получения узла по строке (abstract)
  10. Процедура вывода списка (статическая)
  11. Функция получения количества элементов списка (статическая)
  12. Функции добавления узла в начало списка (abstract), отдельные варианты для узла и для строки, абстрактный метод только один.
  13. Функции добавления узла в конец списка (abstract), отдельные варианты для узла и для строки, абстрактный метод только один.
  14. Функции вставки узла (abstract) после другого узла, отдельные варианты для узла и для строки (4 штуки), абстрактный метод только один.
  15. Функции удаления переданного узла (abstract), отдельные варианты для узла и для строки, абстрактный метод только один.
  16. Функция лексикографической сортировки списка (abstract)
  17. *Функция лексикографической сортировки списка (статическая)
В TAbstractStringList используется концепция последовательного обработчика списка. Такой обработчик позволяет перемещаться по списку вперед и назад по одному элементу, в начало и конец списка, получать текущий элемент списка. Благодаря такому обработчику некоторые методы TAbstractStringList могут быть реализованы как статические и не требуют перекрытия в классах-потомках.

Классы TStringListP1 и TStringListDA должны реализовать все абстрактные методы, заявленные в суперклассе, перекрыть конструктор и деструктор, создать все необходимые дополнительные поля и методы в приватной области.

Шаблон программы проверки:

...
var L:TAbstractStringList;
begin
    L:=TStringListP1.Create();
    //L:=TStringListDA.Create();
// Далее - проверка работоспособности списка. 
// Смена типа списка в предыдущих строках 
// не должна влиять на результат работы программы.
    L.free;
end.