Введение в системы БД (542480), страница 250
Текст из файла (страница 250)
Переменные экземпляра Рассмотрим более подробно концепцию переменных экземпляра, в отношении которой у специалистов все еше нет единства мнений. Как утверждалось ранее, в истинно объектной системе переменные экземпляра должны быть полностью скрыты от пользователя, однако большинство систем не являются действительно объектными. Поэтому на практике необходимо различать открытые и закрытые переменные экземпляра, последние из которых действительно скрыты для внешнего мира, тогда как первые — нет. 4 Выделение одного аргул~ента в качестве особого может упростить выполнение скоте.чой процесса связывания ао время выполнения, который был описан в главе )9 Однако такой подход имеет и недостатки; по крайней мере, это может усложнить запись выполняемого «ода для соответствуюи!его метода. При традиционном подходе бконечно, если есть из чего выбирать, т.е. если есть несколько аргулчентов) целевой аргумент выбирается произвольно.
951 Глава 24. Объектные базы данных Предположим, что имеется объектный класс отрезков линии Р1МЕЯЕС. Будем считать, что каждый отрезок имеет начало (точка ЯТАНТ) и конец (точка ЕМР). Чтобы "получить'* значения координат этих точек для заданного сегмента 1в, обычно используются выражения наподобие 1в. ЕТАЯ и 1в. ЕМР. Таким образом, ЯТАНТ и ЕЮ вЂ” открытые переменные экземпляра. Заметим, что по определению доступ к таким переменным должен осуществляться с помощью специального синтаксиса (обычно используется точка после имени объекта, как в нашем примере). Если физическое представление отрезков линии заменить, например, комбинацией координат средней точки (М1РР01МТ), длины отрезка (ЬЕМСТН) и его наклона (Я)ЛРЕ), в любой программе, которая содержит такие выражения, как 1я.ЯТАНТ и 1я.
ЕЮ, возникнет ошибка. Другими словами, будет утрачена независимость данных. Обратите внимание, что открытые переменные экземпляра не являются логически необходимыми. Предположим, что для получения значений переменных экземпляра отрезка линии определены методы 6ЕТ ЯТАНТ, СЕТ ЕМР, СЕТ И1РР01МТ, СЕТ ЬЕМСТН и СЕТ ЯЬОРЕ. Тогда пользователь сможет "получить" значения координат начала, конца, средней точки отрезка 1в, его длины и наклона, вызвав методы СЕТ ЯТАНТ(1в), СЕТ ЕМР(1в), СЕТ И1РР01МТ(1я), СЕТ ЬЕМСТН(1в) и СЕТ ЯЬОРЕ(1в) соответственно. Однако в этом случае уже не имеет значения, каково действительное физическое представление отрезка — вполне достаточно, чтобы при каждом его изменении соответствующим образом были изменены и СЕТ-методы.
Более того, не было бы ошибкой, если бы пользователю разрешалось применять выражения наподобие 1в. ЯТАНТ в качестве сокращения для выражения вызова метода 6ЕТ СТАЕТ(1в). Обратите внимание, что для использования такого сокращения объект вовсе не обязательно должен содержать открытую переменную экземпляра ЯТАНТ. К сожалению, в реальных системах обычно не придерживаются такого подхода. Как правило, все открытые переменные экземпляра фактически отражают физическое представление объекта (по крайней мере частично, хотя могут существовать и некоторые дополнительные переменные экземпляра, которые являются действительно закрытыми).
Поэтому в соответствии со сложившейся практикой будем считать, что, если не указано противное, объекты предоставляют определенные открытые переменные экземпляра, хотя это понятие логически излишне. В связи со сказанным выше необходимо рассмотреть еше один практический случай. Предположим, что определенные аргументы (которые пользователь в первом приближении может считать арзументами — "переменными экземпляра" ) требуются для создания объектов специфического классаз.
Однако отсюда вовсе не следует, что подобные "переменные экземпляра" могут применяться для любых целей. Пусть, например, для создания объекта отрезка линии необходимы значения координат точек ЯТАНТ и ЕЮ. Однако отсюда не слелует, что всегда можно будет составить запрос, например, лля получения сведений обо всех отрезках линий, которые имеют одни и те же заданные координаты точки ЯТАНТ. Возможность выполнения такого запроса зависит от того, был ли определен подходящий дпя этого случая метод.
Наконец следует отметить, что некоторые системы полдерживают особый вид переменных экземпляра, называемых защищенными. Если объекты класса С имеют защищенную переменную экземпляра Р, то эта переменная лоступна только для методов, определенных лля класса С, и для методов, определенных для любого подкласса (на любом уровне) класса С. Подклассы кратко описаны в подразделе 24.3. З Рассматриваемые объекты доежны быть, между прочим, изменяемыми (почему?!. 952 Часть Ь'1. Объектные и объектно-реляз(ионные базы данньп Идентификатор объекта Каждый объект обладает уникальным идентификатором объекта (оЬ)ес1 !!3 — О!О). Такие примитивные ("неизменяемые") объекты, как целое число 3, являются саиоидентифипирующииися, т.е, они сами являются собственными идентификаторами объекта. Изменяемые объекты, напротив, имеют в качестве идентификаторов адреса (концептуальные), Эти алреса можно использовать повсюду в базе данных как указатели (концептуальные) на данные объекты.
Адреса объектов пользователю непосредственно не предоставляются, но они могут быть присвоены, например, программной переменной и переменным экземпляра в других объектах. Обсуждение этого вопроса будет продолжено в разделах 24.3 и 24.4. Кстати, отметим, что иногда можно встретить утверждения о том, что, с точки зрения пользователя, преимущество объектных систем заключается в абсолютной идентичности двух разных объектов, т.е. они могут быть дубликатами по отношению друг к другу, но отличаться своими идентификаторами. Однако, с точки зрения автора этой книги, подобное утвержление обманчиво. Ибо каким же образом пользователь действительно сможет внешне различить оба объекта? (Более подробно этот вопрос описан в (5.3), (5.6) и особенно — в (24.19].) 24.3. Еще раз об объектах и объектных классах СЬАЯЯ ОЕРТ РОВЫС ( ОЕРТ() ОМАНЕ ВОООЕТ МОК ЕМРБ МЕТНООБ ( Н1КЕ ЕМР Р1КЕ ЕМР СНАМ, СМАК, МОННУ, КЕР ( ЕМР ), КЕР ( ЯЕТ ( КЕР ( ЕМР ) ) ) ) ( КЕР ( ЕМР ) ) ...
ход ... ( КЕР ( ЕМР ) ) ... код ... , ... ) СБАВЯ ЕМР РОВ11С ( ЕМР() СНАК, ЕМАМЕ СМАК, БАЕ АКТ МОНЕТ, РОБ1Т1ОМ КЕР ( ЗОВ ) ) МЕТНООБ ( " ° ) Необходимо отметить несколько важных особенностей. 1. В этом примере описание отделов и сотрудников построено на основе иерархии вложения, в которой объекты ЕМР концептуально содержатся внутри объектов ОЕРТ. Таким образом, объект класса ОЕРТ содержит открытую переменную экземпляра МОК, 953 Глава 24. Объектные базы данных Рассмотрим более сложный пример с двумя объектными классами: ОЕРТ (Отдел) и ЕМР (Сотрудник).
Предположим, что в системе уже были описаны определяемые пользователем классы МОННУ (Деньги) и ЛОВ (Работа), а класс СНАК (Символьная переменная) является встроенным. Тогда операции, необходимые для создания классов ОЕРТ и ЕМР,могут выглядеть следующим образом (с использованием некоторого гипотетического синтаксиса). прелставляюшую менеджера отдела, а также переменную ЕМРЯ, представляющую сотрудников отдела. Точнее, объекты класса ОЕРТ содержат открытую переменную экземпляра ИОЕ, значение которой является ссылкой (ЕЕГ) на объект, описывающий некоторого сотрудника, и переменную ЕИРЯ, значение которой является совокупностью ссылок на объекты лругнх сотрудников.
(Под ссылкой здесь подразумевается идентил)зикапзор объекта, который подробнее описан ниже.) Понятие иерархии вложения в более широкой форме будет представлено несколько ниже. 2. В данном примере в объекты класса ЕИР не была включена некоторая переменная экземпляра, содержащая идентификатор объекта отдела ОЕРТ нли же значение номера отдела ОЕРТ0 (переменная экземпляра для "внешнего ключа"). Это решение согласуется с выбранным нами методом представления связи между отделами и сотрудниками с помощью иерархии вложения. Однако это также означает, что не существует возможности прямого перехода от заданного объекта класса ЕИР к соответствующему ему объекту класса ОЕРТ. Подробнее данный вопрос обсуждается в разделе 24.5.