Главная страница
Навигация по странице:

  • Структура: Структура объектной модели описываются с помощью трех ключевых понятий: инкапсуляция

  • Целостность данных

  • Средства манипулирования данными

  • Подведем теперь некоторые итоги

  • Объектная модель

  • Язык описания объектов

  • Язык объектных запросов

  • Связывание с ОО-языками

  • База данных-понятия. Классификация по


    Скачать 0.55 Mb.
    НазваниеКлассификация по
    АнкорБаза данных-понятия.docx
    Дата17.07.2018
    Размер0.55 Mb.
    Формат файлаdocx
    Имя файлаБаза данных-понятия.docx
    ТипДокументы
    #21614
    страница21 из 23
    1   ...   15   16   17   18   19   20   21   22   23

    6.3.Объектно-ориентированные СУБД.


    Термин "объект" в программной индустрии впервые был введен в языке Simula (1967 г.) и означал какой-либо аспект моделируемой реальности. Сейчас под объектом понимается "нечто, имеющее четко определенные границы" (определение известного американского специалиста Г.Буча). Объекты, обладающие одинаковыми свойствами, составляют классы (например, курица, пингвин и чайка - объекты класса "птицы"). Обычно класс описывается как новый тип данных, а объекты (экземпляры класса) - определенные на его основе переменных.

    6.3.1.Объектно-ориентированная парадигма.


    Сразу же необходимо заметить, что общепринятого определения "объектно-ориентированной модели данных" не существует. Сейчас можно говорить лишь о неком "объектном" подходе к логическому представлению данных и о различных объектно-ориентированных способах его реализации.

    Мы знаем, что любая модель данных должна включать три аспекта: структурный, целостный и манипуляционный. Посмотрим, как они реализуются на основе объектно-ориентированная парадигмы программирования:

    Структура:

    Структура объектной модели описываются с помощью трех ключевых понятий:

    • инкапсуляция - каждый объект обладает некоторым внутренним состянием (хранит внутри себя запись данных), а также набором методов - процедур, с помощью которых (и только таким образом) можно получить доступ к данным, определяющим внутреннее состояние объекта, или изменить их. Таким образом, объекты можно рассматривать как самостоятельные сущности, отделенные от внешнего мира. Пример:

    • Class Point { // вводим новый тип данных - объект "точка"

    • X,Y : int; // данные объекта - координаты точки

    • .........

    • Point(X : int, Y : int); // конструктор объекта - процедура, вызываемая при

    • // определении переменной на базе объекта и

    • // присваивающая значения его данным

    • .........

    • Draw(); // метод "нарисовать точку"

    • Erase(); // метод "стереть точку"

    • Move(newX,newY); // метод "переместить точку" (изменяет данные объекта)

    • int GetX(); // метод "получить значение поля X"

    • int GetY(); // метод "получить значение поля Y"

    • .........

    • // все методы должны быть описаны, например

    • // реализация метода Move:



    • Move(newX : int, newY : int) {

    • X=newX; // запись новых данных в объект

    • Y=newY; //

    • }

    • } // конец описания объекта



    • Begin // основная процедура программы



    • Point A(0,0); // создать новый объект и присвоить ему данные



    • for i=1 to 100 // создать цикл

    • A.Draw(); // нарисовать точку

    • A.Hide(); // стереть точку

    • A.Move(i,i*10); // присвоить экземпляру объекта новые данные

    • endfor; //



    • print(A.GetX(),A.GetY()); // получить и напечатать данные объекта



    End.

    Из этого примера видно, что мы не можем напрямую обратиться к данным объекта, а должны вызывать метод Move для изменения его данных и GetX, GetY для считывания значений этих данных. Т.е. объект скрывает свою внутренню структуру, именно это свойство и называется "инкапсуляцией".

    • наследование - подразумевает возможность создавать из классов объектов новые классы объекты, которые наследуют структуру и методы своих предков, добавляя к ним черты, отражающие их собственную индивидуальность. Наследование может быть простым (один предок) и множественным (несколько предков). Пример:

    • Class Circle extend Point { // создаем новый объект "окружность", наследующий

    • // свойства объекта "точка"

    • Radius : int; // добавляем новое поле "радиус", поля X и Y наследуются

    • // от родительского объекта

    • .............

    • Circle(X:int,Y:int,Radius:int); // конструктор нового объекта

    • .............

    • Draw(); // переопределяем некоторые методы

    • Hide(); // родительского объекта, метод Move наследуется

    • .............

    • ChangeRadius(Radius); // вводим новый метод "изменить радиус"

    • .............

    • GetRadius(); // вводим новый метод "получить значение радиуса"

    • // методы GetX и GetY наследуются от родительского

    • // объекта

    }

    • полиморфизм - различные объекты могут по разному реагировать на одинаковые внешние события в зависимости от того, как реализованы их методы. Пример:

    • Begin

    • Point A(100,100);

    • Circle B(200,200,50);



    • A.Draw(); // рисует точку

    • B.Draw(); // рисует окружность

    End.

    Целостность данных:

    Для поддержания целостности объектно-ориентированный подход предлагает использовать следующие средства:

    • автоматическое поддержание отношений наследования

    • возможность объявить некоторые поля данных и методы объекта как "скрытые", не видимые для других объектов; такие поля и методы используются только методами самого объекта

    • создание процедур контроля целостности внутри объекта

    Средства манипулирования данными:

    К сожалению, в объектно-ориентированном программировании отсутствуют общие средства манипулирования данными, такие как реляционная алгебра или реляционное счисление. Работа с данными ведется с помощью одного из объектно-ориентированных языков программирования общего назначения, обычно это SmallTalk, C++ или Java.

    Подведем теперь некоторые итоги:

    В объектно-ориентированных базах данных, в отличие от реляционных, хранятся не записи, а объекты. ОО-подход представляет более совершенные средства для отображения реального мира, чем реляционная модель:

    • естественное представление данных. В реляционной модели все отношения принадлежат одному уровню, именно это осложняет преобразование иерархических связей модели "сущность-связь" в реляционную модель (см. параграф 5.5.3). ОО-модель можно рассматривать послойно, на разных уровнях абстракции.

    • имеется возможность определения новых типов данных и операций с ними.

    В то же время, ОО-модели присущ и ряд недостатков:

    • осутствуют мощные непроцедурные средства извлечения объектов из базы. Все запросы приходится писать на процедурных языках, проблема их оптимизации возлагается на программиста.

    • вместо чисто декларативных ограничений целостности (типа явного объявления первичных и внешних ключей реляционных таблиц с помощью ключевых слов PRIMARY KEY и REFERENCES) или полудекларативных триггеров для обеспечения внутренней целостности приходится писать процедурный код.

    Очевидно, что оба эти недостатка связаны с отсутствием развитых средств манипулирования данными. Эта задача решается двумя способами - расширение ОО-языков в сторону управления данными (стандарт ODMG), либо добавление объектных свойств в реляционные СУБД (SQL-3, а также так называемые объектно-реляционных СУБД).

    6.3.2.Объектно-ориентированные СУБД.


    Появление объектно-ориентированных СУБД вызвано потребностями программистов на ОО-языках, которым были необходимы средства для хранения объектов, не помещавшихся в оперативной памяти компьютера. Также важна была задача сохранения состояния объектов между повторными запусками прикладной программы. Поэтому, большинство ООСУБД представляют собой библиотеку, процедуры управления данными которой включаются в прикладную программу. Примеры реализации ООСУБД как выделеного сервера базы данных крайне редки.

    В качестве примера рассмотрим объектно-ориентированную СУБД ObjectStore, которая обеспечивает долговременное хранение в базе данных объектов, созданных программами на языках C++ и Java. Вся работа с объектами ведется обычными средствами включающего ОО-языка. При этом СУБД как бы расширяет виртуальную память операционной системы. Происходит это следующим образом. Когда прикладная программа обращается к объекту, то ищет его по адресу в оперативной памяти. Нужная страница оперативной памяти может быть вытеснена в виртуальную память (область хранения неиспользуемых страниц оперативной памяти на диске). Если объекта с таким адресом в виртуальной памяти не существует, то операционная система генерирует ошибку. СУБД эту ошибку перехватывает и извлекает объект из базы данных.

    ObjectStore поддерживает транзакции (в данный момент времени может существовать только одна транзакция), допускает методы доступа: хеш-таблица для несортированных данных и B-дерево для сортированных, также возможно использование SQL.

    Бесплатную копию ObjectStore можно получить с веб-сервера компании Object Design Inc.

    6.3.3.Стандарт ODMG.


    ODMG (Object Data Management Group) - консорциум поставщиков ООБД и других заинтересованных организаций, созданный в 1991 г. Его задачей является разработка стандарта на хранение объектов в базах даннных. В настоящее время опубликован вторая версия стандарта, которую так и называют ODMG 2.0. Рассмотрим кратко основные положения этого документа.

    Стандарт на хранение объектов ODMG 2.0 разработан на основе трех существующих стандартов: управление базами данных (SQL), объекты (стандарты OMG - Object Management Group) и стандарты на объектно-ориентированные языки программирования (C++, Smalltalk, Java).

    ODMG добавляет возможности взаимодействия с базами данных в объектно-ориентированные языки программирования: определяются средства долговременного хранения объектов и расширяется семантика языка, вносятся операторы управления данными. Стандарт состоит из нескольких частей:

    • Объектная модель - унифицированная основа всего стандарта. Она расширяет объектную модель консорциума OMG (см. параграф 6.3.1) за счет введения таких свойств как связи и транзакции для обеспечения функциональности, требуемой при взаимодействии с базами данных. Ключевые концепции объекной модели ODMG:

      • наделение объектов такими свойствами как атрибуты и связи

      • методы объектов (поведение)

      • множественное наследование

      • идентификаторы объектов (ключи)

      • определение таких совокупностей объектов как списки, наборы, массивы и т.д.

      • блокировка объектов и изоляция доступа

      • операции над базой данных

    • Язык описания объектов (ODL - Object Defifnition Language) - средство определения схемы базы данных (по аналогии с DDL в реляционных СУБД). ODL является расширением IDL (Interface Definition Language - язык описания интерфейсов) модели OMG и предоставляет средства для определения объектных типов, их атрибутов, связей и методов. ODL создает слой абстрактных описаний так, что схема базы данных становится независима как от языка программирования, так и от СУБД. ODL рассматривает только описание объектных типов данных, не вдаваясь в детали реализации их методов. Это позволяет переносить схему БД между различными ODMG-совместимыми СУБД и языками программирования, а также транслировать ее в другие DDL.

    • Язык объектных запросов (OQL - Object Query Language) - SQL - подобный декларативный язык, который предоставляет эффективные средства для извлечения объектов из базы данных, включая высокоуровневые примитивы для наборов объектов и объектных структур. Синтаксис опретора SELECT, определенный SQL-92, является подмножеством OQL, это гарантирует, что SELECT-утверждения, выполняемые над реляционными таблицами, сохранят работоспособность и с наборами объектов ODMG. OQL-запросы могут вызываться из ОО-языка, точно также из OQL-запросов могут делаться обращения к процедурам, написанным на OO-языке. OQL предоставляет средства обеспечения целостности объектов (вызов объектных методов и использование собственных операторов изменения данных).

    • Связывание с ОО-языками. Стандарт связывания с C++, Smalltalk и Java определяет Object Manipulation Language (OML) - язык манипулирования объектами, который расширяет базовые ОО-языки средствами манипулирования и хранения объектов. Также включаются OQL, средства навигации и поддержка транзакций. Каждый ОО-язык имеет свой собственный OML, поэтому разработчик остается в одной языковой среде, ему нет необходимости разделять средства программмирования и доступа к данным.

    Более подробно содержание стандарта ODMG (более ранней его версии) рассмотрено в статье Л.А.Калиниченко Стандарт систем управления объектными базами данных ODMG-93: краткий обзор и оценка состояния. СУБД N 1, 1996.

    6.3.4.Объектные расширения реляционных СУБД. Язык SQL-3.


    Попытки совместить средства манипулирования данными реляционной модели и способы описания внешнего мира объектно-ориентированной модели получили развитие в языке SQL-3. (см. статью Д.Бича К объектным базам данных, опубликованную в журнале "Открытые системы" N 4 за 1994 г.). Здесь мы рассмтотрим только предлагаемые способы определения данных.

    Разработчики SQL-3 считают, что харакетристики объекта определяется описанием строки таблицы. Поэтому, вводится специальная возможность описания нового типа данных:

    Create type Address (

    number char (6),

    street char (30),

    aptno integer,

    city char (30),

    state char (2),

    zip integer

    );

    На основе нового типа могут быть определены таблицы, например:

    Create table Addresses of Address;

    Новые типы допускается использовать и для определения столбцов (т.е. игнорируется требование атомарности атрибутов реляционной модели):

    Сreate table People of new type Person (

    name char (30),

    address Address,

    birthdate date,

    );

    Наследование определяется с помощью фразы under.

    Create type Employee under Person (

    empno char(10),

    dept ref(Department)

    );

    Здесь атрибут dept является ссылкой на объект, хранящийся в таблице Department. Т.е. в понятиях реляционной модели в этом столбце должен быть записан внешний ключ, указывающий на на одну из строк таблицы Department. На самом деле, в SQL-3 предполагается, что каждый объект имеет уникальный идентификатор - OID, именно он используется при создании ссылок на объекты.

    Также в операторе CREATE TABLE можно определить и методы доступа к вновь созданным типам данных:

    Create table People of new type Person (

    name char(30),

    address Address,

    birthdate date

    function age(:р ref(Person)) return date;

    begin

    current_age:=:р.birthdate-current_date;

    return current_age;

    end;

    );

    В этом примере задана функция age, которая вычисляет текущий возраст объекта типа Person, хранимого в таблице People. К данной функции можно обращаться из оператора SELECT.

    Здесь свойства SQL-3 рассмотрены весьма кратко. Более полное представление о них можно получить из указанной статьи Д.Бича, а также из литературы, посвященной возможностям СУБД Oracle 8, которая подерживает данный язык.

    Заметим, что К.Дейт придерживается мнения, что областью определения объекта надо считать не строку, а столбец реляционной таблицы. Подробнее об этом см. в его книге.

    Еще один подход к объединению свойств реляционной модели и объектно-оринетированного программирования обсуждается в следующем параграфе.
    1   ...   15   16   17   18   19   20   21   22   23


    написать администратору сайта