Введение в системы БД (542480), страница 252
Текст из файла (страница 252)
Г Как уже подчеркивалось в разделе 24.2. в некоторых системач используются оба понятия — и "тип", и "класс". В этих систечох "псин" означаепс тип, т.е, содержание или сущность поняптя, а "класс" означает применение эпсого понятия, т.е. определенную коллекцию, или иногда реализацию данного типа.
В других системах данные терлсины используются иначе .. Лзы же по-прежнему будем употреолять термин "класс" для обозначения типа в том смысле, что и в главе 5. 958 Часть |~1. Обьектные и объектно-реляционньсе баэьс данных Поскольку одни объекты могут ссылаться на любые другие объекты с помошью идентификаторов, один объект может совместно использоваться несколькими другими объектами. В частности, один и тот же объект может одновременно относиться к нескольким различным коллекциям объектов. В продолжение рассматриваемого примера приведем еше одно выражение. СЬАЯЯ ЕМР СОЬЬ РОНЬТС ( ЕМРБ КЕР ( ЯЕТ ( КЕР ( ЕМР ) ) ) ) АЬЬ ЕМРЯ := ЕМР СОЬЬ НЕЮ ( ) АЬЬ ЕМРЯ АОО ( Е ) Пояснения ° Объект класса ЕМР СОЬЬ содержит одну открытую переменную экземпляра ЕМРБ, значением которой является указатель (ндентификатор) на изменяемый объект, значение которого представляет собой набор указателей на отдельные объекты класса ЕМР.
° А1Ь ЕМРЯ вЂ” это программная переменная, значением которой является идентификатор объекта класса ЕМР СОЬЬ. После выполнения операции присвоения она булет содержать идентификатор объекта, значением которого, в свою очередь, будет идентификатор нусшого множества идентификаторов объектов ЕМР.
° АНН вЂ” это метод объектов класса ЕМР СОЬЬ. В рассматриваемом примере данный метод применяется для объекта класса, идентификатор которого содержится в программной переменной АЬЬ ЕМРЯ, и предназначается для добавления идентификатора объекта ЕМР, который содержится в программной переменной Е, к набору идентификаторов (изначально пустому).
Причем идентификатор этого набора содержится в объекте ЕМР СОЬЬ, идентификатор которого находится в программной переменной А1Ь ЕМРБ. Рассмотрев приведенную выше последовательность операций, можно заметить, что переменная АЬЬ ЕМРЯ связана с набором объектов ЕМР, который в текуший момент содержит только один объект, а именно — объект, описывающий сотрудника с номером 'Е001'. (Помимо всего прочего, обратите внимание на то, что необходимо упомянуть значение ключа пользователя в последнем прелложении!) Конечно, в некоторый заданный момент может существовать любое количество разных и, возможно, перекрываюшихся "наборов сотрудников", например следуюших.
РКООКАММЕКЯ := ЕМР СОЬЬ НЕМ ( ) РКО6КАММЕКБ АОО ( Е ) Н16НЬУ РА10 := ЕМР СОЬХ НЕМ ( ) Н16НЬТ РА10 АОО ( Е ) Приведенный ниже пример Б(гЬ-выражения показывает, что в реляционных системах все может быть организовано совсем иначе.
СКЕЙТЕ ТАВЬЕ ЕМР ( ЕМРЯ Глава 24. Объектные базы данных КВАМЕ ЯАЬАКТ РОЯ1ТХОН ... ) В этом случае тип м коллекция создаются одновременно, причем сложный тип соответствует заголовку таблицы, а исходно пустая коллекция соответствует содержанию таблицы. Точно так же приведенное ниже БОЬ-выражение позволяет одновременно создать отдельную строку ЕМР и добавить ее к коллекции ЕМР. 1МЯЕВТ 1НТО ЕМР ( ... ) ЧАЬОЕЯ ( ... ) 7 Можно сделать вывод, что организация этих действий с помощью языка БОЬ характеризуется следующими особенностями. 1. Отдельный "объект" класса ЕМР не может существовать, не являясь частью некоторой "коллекции", фактически — какой-то единственной "коллекции" (подробности приведены ниже).
2. Не существует непосредственного способа создания двух различных "коллекций" объектов одного н того же "класса" ЕМР (подробности приведены ниже). 3. Не существует непосредственного способа совместного использования одного и того же "объекта" в нескольких "коллекциях" "объектов" ЕМР (подробности приведены ниже).
Именно такие претензии иногда можно услышать, однако они не выдерживают серьезной критики. Во-первых, для достижения равноценного эффекта в каждом случае может применяться релиционный метод использования внешнего ключа. Например, можно определить две базовые таблицы, РКООКАММЕКБ (программисты) и Н16НЬУ РА10 (высокооплачиваемые), каждая из которых состоит из номеров соответствующих сотрудников.
Во-вторых, что еше важнее, для достижения того же эффекта может быть применен реляционный метод с использованием представлений. Например, таблицы РВООВАММЕВЯ и Н16НЬТ РА10 можно определить как представлении, созданные на основе базовой таблицы ЕМР. СКЕАТЕ Ч1ЕН РВО6КАММЕКЯ АБ ЯЕЬЕСТ ЕМР)), КВАМЕ, БАЬАКУ, РОЯ1Т1ОН РВОМ ЕМР ННЕВЕ РОЯ1Т1ОН = 'Ргопгапаег' СКЕАТЕ Ч1ЕН Н16НЬТ РА10 АЯ ЯЕЬЕСТ ЕМР)), ЕНАМЕ, ЯА1,АРУ, РОБ1ТТОМ РВОМ ЕМР НЕВКЕ ЯАЬАКУ > <некоторое значение, например 75 000> Теперь один н тот же "объект" сотрудника можно одновременно разместить в двух или более "коллекциях". Кроме того, участие в коллекциях, которые являются представлениями, управляется системой автоматически, а не программистом вручную. Завершая эту тему, следует упомянуть об одной интересной параллели, существующей между изменяемыми объектами объектных систем и явно заданными динамическими переменными некоторых языков программирования (например, базовыми переменными языка Р1Л).
Как и в случае изменяемых объектов данного класса, может суше- 960 Часть У1. Объектные и объектнореляционные базы данньп ствовать любое количество отдельных явных динамических переменных данного типа, память для которых выделяется во время выполнения явно заданными указаниями программиста. Более того, эти отдельные переменные, как и отдельные изменяемые объекты, не имеют инея, а потому на них можно ссылаться только с помошью указателей.
Например, в языке РЕ/1 можно записать такую последовательность выражений. /' ХХХ - базовая переменная */ /* Р— указатель »/ /» создание нового экземпляра ХТХ, »/ /» иа которнй указмвает Р */ /» присвоение значения 3 экземпляру */ /' ХХХ, на которнй указмвает Р '/ ОСЬ ХУХ 1КТЕОЕЕ ВАБЕО ОСЕ Р РО1МТЕЕ ; АЬЬОСАТЕ ХУХ БЕТ ( Р ); Р -> ХТЕ = 3 Этот записанный на языке РЕ/1 код очень похож на рассмотренный ранее объектный код. В частности, объявление базовой переменной подобно объявлению класса объектов, а операция А? ЕОСАТŠ— созданию нового экземпляра объекта этого класса. Таким образом, основная причина, по которой в объектной модели необходимы идентификаторы, заключается в том, что те объекты, которые они идентифицируют, не обладают уникальными именами (точно так же, как базовые переменные в языке РЕ/1).
Иерархии классов 961 Глава 24. Объектные базы данных Описание концепций объектного подхода было бы неполным без рассмотрения иерархий классов (их не следует путать с иерархиями вложения). Однако объектная концепция "иерархии классов", в сушности, является тем же, что и концепция иерархии типов, рассмотренная в главе 19. Следовательно, здесь можно ограничиться несколькими краткими определениями (большей частью это перефразированные выражения из главы 19) и соответствуюшими примерами. Замечание.
Напомним, что в объектном мире, как и в остальных случаях, все еше нет полной согласованности относительно концепции абстрактной .модели наследования, поэтому различные системы наследования существенно отличаются одна от другой на уровне деталей. Начнем с того, что объектный класс У является подклассом класса Х, а объектный класс Х вЂ” суперклассом объектного класса 1 тогда и только тогда, когда каждый объект класса 1 обязательно является и объектом класса Х(т.е.
"1 1БА Х"). В этом случае объект класса 1 наследует переменные экземпляра и методы класса Х. Наследование переменных экземпляра обычно называют наследованием структуры, а наследование методов — наследованием поведения. В истинно объектных системах не может быть наследования структуры, а возможно лишь наследование поведения (по крайней мере для скаляров и инкапсулированных объектов), поскольку нет структуры для наследования (т.е. пользователю никакая структура не видна).
Однако на практике объектные системы обычно несовершенны и в какой-то мере поддерживают структурное наследование, которое, подчеркиваем, означает наследование открытых переменных экземпляра. Если класс Т является подклассом класса Х, то пользователю предоставляется возможность применять объект класса 1 вместо объекта класса Х везде, где это допустимо, т.е. в качестве аргумента различных методов. Этот принцип называется принципом подстановки и весьма полезен для повторного использования кода. Однако, посколь- ку в объектных системах не всегда четко прослеживается разница между значениями и переменными (т.е, между неизменяемыми и изменяемыми объектами), возникают проблемы различения значения и возможного замещения переменной (этот вопрос обсуждается в главе 19).