В качестве примера использования объектов рассмотрим прог- рамму, работающую со связанными списками. Мы будем рассматривать связанных список как объект, содержащий связанный список данных и операций (методов), которые вы можете с ними выполнять.
Связанный список данных состоит из указателей на начало ("голову") и конец ("хвост") связанного списка (в нашем примере из-за его гибкости используется двунаправленный связанный спи- сок). Каждый элемент связанного списка представляет собой реали- зацию отдельного объекта.
Возможности, необходимые для использования связанного спис- ка, предоставляют следующие операции:
- создание связанного списка (выделение для него памяти); - уничтожение связанного списка (освобождение используемой памяти); - инициализация связанного списка; - деинициализация связанного списка; - вставка элемента в середину списка перед существующим эле- ментом; - присоединение элемента к концу связанного списка; - удаление элемента из связанного списка; - возвращение первого элемента связанного списка; - возвращение последнего элемента связанного списка.
Имейте в виду, что создание и инициализация, а также уничто- жение и деинициализация методов - это не синонимы. При создании и уничтожении методы create и destroy выделяют и освобождают память для объекта (связанного списка), а методы инициализации и деини- циализации initialize и deinitialize только инициализируют и деи- нициализируют ранее выделенные экземпляры объекта.
Вы можете видеть, как объект связанного списка наследуется объектами стека или очереди, поскольку очередь и стек можно реа- лизовать как связанный список с ограниченным числом операций. Например, можно реализовать очередь в виде связанного списка, в котором элементы могут добавляться к концу и извлекаться из нача- ла. Если вы таким образом реализуете очередь, то нужно запретить наследуемые методы связанного списка, которые для очереди недо- пустимы (например, вставку в середину списка).