Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Работа с утилизированными объектами
Для реализации fresh и recycle, можно среди других возможных вариантов представить available как стек: fresh будет удалять элемент из стека, а recycle будет помещать элемент в стек. Создадим класс STACK_OF_LINKABLES для этого случая и добавим следующие закрытые компоненты в класс LINKED_LIST (В упражнении У23.1. требуется определить, будет ли корректным появление у функции fresh побочных эффектов.):
available: STACK_OF_LINKABLES fresh (v: ELEMENT_TYPE): LINKABLE is - Новый элемент со значением v, для повторного - использования во вставке do if available.empty then - Создание нового элемента create Result.make (v) else - Повторное использование linkable Result: = available.item; Result.put (v); available.remove end end recycle (dead: LINKABLE) is -Возвращает dead в список достижимых элементов. require dead /= Void do available.put (dead) end
Мы можем объявить класс STACK_OF_LINKABLES следующим образом:
class STACK_OF_LINKABLES feature LINKED_LIST item: LINKABLE - Элемент в вершине стека empty: BOOLEAN is - нет элементов в стеке? do Result: = (item = Void) end put (element: LINKABLE) is - Добавить элемент в вершину стека. require element /= Void do element.put_right (item); item: = element end remove is - Удалить последний добавленный элемент. require not empty do item: = item.right end end
Рис. 9.13. STACK_OF_LINKABLES Представление стека использует все преимущества поля right, присутствующего в каждом элементе LINKABLE, связывая все утилизированные элементы и предоставляя, тем самым, дополнительную память для размещения новых элементов списка LINKED_LIST. Класс LINKABLE должен экспортировать свои компоненты right и put_right в класс STACK_OF_LINKABLES. Компонент available является атрибутом класса. Это означает, что каждый связный список будет иметь свой собственный стек. Конечно, память можно было бы использовать эффективнее в системе, содержащей несколько списков и единственный стек для всех удаленных элементов. Такая техника однократных функций (once functions), будет представлена позже; применение ее для available означает, что только один экземпляр класса STACK_OF_LINKABLES будет существовать до конца выполнения системы, что означает достижение поставленной цели. (Упражнение У9.3. и У9.4. Об однократных функциях см. лекцию 18)
|