Основы объектно-ориентированного проектирования


Взгляд изнутри


Новое решение упрощает реализацию, также как и улучшает интерфейс. Более важно, дав каждой подпрограмме простую спецификацию, мы смогли сконцентрироваться только на одной задаче. Это позволило избавиться от ненужной избыточности, в частности от лишних циклов. Процедуры вставки и удаления занимаются теперь своей задачей и им не нужно выполнять проход по списку. Ответственность за позиционирование курсора теперь лежит на других подпрограммах (back, forth, go, search), только некоторым из которых нужны циклы (go и search).

Представление списка с курсором (первый вариант)

Рис. 5.10.  Представление списка с курсором (первый вариант)

В заголовке списка наряду со ссылкой на первый элемент first_element полезно хранить еще две ссылки на элемент в позиции курсора active и предшествующий ему элемент - previous. Это позволит эффективно выполнять вставку и удаление.

Клиенты могут узнать, каково состояние списка, имея доступ к открытым целочисленным атрибутам count и index и булевым запросам: before, after, is_first, is_last, item. Вот две типичные функции:

after: BOOLEAN is -- Находится ли курсор за списком? do Result := (index = count + 1) end is_first: BOOLEAN is -- Установлен ли курсор на первом элементе? do Result := (index = 1) end

(Напишите самостоятельно функции before и is_last.) Для функции after высказывание "Стоит ли курсор справа от последнего элемента?" не совсем корректно, так как after может быть истинным, даже если в списке совсем нет элементов. Комментарии к заголовкам следует писать так, чтобы они были ясными; лаконичность и аккуратность - сестры таланта (см. лекцию 8).

Запрос item возвращает элемент в позиции курсора, если таковой имеется:

item: G is -- Элемент в позиции курсора require readable: readable do Result := active.item end

Напоминаю, readable указывает, установлен ли курсор на элементе списка (index между 1 и count). Также заметьте, item в active.item ссылается на атрибут в LINKABLE, а не на функцию из самого LINKED_LIST.

Рассмотрим теперь основные команды манипулирования курсором.


Начало  Назад  Вперед



Книжный магазин