Объектно-ориентированное проектирование с примерами


Проектирование интерфейса классов


После того, как выработаны основные принципы построения архитектуры системы, остающаяся работа проста, но зачастую довольно скучна и утомительна. Следующий этап будет состоять в реализации трех или четырех семейств классов (таких, как очередь, множество и дерево) в соответствии с выбранной архитектурой, и в последующем их тестировании в нескольких приложениях [Вирфс-Брок считает, что необходимо тестировать среду разработки по крайней мере на трех приложениях, чтобы проверить правильность стратегических и тактических решений [15]].

Наиболее тяжелой частью данного этапа является создание подходящего интерфейса для каждого базового класса. И здесь, в процессе изолированной разработки отдельных классов (см. главу 6), нельзя забывать о задаче обеспечения глобального соответствия всех частей системы друг другу. В частности, для класса Set можно определить следующий протокол:
 

setHashFunction Устанавливает функцию хеширования для элементов множества.
clear Очищает множество.
add Добавляет элемент к множеству.
remove Удаляет элемент из множества.
setUnion Объединяет с другим множеством.
intersection Находит пересечение с другим множеством.
difference Удаляет элементы, которые содержатся в другом множестве.
extent Возвращает количество элементов в множестве.
isEmpty Возвращает 1, если множество пусто.
isMember Возвращает 1, если данный элемент принадлежит множеству.
isSubset Возвращает 1, если множество является подмножеством другого множества.
isProperSubset Возвращает 1, если множество является собственным подмножеством другого множества.

 
Подобным же образом можно определить протокол класса BinaryTree:
 

clear Уничтожает дерево и всех его потомков.
insert Добавляет новый узел в корень дерева.
append Добавляет к дереву потомка.
remove Удаляет потомка из дерева.
share Структурно делит данное дерево.
swapChild Переставляет потомка с деревом.
child Возвращает данного потомка.
leftChild Возвращает левого потомка.
rightChild Возвращает правого потомка.
parent Возвращает родителя дерева.
setItem Устанавливает элемент, ассоциированный с деревом.
hasChildren Возвращает 1, если у дерева есть потомки.
isNull Возвращает 1, если дерево нулевое.
isShared Возвращает 1, если дерево структурно разделено.
isRoot Возвращает 1, если дерево имеет корень.
itemAt Возвращает элемент, ассоциированный с деревом.

 
Для схожих операций мы используем схожие имена. При разработке интерфейса мы также проверяем полученное решение на соответствие критериям достаточности, полноты и примитивности (см. главу 3).




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