Программирование >>  Реляционные базы данных 

1 ... 109 110 111 [ 112 ] 113 114 115 ... 125


Глава 8

в этой главе рассмат1)ива1отся два способа ввести объектно-ориентированное nporpuMNHipoBaHiie в мир БД. OQL и SQL3 - это зарождающиеся стандарты, в не UHipOKO реализуемые языки. Тем ие менее они находят пр!1меиение и их идеи быстро имсдряются в ко.м.мерческие системы.

Объектный язык запросов (OQL) - это попытка стандартизовать объектно-ори-ентиропанные языки запросов в форме языка, соединяющего в себе декларативное программиромние SQL высокого уровня с объектно-ориентированной парадигмой программирования. Данная глава начинается с обсуждения методов и степеней ODL - языка определення объектов, введенного в качестве средства моделирования F главе 2. Его характерные свойства сушественно влияют на язык запросов OQL. Затем будут рассмотрены различные аспекты программирования в OQL.

Если OQL. - по попытка ввести SQL в объектно-ориентированную область, то SQL3 \южно считать переносом всего самого лучшего из объектно-ориентированной области в реляционный мир. В определенном смысле эти два языка в чем-то сог.засуются . но в то же время между ними есть существенная разница. Поэтому, рассмотрев объектно-ориентированных свойства стандарта SQL3. мы сравним воз-кюжносзи этих двух языков.

В сущности, два гюдчода к объекпюй ориентации рлхзичаются ответами на вопрос: Насколько важным является отношение? Объектно-ориентированное сообщество, сложившееся вокруг ODL и OQL, отвечает; Огношение не очень важно . При таком по.гходе используются объекты всех типов, в том числе множества или .мультимножества структур (те. отношения). Дпя сообщества S0L3 отношение остается фундаментальным понятием структурирования данных. При подходе SQL3, который часто называется объектно-реляционным, реляционная модель расширяется за счет внесения более сложных т1Шов аля кортежей отношений и для областей, принадлежащих атрибутам отношений. Объекты и классы вводятся в реляшюнную модель только внчтри какого-то отношении.

8Л Свойства ODL, связанные с запросамм

