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


Неограниченная универсальность - часть 2


capacity require n >= 1; n <= capacity do Result := (n \\ capacity) + 1 end invariant 0 <= count; count <= capacity; first >= 1; next >= 1 (not full) implies ((first <= capacity) and (next <= capacity)) (capacity = 0) implies full -- Элементы, если они есть, появляются в позициях массива first, ... next - 1 end

Реализации ограниченной очереди, приведенные ранее в этой книге, основывались на технике, сохраняющей один пустой элемент. Здесь же заполняется все доступное пространство, но хранится число элементов очереди. Никаких особых причин в выборе варианта нет, это лишь демонстрация различных приемов реализации.

Для получения эквивалента родового порождения (для получения очереди с элементами нужного типа) необходимо, как и в примере с COMPARABLE, определить потомков QUEUABLE:

class INTEGER_QUEUABLE inherit QUEUABLE creation put feature -- Initialization put (n: INTEGER) is -- Инициализация значением n do item := n end feature -- Access item: INTEGER feature {NONE} -- Implementation item_anchor: INTEGER is do end end

Подобным образом следует поступить при порождении STRING_QUEUABLE и т. д. Затем следует объявить соответствующих потомков QUEUE, переопределив item_anchor в каждом из них.

Эмуляция неограниченной универсальности

Эмуляция неограниченной универсальности наследованием возможна через обертывающие классы и соответствующие обертывающие объекты.




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