Изучение того, как сделать объекты сохранямыми (persistent), заставит нас продолжить изучение свойств идентичности объектов. (См. 'Идентичность объектов', лекция 13 курса 'Основы объектно-ориентированного проектирования')
Объявление ссылок
Класс
class BOOK3 feature
title: STRING
date, page_count: INTEGER
author: WRITER -- Новый атрибут.
end
Объявленный тип дополнительного атрибута
class C feature ... end
то объявление некоторой сущности типа
x: C
обозначает значения, являющиеся ссылками на потенциальные объекты типа
Ссылка на себя
Ничто не препятствует объекту O1 в определенный момент выполнения системы содержать ссылку, присоединенную к самому O1. Такая ссылка на себя может быть косвенной. В ситуации на рис.8.7 объект, имеющий значением поля
Рис. 8.7. Прямые и косвенные ссылки на себя
Такие циклы в динамических структурах возможны, только если клиентские отношения между соответствующими классами также содержат прямые или косвенные циклы. Объявление класса
class PERSON1 feature
name: STRING
loved_one, landlord: PERSON1
end
содержит прямой цикл (
Обратное утверждение неверно - присутствие цикла в объявлении класса не означает, что циклы обязательно появятся в структурах времени выполнения. Можно объявить класс
class PERSON2 feature
mother, father: PERSON2
end
Класс является собственным клиентом. Однако если он моделирует соответствующие именам атрибутов отношения между людьми, то структуры времени выполнения никогда не будут содержать циклов, поскольку ни один человек не может быть собственным родителем или предком.
Взгляд на структуру объектов периода выполнения
На основе предшествующего рассмотрения выясняется в первом приближении структура ОО- системы в процессе выполнения.
Рис. 8.8. Возможная структура объектов во время выполнения
Система состоит из нескольких объектов с различными полями. Некоторые поля содержат значения базовых типов, а другие являются пустыми или присоединенными ссылками на другие объекты. Каждый объект является экземпляром некоторого типа, основанного на классе (на рисунке тип указывается под объектом). Некоторые типы представлены единственным экземпляром, но гораздо чаще присутствует несколько экземпляров одного типа. На рис.8.8 тип
Подобная структура может показаться слишком запутанной. Впечатление от приведенной иллюстрации, демонстрирующей различные возможности, можно выразить выражением: 'блюдо спагетти'.
Это впечатление не совсем правильно. Впечатление простоты должен создавать программный текст, но не структура объектов периода выполнения. Текст отражает определенные отношения (такие как 'любит', 'имеет хозяина'). Конкретную структуру объектов периода выполнения можно назвать экземпляром таких отношений, она фиксирует связи между элементами данного набора объектов. Моделируемые отношения могут быть простыми, в то время как отношения индивидуумов конкретного множества объектов - достаточно сложными. Понятие 'любит' очень просто, однако любовные отношения конкретных людей могут быть безнадежно запутаны.
Во время выполнения могут неизбежно возникать структуры, содержащие много объектов и
