Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


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



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

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

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

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

Структура:

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

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

· 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, а также так называемые объектно-реляционных СУБД).

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

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

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

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

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

Стандарт ODMG.

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

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

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


Поделиться:



Последнее изменение этой страницы: 2017-05-05; Просмотров: 370; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.017 с.)
Главная | Случайная страница | Обратная связь