№52 Объектно-ориентированные базы данных
Объектно-ориентированная база данных (ООБД) — база данных,
в которой данные оформлены в виде моделей объектов, включающих
прикладные программы, которые управляются внешними событиями.
Результатом совмещения возможностей (особенностей) баз данных и
возможностей объектно-ориентированных языков программирования
являются Объектно-ориентированные системы управления базами данных
(ООСУБД). ООСУБД позволяет работать с объектами баз данных также, как с
объектами в программировании в ООЯП. ООСУБД расширяет языки
программирования, прозрачно вводя долговременные данные, управление
параллелизмом, восстановление данных, ассоциированные запросы и другие
возможности.
Некоторые объектно-ориентированные базы данных разработаны для
плотного взаимодействия с такими объектно-ориентированными языками
программирования как Python, Java, C#, Visual Basic .NET, C++, Objective-C и Smalltalk;
другие имеют свои собственные языки программирования. ООСУБД используют
точно такую же модель, что и объектно-ориентированные языки
программирования.
Объектно-ориентированные базы данных обычно рекомендованы для тех
случаев, когда требуется высокопроизводительная обработка данных,
имеющих сложную структуру.
В манифесте ООБД[1]
предлагаются обязательные характеристики, которым должна отвечать любая
ООБД. Их выбор основан на 2 критериях: система должна быть
объектно-ориентированной и представлять собой БД.
Три класса характеристик:
- Обязательные.
- Необязательные.
- Открытые — позволяют пользователю выбирать свойства.
СУБД
- Долговременное хранение
- Использование внешней памяти
- Параллелизм
- Восстановление
- Нерегламентированные запросы
ОО характеристики
- Поддержка сложных объектов. В системе должна быть предусмотрена
возможность создания составных объектов за счет применения конструкторов
составных объектов. Необходимо, чтобы конструкторы объектов были
ортогональны, то есть любой конструктор можно было применять к любому
объекту.
- Поддержка индивидуальности объектов. Все объекты должны иметь
уникальный идентификатор, который не зависит от значений их атрибутов.
- Поддержка инкапсуляции. Корректная инкапсуляция достигается за счет
того, что программисты обладают правом доступа только к спецификации
интерфейса методов, а данные и реализация методов скрыты внутри
объектов.
- Поддержка типов и классов. Требуется, чтобы в ООБД поддерживалась
хотя бы одна концепция различия между типами и классами. (Термин «тип»
более соответствует понятию абстрактного типа данных. В языках
программирования переменная объявляется с указанием ее типа. Компилятор
может использовать эту информацию для проверки выполняемых с переменной
операций на совместимость с ее типом, что позволяет гарантировать
корректность программного обеспечения. С другой стороны класс является
неким шаблоном для создания объектов и предоставляет методы, которые
могут применяться к этим объектам. Таким образом, понятие «класс» в
большей степени относится ко времени исполнения, чем ко времени
компиляции.)
- Поддержка наследования типов и классов от их предков. Подтип, или
подкласс, должен наследовать атрибуты и методы от его супертипа, или
суперкласса, соответственно.
- Перегрузка в сочетании с полным связыванием. Методы должны
применяться к объектам разных типов. Реализация метода должна зависеть
от типа объектов, к которым данный метод применяется. Для обеспечения
этой функциональности связывание имен методов в системе не должно
выполняться до времени выполнения программы.
- Вычислительная полнота. Язык манипулирования данными должен быть языком программирования общего назначения.
- Набор типов данных должен быть расширяемым. Пользователь должен
иметь средства создания новых типов данных на основе набора
предопределенных системных типов. Более того, между способами
использования системных и пользовательских типов данных не должно быть
никаких различий.
Необязательные:
- Множественное наследование
- Проверка типов
- Распределение
- Проектные транзакции
Открытые
- Парадигмы программирования (процедурное, декларативное)
- Система представления
- Система типов
- Однородность. Реализация — язык программирования — интерфейс.