- •20.7. Средства sql
- •20.8. Резюме
- •21.1. Введение
- •21.2. Некоторые аспекты технологам поддержки принятия решений
- •21.3. Проектирование базы данных поддержки принятия решений
- •21.5. Хранилища данных и магазины данных
- •21.6. Оперативная аналитическая обработка
- •21.7. Разработка данных
- •21.8. Резюме
- •22.1. Введение
- •22.2. Хронологические данные
- •22.3. Основная проблема хронологических баз данных
- •22.4. Интервалы
- •22.5. Интервальные типы
- •22.6. Скалярные операторы для интервалов
- •22.7. Операторы обобщения для интервалов
- •22.8. Реляционные операторы для обработки интервалов
- •22.9. Ограничения, включающие интервалы
- •22.10. Операторы обновления, включающие интервалы
- •22.11. Проектирование базы данных
- •22.12. Резюме
- •23.1. Введение
- •23.2. Обзор основных концепций
- •23.3. Исчисление высказываний
- •23.4. Исчисление предикатов
- •23.5. Базы данных с точки зрения доказательно-теоретического подхода
- •23.6. Дедуктивные субд
- •23.7. Обработка рекурсивных запросов
- •23.8. Резюме
- •Часть VI
- •24.1. Введение
- •24.2. Объекты, классы, методы и сообщения
- •24.3. Еще раз об объектах и объектных классах
- •Cdo для класса set (ref(emp))
- •24.4. Простой пример
- •1 | Course с001 , с001 0ffs , с001 ny offs |
- •24.5. Дополнительные аспекты
- •24.6. Резюме
- •25.1. Введение
- •X2 rational, y2 rational ) ... ;
- •25.2. Первая грубейшая ошибка
- •25.3. Вторая грубейшая ошибка
- •25.4. Вопросы реализации
- •25.5. Преимущества реального сближения двух технологий
- •25.6. Резюме
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, значение которой является совокупностью ссылок на объекты других сотрудников. (Под ссылкой здесь подразумевается идентификатор объекта, который подробнее описан ниже.) Понятие иерархии вложения в более широкой форме будет представлено несколько ниже.
В данном примере в объекты класса ЕМР не была включена некоторая переменная экземпляра, содержащая идентификатор объекта отдела DEPT или же значение номера отдела DEPTt (переменная экземпляра для "внешнего ключа"). Это решение согласуется с выбранным нами методом представления связи между отделами и сотрудниками с помощью иерархии вложения. Однако это также означает, что не существует возможности прямого перехода от заданного объекта класса ЕМР к соответствующему ему объекту класса DEPT. Подробнее данный вопрос обсуждается в разделе 24.5.
Обратите внимание, что определение каждого класса содержит определения (подробности кода в них опущены) методов, которые применяются к объектам этого класса. Целевыми классами для подобных методов являются, безусловно, классы, определение которых включает определение данного метода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