|
Программирование >> Хронологические базы данных
Идентификатор объекта Каждый объект обладает уникальным идентификатором объекта (object ID - OID). Такие примитивные ( неизменяемые ) объекты, как целое число 3, являются самоидентифицирующимися, т.е. они сами являются собственными идентификаторами объекта. Изменяемые объекты, напротив, имеют в качестве идентификаторов адреса (концептуальные). Эти адреса можно использовать повсюду в базе данных как указатели (концептуальные) на данные объекты. Адреса объектов пользователю непосредственно не предоставляются, но они могут быть присвоены, например, программной переменной и переменным экземпляра в других объектах. Обсуждение этого вопроса будет продолжено в разделах 24.3 и 24.4. Кстати, отметим, что иногда можно встретить утверждения о том, что, с точки зрения пользователя, преимущество объектных систем заключается в абсолютной идентичности двух разных объектов, т.е. они могут быть дубликатами по отнощению друг к другу, но отличаться своими идентификаторами. Однако, с точки зрения автора этой книги, подобное утверждение обманчиво. Ибо каким же образом пользователь действительно сможет внещне различить оба объекта? (Более подробно этот вопрос описан в [5.3], [5.6] и особенно - в [24.19].) 24.3. Еще раз об объектах и объектных классах Рассмотрим более сложный пример с двумя объектными классами: DEPT (Отдел) и ЕМР (Сотрудник). Предположим, что в системе уже были описаны определяемые пользователем классы MONEY (Деньги) и JOB (Работа), а класс CHAR (Символьная переменная) является встроенным. Тогда операции, необходимые для создания классов DEPT и ЕМР, могут выглядеть следующим образом (с использованием некоторого гипотетического синтаксиса). CLASS DEPT PUBLIC ( DEPT# CHAR, DNAME CHAR, BUDGET MONEY, MGR REF ( EMP ), EMPS REF ( SET ( REF ( EMP ) ) ) ) ... METHODS ( HIREJMP ( REF ( EMP )) ... код ... , FIRE EMP ( REF ( EMP )) ... код ...,...)... ; CLASS EMP PUBLIC ( EMPt CHAR, ENAME CHAR, SALARY MONEY, POSITION REF ( JOB ) ) ... METHODS ( ... ) ... ; Необходимо отметить несколько важных особенностей. 1. В этом примере описание отделов и сотрудников построено на основе иерархии вложения, в которой объекты ЕМР концептуально содержатся внутри объектов DEPT. Таким образом, объект класса DEPT содержит открытую переменную экземпляра MGR, представляющую менеджера отдела, а также переменную EMPS, представляющую сотрудников отдела. Точнее, объекты класса DEPT содержат открытую переменную экземпляра MGR, значение которой является ссылкой (REF) на объект, описывающий некоторого сотрудника, и переменную EMPS, значение которой является совокупностью ссылок на объекты других сотрудников. (Под ссылкой здесь подразумевается идентификатор объекта, который подробнее описан ниже.) Понятие иерархии вложения в более щирокой форме будет представлено несколько ниже. 2. В данном примере в объекты класса ЕМР не была включена некоторая переменная экземпляра, содержащая идентификатор объекта отдела DEPT или же значение номера отдела DEPTi (переменная экземпляра для внешнего ключа ). Это решение согласуется с выбранным нами методом представления связи между отделами и сотрудниками с помощью иерархии вложения. Однако это также означает, что не существует возможности прямого перехода от заданного объекта класса ЕМР к соответствующему ему объекту класса DEPT. Подробнее данный вопрос обсуждается в разделе 24.5. 3. Обратите внимание, что определение каждого класса содержит определения (подробности кода в них опущены) методов, которые применяются к объектам этого класса. Целевыми классами для подобных методов являются, безусловно, классы, определение которых включает определение данного метода. На рис. 24.4 приведено несколько примеров экземпляров объектов для определенных ранее классов DEPT и ЕМР. Рассмотрим объект ЕМР, показанный в верхней части рисунка (с идентификатором (OID) ееё), который содержит перечисленные ниже компоненты. Неизменяемый объект Е001 (символьная строка) в открытой переменной экземпляра EMPi Неизменяемый объект Smith (другая символьная строка) в открытой переменной экземпляра ENAME Неизменяемый объект $50 ООО определенного пользователем класса MONEY в открытой переменной экземпляра SALARY Идентификатор (OID) объекта определенного пользователем класса JOB в открытой переменной экземпляра POSITION Объект ЕМР также включает по крайней мере две закрытые переменные, одна из которых (OID) содержит идентификатор еее самого объекта ЕМР, а другая (CLASS) - идентификатор, определяющий класс объекта (class-defming object- CDO) для объектов сотрудников, что позволяет найти код методов данного объекта. Замечание. Эти два идентификатора физически могут храниться как вместе с объектом, так и отдельно от него. Например, значение еее необязательно должно храниться как часть соответствующего объекта ЕМР; необходимо только, чтобы в приложении был задан некоторый способ обнаружения объекта ЕМР по данному значению еее (т.е. чтобы Отметим, что в нашем гипотетическом синтаксисе понятия модели и реализации смешиваются (хотя это и нежелательно, но весьма типично). Кроме того, в [13.11] доказано, что, несомненно, отделы и сотрудники - это плохие примеры для объектных классов! Однако данный вопрос мы здесь обсуждать не будем, поскольку это слишком далеко увело бы нас от основной темы. было задано некоторое отображение величины еее на физический адрес объекта ЕМР). Однако концептуально пользователь всегда может представить себе идентификатор объекта как часть этого объекта.
CLASS Объект CDO для класса ЕМР JOB (например) OID ddd DEPT# DNAME Mktg BUDGET $1 ООО ООО EMPS (например) CLASS CDO для класса DEPT Го ю -♦jSSS CLASS Идентификаторы (OID) объектов класса EMP J CDO для класса SET (REF(EMP)) Puc. 24.4. Пример экземпляров объектов классов DEPT и ЕМР Теперь рассмотрим объект DEPT, расположенный в центре рисунка с идентификатором (OID) ddd, который содержит перечисленные ниже объекты. Неизменяемый объект D01 (символьная строка) в открытой переменной экземпляра DEPT# Неизменяемый объект Mktg (другая символьная строка) в открытой переменной экземпляра DNAMEt Неизменяемый объект $1 ООО ООО (другая символьная строка) определенного пользователем класса MONEY в открытой переменной экземпляра BUDGET Идентификатор еее изменяемого объекта определенного пользователем класса ЕМР в открытой переменной экземпляра MGR (это идентификатор объекта, представляющего менеджера отдела) Идентификатор sss изменяемого объекта определенного пользователем класса SET(REF(EMP)) в открытой переменной экземпляра EMPS, которая подробнее описана ниже Две закрытые переменные экземпляра, содержащие идентификатор (OID) ddd объекта DEPT и идентификатор соответствующего объекта, определяющего класс Объект с идентификатором sss состоит из набора идентификаторов индивидуальных (изменяемых) объектов класса ЕМР, а также обычных закрытых переменных экземпляра.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |