Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Работа с утилизированными объектами
Для реализации 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. Об однократных функциях см. Ошибка! Недопустимый объект гиперссылки.)
Date: 2015-12-13; view: 362; Нарушение авторских прав |