Присоединение ссылки к объекту

Присоединение ссылки к объекту

Классы, появляющиеся в этой лекции, не имели подпрограмм - у них были только атрибуты. Как отмечалось, такие классы почти бесполезны, так как у них нет способа изменить значение атрибутов. Необходимы способы модификации ссылок, не использующие при этом инструкций в духе языков Pascal-C-Java-C++, подобных присваиванию: my_beloved.loved_one := me (напрямую изменяющих у объекта поле loved_one), что нарушает принцип скрытия информации и синтаксически некорректно в нашей нотации.

Для модификации полей объекта клиент обязан вызвать подпрограмму, специально поставляемую разработчиком класса для этих целей. Давайте включим в класс PERSON1 процедуру, позволяющую модифицировать поле loved_one. Вот результат:

class PERSON2 feature

name: STRING

loved_one, landlord: PERSON2

set_loved (l: PERSON2) is

-- Присоединить поле loved_one текущего объекта к объекту l.

do

loved_one := l

end

end

Процедура set_loved присваивает ссылочному полю loved_one текущего экземпляра PERSON2 значение другой ссылки l. Ссылочное присваивание (левая и правая части являются ссылками) присваивает значение источника (правой части) целевой ссылке (слева).

Эффект ссылочного присваивания очевиден: целевая ссылка становится присоединенной к объекту, к которому присоединен источник - или становится void, если такое значение имеет источник. Предположим, например, что мы начинаем с ситуации, изображенной на рис.8.12 , где поля landlord и loved_one всех изображенных объектов пока пусты.

Рис. 8.12.  Перед присваиванием ссылке

Предположим, что выполняется вызов процедуры:

a.set_loved (r)

Сущность a присоединена к объекту O1, а сущность r - к O3. В результате выполнения процедуры set_loved выполнится присваивание:

loved_one := l

Здесь в роли текущего объекта выступает объект O1, сущности l и r имеют одинаковое значение - ссылки на объект O3. В результате изменится значение поля loved_one объекта O1 - ссылка присоединится к другому объекту O3, как показано на следующем рисунке:

Если бы r было пустой ссылкой, то такой же в результате присваивания стала бы и ссылка в поле loved_one объекта O1.

Рис. 8.13.  После присваивания ссылки

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Ссылки

Из книги Вальсируя с медведями автора Листер Тимоти


6.5.3 Присоединение области к процессу

Из книги Архитектура операционной системы UNIX автора Бах Морис Дж

6.5.3 Присоединение области к процессу Ядро присоединяет область к адресному пространству процесса во время выполнения системных функций fork, exec и shmat (алгоритм attachreg, Рисунок 6.19). Область может быть вновь назначаемой или уже существующей, которую процесс будет использовать


2.5. Ссылки

Из книги Единая система программной документации. ТРЕБОВАНИЯ К ПРОГРАММНЫМ ДОКУМЕНТАМ, ВЫПОЛНЕННЫМ ПЕЧАТНЫМ СПОСОБОМ автора Госстандарт СССР

2.5. Ссылки 2.5.1. В программных документах допускаются ссылки на стандарты (кроме стандартов предприятий), технические условия и другие документы (например, документы органов Государственного надзора, правила и нормы Госстроя СССР). При ссылках на стандарты и технические


Доступ к объекту Graphics вне обработчика Paint

Из книги Язык программирования С# 2005 и платформа .NET 2.0. [3-е издание] автора Троелсен Эндрю

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


4.3.Ссылки

Из книги Linux-сервер своими руками автора Колисниченко Денис Николаевич

4.3.Ссылки Иногда очень полезно, чтобы в каталоге находился один и тот же файл, но под разными именами. Можно просто скопировать этот файл в другой, но при этом неэффективно используется дисковое пространство. Для этих целей в ОС Linux существует специальный тип файлов —


16.3.1. Ссылки

Из книги Самоучитель работы на компьютере автора Колисниченко Денис Николаевич

16.3.1. Ссылки Итак, вы ввели адрес любого сайта в адресную строку браузера и нажали Enter. Если не знаете, что ввести, введите www.dkws.org.ua— этим вы не только увеличите посещаемость моего сайта, но и узнаете много интересного об операционных системах.Что произойдет дальше — после


Присоединение: две семантики - ссылок и значений

Из книги Основы объектно-ориентированного программирования автора Мейер Бертран

Присоединение: две семантики - ссылок и значений В этом разделе рассматривается специальная информация, и он может быть пропущен при первом чтении. Введение развернутых типов требует возвращения к рассмотрению двух фундаментальных операций, уже рассмотренных в этой


Присоединение

Из книги TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) автора Фейт Сидни М

Присоединение Семантика присваивания, как отмечалось, распространяется еще на одну операцию - передачу аргумента при вызове подпрограмм. Предположим, существует подпрограмма (процедура или функция) в форме:r (..., x: SOME_TYPE, ...)Здесь сущность x это один из формальных


Присоединение: ссылочное и копии

Из книги Программирование на языке Ruby [Идеология языка, теория и практика применения] автора Фултон Хэл

Присоединение: ссылочное и копии При изучении ссылочного присваивания мы уже познакомились с эффектом присоединения. Если источник и цель являются ссылками, то эффект присваивания: x := yи соответствующей передачи аргументов состоит в том, что x получает значение ссылки y.


Гибридное присоединение

Из книги Справочник по PHP автора

Гибридное присоединение В рассматриваемых до сих пор случаях источник и цель принадлежали одной категории - оба развернутого или ссылочного типа. Что если они из разных категорий? Вначале рассмотрим ситуацию, когда в присваивании x := y цель x развернутого типа, а источник y


Полиморфное присоединение

Из книги Офисный компьютер для женщин автора Пастернак Евгения

Полиморфное присоединение "Полиморфизм" означает способность обладать несколькими формами. В ОО-разработке несколькими формами обладают сущности (элементы структур данных), способные во время выполнения присоединяться к объектам разных типов, что контролируется


19.6.11 Ссылки

Из книги автора

19.6.11 Ссылки Чтобы включить в документ ссылку, нужно:? Использовать теги начала и конца ссылки? Указать URL связанного со ссылкой документа? Обеспечить метку для щелчка мышью (обычно выводится подчеркиванием или голубым цветом).Ниже показан пример ссылки. Символ А


11.2.1. Отправка объекту явного сообщения

Из книги автора

11.2.1. Отправка объекту явного сообщения В статическом языке вы считаете очевидным, что имя вызываемой функции «зашито» в программу, это часть исходного текста. Динамический язык обладает в данном отношении большей гибкостью.При любом вызове метода вы посылаете объекту


Символические ссылки. Жесткие ссылки.

Из книги автора

Символические ссылки. Жесткие ссылки. Немного теорииВ системах Unix довольно часто возникает необходимость иметь для одного и того же файла или каталога разные имена. При этом одно из имен логично назвать основным, а все другие - его псевдонимами. В терминологии Unix такие


Ссылки

Из книги автора

Ссылки На вкладке Ссылки собрано все, что касается расстановки по тексту различных ссылок и