Работа с утилизированными объектами
Работа с утилизированными объектами
Для реализации 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)
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Из PHP в Excel: работа с COM-объектами
Из PHP в Excel: работа с COM-объектами Данная серия статей посвящена созданию документов Excel при помощи PHP. Данная возможнось может понадобиться, например, если нужно предоставить пользователю загружаемые данные в виде листов Excel. Это могут быть прайсы на продукцию,
Глава 8 Работа с растровыми объектами
Глава 8 Работа с растровыми объектами Мы убеждены, что растровые объекты лучше всего обрабатывать в редакторах растровой графики и только после этого использовать их в CorelDRAW. Частично эту мысль разделяют и разработчики программы, потому что простейшее действие со
Глава 11 Работа с объектами
Глава 11 Работа с объектами Теперь, когда мы научились создавать объекты Adobe InDesign, поговорим о том, что с ними делать. Этот разговор вынесен в отдельную главу по очень простой причине: все операции по перемещению, трансформации, копированию выполняются, по сути, одинаково
Работа с MBV-объектами
Работа с MBV-объектами Наши первые приложения удаленного взаимодействия позволяли доступ клиентов к одному WKO-типу. Напомним, что WKO-типы (по определению) являются MBR-типами, поэтому доступ клиента к ним осуществляется через агента-посредника. В противоположность этому,
Работа с объектами соединения
Работа с объектами соединения Первым шагом в работе с поставщиком данных является создание соединения с источником данных, для чего мы используем объект соединения (который, как вы помните, получается из Disconnection). Типы соединения .NET получают на вход форматированную
Работа с объектами команд
Работа с объектами команд Теперь, когда вы понимаете роль объекта соединения, мы выясним, как предъявить SQL-запрос базе данных. Тип SqlCommand (который получается из DbCommand) является объектом представлением SQL-запроса, имени таблицы или хранимой процедуры. Вид соответствующей
Работа с объектами чтения данных
Работа с объектами чтения данных После создания активного соединения и SQL-команды следующим шагом является предъявление запроса источнику данных. Как вы, наверное, догадываетесь, это можно сделать несколькими способами. Тип DbDataReader (реализующий IDataReader) обеспечивает самый
Работа с объектами параметризованных команд
Работа с объектами параметризованных команд Показанная выше программная логика вставки, обновления и удаления работает так, как и ожидается, однако обратите внимание на то, что каждый из SQL-запросов здесь представлен "жестко" закодированными строковыми литералами. Вы,
Завершение построения модели: работа с объектами
Завершение построения модели: работа с объектами Любой дом невозможен без крыши и практически не обходится без подвальных помещений и лестниц. Этот раздел продолжит рассмотрение примера, начатого ранее, и послужит руководством для использования перечисленных объектов
Глава 4 Режим конструирования и работа с объектами
Глава 4 Режим конструирования и работа с объектами • Дополнительные объекты конструирования• Воспроизведение окружающего рельефа• Создание сечений• Итог: расширенный порядок построения модели дома в ArConИз предыдущей главы вы смогли узнать, с чего нужно начинать
Работа с объектами и ссылками
Работа с объектами и ссылками Вернемся к более приземленным проблемам и рассмотрим, как программные системы работают с объектами, как создают и используют гибкие структуры данных.
Что происходит с объектами
Что происходит с объектами ОО-программа создает объекты. Предыдущая лекция показала, как полезно полагаться на динамическое создание для получения гибких объектных структур, подстраивающихся автоматически к нуждам
Работа с объектами и их экземплярами
Работа с объектами и их экземплярами Перед тем как начать работу с экземпляром какого-либо объекта, его нужно создать. Создание экземпляра объекта выполняется с помощью оператора new: <Переменная> = new <Имя объекта>([<Список параметров, разделенных запятыми>]) После
Практическая работа 53. Запуск Access. Работа с объектами базы данных
Практическая работа 53. Запуск Access. Работа с объектами базы данных Задание. Ознакомиться с окном программы Access. Запустить и рассмотреть учебную базу данных. ВНИМАНИЕ При выполнении задания помните, что все внесенные в базу данных изменения записываются немедленно и их