Скачиваний:
77
Добавлен:
02.05.2014
Размер:
2.54 Mб
Скачать

24.3. Еще раз об объектах и объектных классах

Рассмотрим более сложный пример с двумя объектными классами: DEPT (Отдел) и ЕМР (Сотрудник). Предположим, что в системе уже были описаны определяемые пользователем классы MONEY (Деньги) и JOB (Работа), а класс CHAR (Символьная переменная) является встроенным. Тогда операции, необходимые для создания классов DEPT и ЕМР, могут выгля­деть следующим образом (с использованием некоторого гипотетического синтаксиса).

CLASS DEPT

PUBLIC ( DEPTl CHAR,

DNAME CHAR,

BUDGET MONEY,

MGR REF ( EMP ),

EMPS REF ( SET ( REF ( EMP ) ) ) ) ... METHODS ( HIRE_EMP { REF ( EMP )) ... КОД ... ,

FIRE_EMP { REF ( EMP ) ) ... код ... , ... ) ... ;

CLASS EMP

PUBLIC ( EMPi CHAR,

ENAME CHAR,

SALARY MONEY,

POSITION REF ( JOB ) ) ... METHODS ( ... ) ... ;

Необходимо отметить несколько важных особенностей.

1. В этом примере описание отделов и сотрудников построено на основе иерархии вложения, в которой объекты ЕМР концептуально содержатся внутри объектов DEPT. Таким образом, объект класса DEPT содержит открытую переменную экземпляра MGR, представляющую менеджера отдела, а также переменную EMPS, представляющую со­трудников отдела. Точнее, объекты класса DEPT содержат открытую переменную эк­земпляра MGR, значение которой является ссылкой (REF) на объект, описывающий не­которого сотрудника, и переменную EMPS, значение которой является совокупностью ссылок на объекты других сотрудников. (Под ссылкой здесь подразумевается иден­тификатор объекта, который подробнее описан ниже.) Понятие иерархии вложения в более широкой форме будет представлено несколько ниже.

  1. В данном примере в объекты класса ЕМР не была включена некоторая переменная эк­земпляра, содержащая идентификатор объекта отдела DEPT или же значение номера отдела DEPTt (переменная экземпляра для "внешнего ключа"). Это решение согласу­ется с выбранным нами методом представления связи между отделами и сотрудника­ми с помощью иерархии вложения. Однако это также означает, что не существует возможности прямого перехода от заданного объекта класса ЕМР к соответствующему ему объекту класса DEPT. Подробнее данный вопрос обсуждается в разделе 24.5.

  2. Обратите внимание, что определение каждого класса содержит определения (подробности кода в них опущены) методов, которые применяются к объектам это­го класса. Целевыми классами для подобных методов являются, безусловно, клас­сы, определение которых включает определение данного метода6.

На рис. 24.4 приведено несколько примеров экземпляров объектов для определенных ранее классов DEPT и ЕМР. Рассмотрим объект ЕМР, показанный в верхней части рисунка (с идентификатором (OID) еее), который содержит перечисленные ниже компоненты.

  • Неизменяемый объект 'Е001' (символьная строка) в открытой переменной экзем­пляра ЕМР#

  • Неизменяемый объект 'Smith' (другая символьная строка) в открытой перемен­ной экземпляра ENAME

  • Неизменяемый объект '$50 ООО' определенного пользователем класса MONEY в от­крытой переменной экземпляра SALARY

  • Идентификатор (OID) объекта определенного пользователем класса JOB в откры­той переменной экземпляра POSITION

Объект ЕМР также включает по крайней мере две закрытые переменные, одна из кото­рых (0ID) содержит идентификатор еее самого объекта ЕМР, а другая (CLASS) — иденти­фикатор, определяющий класс объекта (class-defining object— CDO) для объектов со­трудников, что позволяет найти код методов данного объекта.

6 Отметим, что в нашем гипотетическом синтаксисе понятия модели и реализации смешива­ются (хотя это и нежелательно, но весьма типично). Кроме того, в [13.11] доказано, что, несо­мненно, отделы и сотрудники — это плохие примеры для объектных классов! Однако данный вопрос мы здесь обсуждать не будем, поскольку это слишком далеко увело бы нас от основной темы.

Замечание.Эти два идентификатора физически могут храниться как вместе с объек­том, так и отдельно от него. Например, значение еее необязательно должно храниться как часть соответствующего объекта ЕМР; необходимо только, чтобы в приложении был задан некоторый способ обнаружения объекта ЕМР по данному значению еее (т.е. чтобы

было задано некоторое отображение величины еее на физический адрес объекта ЕМР). Однако концептуально пользователь всегда может представить себе идентификатор объ­екта как часть этого объекта.

CLASS I CDO для класса EMP

Гою"

■—► j^eee

(например) ■

HoiD

DEPT#

DNAME

BUDGET

MGR

EMPS

CLASS

D01

Mktg

$1 000 000

CDO для класса DEPT

(например) •

OID sss

CLASS

Идентификаторы (OID) объектов класса EMP

Соседние файлы в папке Дейт К. Дж. Введение в системы баз данных [7 издание]