в этом разделе будет пролстлепо обсуждение ODI из главы 2. Скачала мы PiiccMorpuM. ;чак классы ODL взаимодействуют со средой программировать, (! koropvio они введены, а зате.ч перейдем к степскя\г кпасса, когорые играют в OQL po-ib. аи:1Логичну1о роли отношений в SQL.



1 Напо-мним. что Timiii перемеииых главного языка, шпримср натуральные Ч1кла. не соотвстетиуют фунлпяснтлл,1Г1,г.\ типам шмных SQL - кортежам н отношениям. Поэто.му. клк было показано п ратд 1е 7.1. сосапиенис SQL с главным языком является лостяточно грочонкич. т м

8.1.1 Операции па объектах ODL

Язык OQL позволяет выразить операиии, имеющие реляционные, или основанные на множествах, особенности, во многом гак же, как и SQL. Однако в нем часто при.холится иыполнять другие операции, не связанные с множествами Например, если объектами являются документы, может потребоваться проверить! содержит ли данный документ определенное ключевое слово. Если объект -элемент карты или рисунка, может понадобиться показать его точное место расположения. Даже обычные, ориентированные на записи данные типа нашего примера с фильмами можно использовать для специальных операций типа построения графа, выражающего чиачо фи1ькюв. в которых данная кинозвезда играла в каждом году.

В SQL такие операции выполняются программой, которая написана иа обычном, Ш1И главном, языке программирования типа Сив которую встроены операторы SQL. Значения передаются между переменными SQL и главного языка с помощью механизмов, введенных в разделе 7.L

Определения ODL связаны с главным языком более тесно. Предполагается, что главный язык - это объектно-ориентированный язык С++ или Smalltalk. Каждый из них достаточно близок к ODL, чтобы описания ODL можно было прямо перевести на главный язык. Переменные главного языка легко выражают объекты, описанные в операторах ODL.

Соединять главный язык с описаниями ODL и запросс1ми OQL еше удобнее. ODL допускает третий вид свойств (помимо атрибутов и связей) - методы. Метод-уто функция, связанная с классом. Она применима к объекту класса, но может иметь н другие аргументы. Методы можно применять в ODL почти так, будто они являются атрибутами класса.

8.1.2 Описание сигнатур метода в ODL

в ODL можно описать имена методов, связанных с классом, и типы ввода/ вывода этих методов. Эти описания, называемые сигнатурами, похожи на описания функций в С и С++ (в отличие от опредепений функций, предсгавляюших программы реализации этих функций). Реальная программа лля метода пишется на главнсм языке м не является частью ODL.

Описания методов входят вместе с атрибутами и связями в описание интерфейса. В объектно-ориентированных языках каждый метод обычно связан с классом (т.е. с интерфейсом) и вызывается на объекте этого класса. Таким образом, объект является скрытым аргументом метода. Этот подход позволяет использовать одно имя метода для нескольких различных классов, поскольку смысл конкретного метода определяется объектом, на котором выполняется операция. Такое имя метода называется переопределенным (оно появляется в качестве метода для нескольких классов).

Сингаксис описания методов похож на синтаксис описания функций в языке С с двумя важными дополнениями.

I. Параметры функции опре.теляются как in, out или Inout. Это значит, что они применяются лля ввода и вывода параметров или того и другого соответственно. Последние два типа параметров можно изменить с помошью функции; параметр in не йаменястся. Параметры out и inout пере.чаются с помощью ссылки, а параметры in - с помощью значения. Функция может иметь возвращаемое значение - это способ получения результата функции, отличающийся от приписывания значения параметру out или inout.



1 Значение сигнатутр

j Значение сигнатр состоит в том, что при реализации схемы в реа.пьном языке программирования можно автоматически проверять соответствие t конкретной реализации проекту, выраженному в схеме. Нельзя проверить, правильно ли выражен в реализации смысл операций, но можно, по крайней мере, проверить число и тип параметров ввода и вывода.

Пример 8.1. На рис. 8.1 показано развитие определения интерфейса для класса Movie, ранее представленного на рис. 2.6.

1) interface IVlovie

2) (extent Movies

3) key (title, year)) {

4) attribute string title;

5) attribute integer year;

6) attribute integer length;

7) attribute enurneration(cDlor. blackAndWhite) filmType; B) relationship Set<Slar> stars

inverse Star:: starredin 9) relationship Studio ownedBy

inverse Studio :; owns;

10) float lengthlnHoursO Taises(noLengthFound);

11) starNames(out Set<String>).

12) otherMovies(in Star, out Set=Movie>)

raises(noSuchStar);

Рис. 8.1. Добоопсние сигнотур глетодо к классу Movie

Здесь есть два изменения, не связанных с методами.

1. В строке (2) стоит описание e,xTent Его назначение будет рассмотрено в разделе 8.1 3.

2 В строке (3) title и year описываются в качестве ключа дпя отношения Movie.

В описание этого интерфе11са включены методы. Строка (10) описывает метод lengthlnHours. 1У1ожио считать, что он порождает в виде возвращаемого значения дл1Ггельность объекта фильм, к которому он применяется, но при этом переводит минуты (представленные в атрибуте length) в часы, выраженные числом с плавающей точкой. Эта функция не использует параметры. 0&1.ект огтношения Movie, к которому применяется метод, является скрытым аргументом и именно нз него возможная реализация lengthlnHours получает продолжительность фш1ьма в цнyтax.

2. Функции могуТ порождать иаоиочения - особые ответы, выходящие за рамки нормальной передачи значений и механизма ответа, посредством кото[Юго взаимодействуют функции. Исключение обычно выражает ненормальное или неожиданное условие, которое будет использоваться какой-то визвав1ией его функцнеГ! (возможгю, косвенно, через последовательность вызовов). Деление на нуль -пример условия, которое можно считать исключением. В ODL за описанием функции может следовать 101ючс1юе слово raises и заключенный п скобки список исключений, которые способна породить данная функция.



1 ... 109 110 111 [ 112 ] 113 114 115 ... 125

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика