Объектно-ориентированный транслятор для программируемой реляционной системы.

Содержание

Слайд 2

1. Данные. Компьютер должен обрабатывать различные типы простейших элементов данных и структур

1. Данные. Компьютер должен обрабатывать различные типы простейших элементов данных и структур
данных.
2. Элементарные операции. Компьютер должен иметь набор элементарных операций для работы с данными.
3. Управление последовательностью действий. Компьютер должен обеспечивать управление последовательностью выполнения элементарных операций.
4. Доступ к данным. Компьютер должен предоставлять механизмы управления данными, которые необходимы для выполнения любой операции.
5. Управление памятью. Компьютер должен предоставлять механизмы управления распределением памяти для программ и данных.
6. Операционная среда. Компьютер должен предоставлять механизмы связи с внешней средой, содержащей программы и данные, подлежащие обработке.
Пратт Т., Зелковиц М.
"Языки программирования: разработка и реализация”

Целевая машина (компьютер)

Особенности программируемой реляционной системы
- Организация данных (описываются реляционная моделью данных) - Персистентность данных - Непроцедурный язык (команды управления памяти, доступа к данным)

Слайд 3

Программируемая реляционная система

“Thе Third Manifecto ” by H.Darwen and C.Date
"…A database shall be a

Программируемая реляционная система “Thе Third Manifecto ” by H.Darwen and C.Date "…A
named container for relvars; the content of a given database at any given time shall be a set of database relvars…. "
"…Database relvars shall be either real or virtual…"
"…Each transaction shall interact with exactly one database…"

Реляционная база данных есть контейнер для множества именованных переменных отношений R (хранимых или вычисляемых), с которым взаимодействует транзакции T.

Поддерживает существование и функционирование реляционной базы данных

DB: (…, Ri, … , Tj, …).

Слайд 4

Создание relvar R (a1:Di, … an:Dj) KEY(…ai...) FKEY (…) ON (…) Некоторые

Создание relvar R (a1:Di, … an:Dj) KEY(…ai...) FKEY (…) ON (…) Некоторые
relvar (виртуальные) могут вычисляться R AS RValue
Выражение (запроса) RValue(…R…) возвращает значение отношения
Композиция f(…R…) операций реляционной алгебры ор над переменными
отношения op1(… op2(R, op3()…)). Операции реляционной алгебры могут включать скалярные операции над значениями атрибутов a отношений R.
R1 × R2 – декартово произведение,
R1∪ R2 – объединение,
R1 − R2 – разность,
R1 JOINcriteria R2 – соединение отношений (в качестве индекса используется критерий соединения). Также спользуется операция LEFT JOIN….
R[a1, a2, …] – проекция (где ai – атрибуты ),
R WHERE criteria – выборка по критерию,
R RENAME a AS b – переименование атрибутов.
- Процедура, возвращающей значение отношения (содержащей оператор return RValue)
- Явно заданное значение отношение (в присваивании).
Присваивание переменной значения R := RValue (эквивалентно традиционным операциям INSERT, UPDATE, DELETE)
Создание транзакции Tr(…) AS процедура
Выполнение транзакции EXEC Tr(…)

Команды ПРС

Слайд 5

ПРС позволяет определить, сохранить и выполнить процедуры - алгоритмические (операторы if, while

ПРС позволяет определить, сохранить и выполнить процедуры - алгоритмические (операторы if, while
и т.д.) последовательности присваиваний prR’ := RValue(… prR …) (где prR –переменные, доступные для присваивания в контексте процедуры) и вызовов EXEC Tr(…) ,
Процедура может - использовать локальные переменные (вместе с relvar R базы данных входят в мн-во переменных, доступных для присваивания prR). - принимать атрибуты. - возвращать значение в вычисляемых компонентах (оператор return RValue).
Хранимая процедура связывается с именем транзакции или вычисляемого компонента name AS begin … end Хранимая процедура выполняется по обращению к связанному имени - транзакции EXEC Tr(…) - виртуальной relvar R
Допускается прямое выполнение последовательности операций EXEC begin … end

Команды ПРС

Слайд 6

Объекты и классы

Объект характеризуется инкапсулированными состоянием  (сложное значение) и поведением  

Объектная переменная есть

Объекты и классы Объект характеризуется инкапсулированными состоянием (сложное значение) и поведением Объектная
совокупность именованных переменных отношений + связанный функционал

1) Структура сложных объектов есть совокупность переменных, типы которых реализуются целевой машиной
2) ПРС как целевая машина реализует тип отношение.

Слайд 7

Объекты и классы

Объект характеризуется инкапсулированными состоянием  (сложное значение) и поведением  

Объектная переменная есть

Объекты и классы Объект характеризуется инкапсулированными состоянием (сложное значение) и поведением Объектная
совокупность именованных переменных отношений + связанный функционал

Объект = реляционная БД

1) Структура сложных объектов есть совокупность переменных, типы которых реализуются целевой машиной
2) ПРС как целевая машина реализует тип отношение.

Слайд 8

Объекты и классы

Состояние объекта описывается множеством значений, не более сложных, чем значение

Объекты и классы Состояние объекта описывается множеством значений, не более сложных, чем
отношения

Вырожденные формы отношений Могут быть заданы более простыми языковыми конструкциями

Далее: Рассматриваем только отношения (сложные компоненты) и скаляры (простые компоненты)

Слайд 9

Класс D - множество объектов заданной структуры. Спецификация класса отделена от реализации.
Спецификация D

Класс D - множество объектов заданной структуры. Спецификация класса отделена от реализации.
( scCi, … rCj, … M(…)) KEY (scC…).. D – имя класса scС – простой компонент (скаляр), rC – сложный компонент (отношение), M(…) – метод KEY (scC…) – необязательные ключи класса
Реализация - компонентов: хранимые D.С AS STORED вычисляемые D.С AS RValue(…C…) - методов: связываются с процедурами Dn.M(…) AS процедура Процедура – алгоритмическая последовательность - присваиваний prC := RValue(…prC…) - вызовов call M (…)
Возможно множественной наследование. Dn : EXTEND Dk, Dl … (…) Спецификация класса наследника объединяет спецификации родительских классов и собственных компонентов и методов. Наследуемые компоненты и методы могут менять реализацию.

Объекты и классы

Слайд 10

Класс D - множество объектов заданной структуры. Спецификация класса отделена от реализации.
Спецификация D

Класс D - множество объектов заданной структуры. Спецификация класса отделена от реализации.
( scCi, … rCj, … M(…)) KEY (scC…).. D – имя класса scС – простой компонент (скаляр), rC – сложный компонент (отношение), M(…) – метод KEY (scC…) – необязательные ключи класса
Реализация - компонентов: хранимые D.С AS STORED вычисляемые D.С AS RValue(…C…) - методов: связываются с процедурами Dn.M(…) AS процедура Процедура – алгоритмическая последовательность - присваиваний prC := RValue(…prC…) - вызовов call M (…)
Возможно множественной наследование. Dn : EXTEND Dk, Dl … (…) Спецификация класса наследника объединяет спецификации родительских классов и собственных компонентов и методов. Наследуемые компоненты и методы могут менять реализацию.

Объекты и классы

Слайд 11

Объекты и классы

Объектный идентификатор OID – связанное с объектом уникальное значение из

Объекты и классы Объектный идентификатор OID – связанное с объектом уникальное значение
домена dOID. OID генерируется системой в процессе создания объекта, отделен от его состояния, неизменен на протяжении всего существования объекта.
Ссылочный тип Dn– множество OID существующих в системе объектов класса Dn. (имя ссылочного типа = имя класса). Для переменных ссылочного типа определены операции присваивания, сравнивания и неявного разыменования (любая операция, отличная от операций присваивания и сравнивания, выполняется над связанным объектом).
Создаваемые ссылочные типы Dn входят в расширяемое множество доменов D.

Слайд 12

Трансляция

Цель: Система, состоящая из множества персистентных объектов разных классов D, определенных на

Трансляция Цель: Система, состоящая из множества персистентных объектов разных классов D, определенных
расширяемом множестве доменов (D1,…, Dn,…)

Команды декларативного ОО-языка - Спецификация класса (структура и ключи) - Создание объектов - Доступ к данным (запись и чтение) - Реализация класса (выражения и процедуры) и связывание реализаций

Таблица символов
Программируемая Реляционная Система

Ошибки

Транслятор

Выходные данные
Каталог БД

Команды ПРС

Реляционная БД определенная на фиксированном множестве доменов (dOID, D1, … Dj)

Слайд 13

Структура и ключи

Структура объектов класса и ключи класса описываются в команде спецификации

Структура и ключи Структура объектов класса и ключи класса описываются в команде
класса.
Dn( //имя класса scCi:D, //простой компонент определенный на скалярном домене D, … rCj(…a:D…)KEY(…), // сложный компонент (отношение),
… M(…) //метод ) KEY (scC…)… //необязательные ключи класса

Слайд 14

Структура и ключи

Значения всех простых компонентов scCi всех объектов класса Т
представлены в

Структура и ключи Значения всех простых компонентов scCi всех объектов класса Т
виде единого отношения скаляров RT.
(1OID × 1rC1 × 1rC2 × … × 1rCn) ∪ (2OID × 2rC1 × … × 2rCn) ∪ (…) ∪ … -> RT
где jOID – идентификатор некоторого объекта, jscCi – простой компонент этого объекта, n – число простых компонентов класса
Ключи
- Поле OID является ключом.
Если какое-либо скалярные компоненты указаны в спецификации как ключ класса, они является ключом отношении RT.
Каждому существующему объекту соответствует кортеж по крайне мере одного (собственного) отношения скаляров. Объектам наследуемых классов также соответствуют по одному кортежу в каждом из отношений скаляров родительских классов.

Слайд 15

Структура и ключи

Для каждого из сложных компонентов rCi класса T : значения

Структура и ключи Для каждого из сложных компонентов rCi класса T :
из всех объектов могут быть объединены в виде отношения сложного компонента RT.С.
(1OID × 1setC1) ∪ (2OID × 2setC1) ∪ … -> RT.C1
(1OID × 1setC2) ∪ … -> RT.C2

(1OID × 1setCm) ∪ … -> RT.Cm
где m – число сложных компонентов класса,
jOID – идентификатор некоторого объекта,
jsetCi –сложный компонент соответствующего объекта.
Ключи
Ключом отношения является совокупность поля OID и полей, указанных в спецификации как ключи соответствующего сложного компонента.
Если какие-либо атрибуты сложного компонента указаны в спецификации как уникальные в классе, они является ключами отношения RT.С.

Слайд 16

Структура и ключи

При этом все ссылочные поля (т.е. простые ссылочные компоненты и

Структура и ключи При этом все ссылочные поля (т.е. простые ссылочные компоненты
ссылочные атрибуты сложных компонентов) представлены в соответствующих отношениях как одноименные атрибуты, которые
определенны на домене объектных идентификаторов dOID,
связаны (внешний ключ) с атрибутом OID собственного отношения скаляров того класса, на который указывает ссылка

Слайд 17

Структура и ключи

EXEC begin
RSHIPMENTS (OID:dOID, DocN:String, Cntr:dOID)
KEY(OID), KEY(DocN),

Структура и ключи EXEC begin RSHIPMENTS (OID:dOID, DocN:String, Cntr:dOID) KEY(OID), KEY(DocN), REFERENCE
REFERENCE Cntr ON RCONTRACTOR.OID;
RSHIPMENTS.Items (OID: dOID, Art:Stirng, Qty:Integer)
KEY (OID, Art);
end

CLASS SHIPMENTS
{
DocN STRING;
Cntr CONTRACTORS;
...
Items SET OF
{
Art STRING;
Qty INTEGER;
}KEY uniqArt (Art);
}KEY uniqDocN (DocN)
...;

Класс отображается в единственное отношение RD и множество отношений RD.С (вместе - отношения класса RT…). При этом ограничения целостности, заданные для класса D, выражаются в ограничениях целостности применяемых к этим отношениям RD….

Слайд 18

Структура и ключи

EXEC begin
RSHIPMENTS (OID:dOID, DocN:String, Cntr:dOID)
KEY(OID), KEY(DocN),

Структура и ключи EXEC begin RSHIPMENTS (OID:dOID, DocN:String, Cntr:dOID) KEY(OID), KEY(DocN), REFERENCE
REFERENCE Cntr ON RCONTRACTOR.OID;
RSHIPMENTS.Items (OID: dOID, Art:Stirng, Qty:Integer)
KEY (OID, Art);
end

CLASS SHIPMENTS
{
DocN STRING;
Cntr CONTRACTORS;
...
Items SET OF
{
Art STRING;
Qty INTEGER;
}KEY uniqArt (Art);
}KEY uniqDocN (DocN)
...;

Класс отображается в единственное отношение RD и множество отношений RD.С (вместе - отношения класса RT…). При этом ограничения целостности, заданные для класса D, выражаются в ограничениях целостности применяемых к этим отношениям RD….

Слайд 19

Создание объектов

Объект создается командой
new D (конструирующее_выражение)

EXEC begin
- Генерируется новое уникальное

Создание объектов Объект создается командой new D (конструирующее_выражение) EXEC begin - Генерируется
значение OID
- В отношение скаляров RD добавляется кортеж, содержащий этот OID и значения, определяемые конструирующим_выражением
end

Слайд 20

Доступ к данным

Путь - обусловленная структурой классов и ссылками между ними последовательность имен,

Доступ к данным Путь - обусловленная структурой классов и ссылками между ними
определенных в спецификации этих классов.

Слайд 21

Доступ к данным

Путь - обусловленная структурой классов и ссылками между ними последовательность имен,

Доступ к данным Путь - обусловленная структурой классов и ссылками между ними
определенных в спецификации этих классов.

CONTRACTORS.Bank.BIK

SHIPMENTS.Cntr.Bank [.Name, .BIK]

Терминальный путь, оканчивается на имя базового типа

Нетерминальный путь, оканчивается на имя ссылки или сложного компонента. Допускает путевые продолжения

SHIPMENTS.Items [.Art, .Qty]

Слайд 22

Доступ к данным

Путь - обусловленная структурой классов и ссылками между ними последовательность имен,

Доступ к данным Путь - обусловленная структурой классов и ссылками между ними
определенных в спецификации этих классов.

CONTRACTORS.Bank.BIK

SHIPMENTS.Cntr.Bank [.Name, .BIK]

SHIPMENTS.Cntr [.Name, .Bank.Name, .Bank.BIK]

Терминальный путь, оканчивается на имя базового типа

Нетерминальный путь, оканчивается на имя ссылки или сложного компонента. Допускает путевые продолжения

SHIPMENTS.Items [.Art, .Qty]

Слайд 23

Доступ к данным

Путь - обусловленная структурой классов и ссылками между ними последовательность имен,

Доступ к данным Путь - обусловленная структурой классов и ссылками между ними
определенных в спецификации этих классов.

CONTRACTORS.Bank.BIK

SHIPMENTS.Cntr.Bank [.Name, .BIK]

Терминальный путь, оканчивается на имя базового типа

Нетерминальный путь, оканчивается на имя ссылки или сложного компонента. Допускает путевые продолжения

SHIPMENTS.Cntr [.Name, .Bank.Name, .Bank.BIK]

SHIPMENTS<.DocN LIKE “%100”>.Cntr [.Name, .Bank.Name, .Bank.BIK]

Выражение отбора объектов может дополнять любое имя класса или ссылки, содержащееся в пути

?????

SHIPMENTS.Items [.Art, .Qty]

Слайд 24

Доступ к данным

Общий принцип:
Любой нетерминальный путь может трактоваться как имя отношения («О-вид»),

Доступ к данным Общий принцип: Любой нетерминальный путь может трактоваться как имя
содержащего атрибуты, имена которых представляют собой скалярные путевые продолжения этого пути

SHIPMENTS.Cntr.Bank [.Name, .BIK]

SHIPMENTS.Cntr [.Name, .Bank.Name, .Bank.BIK]

SHIPMENTS<.DocN LIKE “%100”>.Cntr [.Name, .Bank.Name, .Bank.BIK]

РМД не накладывает какие-либо ограничения на имена, используемые для обозначения отношения и их атрибутов, за исключением требования уникальности.

Сигнатуры О-видов

О-виды являются способом представить данные множества разных объектов в виде отношений, полностью сохранив при этом заданную в описании классов семантику сложных структур

Имя О-вида
Атрибуты О-вида

SHIPMENTS.Items [.Art, .Qty]

Имя
Атрибуты

Слайд 25

Доступ к данным

Использование О-видов.

О-виды – отношения, представляющие данные об объектах используя имена

Доступ к данным Использование О-видов. О-виды – отношения, представляющие данные об объектах
и последователностей имен, заданных в описании классов этих объектов. О-виды могут использоваться в
- выражениях запросов (в т.ч. ad-hoc запросах), основанных на операциях реляционной алгебры.
В SQL это SELECT выражение.
- командах, изменяющих данные В SQL это команды INSERT, UPDATE, DELETE

Слайд 26

Доступ к данным

Использование О-видов.

О-виды – отношения, представляющие данные об объектах используя имена

Доступ к данным Использование О-видов. О-виды – отношения, представляющие данные об объектах
и последователностей имен, заданных в описании классов этих объектов. О-виды могут использоваться в
- выражениях запросов (в т.ч. ad-hoc запросах), основанных на операциях реляционной алгебры.
В SQL это SELECT выражение.
- командах, изменяющих данные В SQL это команды INSERT, UPDATE, DELETE

Слайд 27

Доступ к данным

- Простая проекция
- Соединение в классе
- Соединение

Доступ к данным - Простая проекция - Соединение в классе - Соединение
по ссылке в атрибуте О-вида
- Соединение по ссылке в заголовке О-вида
- Отбор объектов

Вычисление О-видов.

О-виды вычисляются на основании сигнатур, с использований реляционных операций над отношениями RD…

Схема результата операций - (OID:dOID, …)

Слайд 28

Доступ к данным

Вычисление О-видов. Простая проекция.

Сигнатура является подмножеством одного из отношений класса ->

Доступ к данным Вычисление О-видов. Простая проекция. Сигнатура является подмножеством одного из
проекция

Shipments [.DocNo, .Date]

RSHIPMENTS[OID, DocN, Cntr]

Слайд 29

Доступ к данным

Вычисление О-видов. Соединение в классе.

Сигнатура содержит атрибуты разных отношений класса ->

Доступ к данным Вычисление О-видов. Соединение в классе. Сигнатура содержит атрибуты разных
cоединение по OID + переименование атрибутов сложных компонентах

Shipments [.DocNo, .Items.Art]

(RSHIPMENTS LEFT JOINOID (RSHIPMENTS.Items RENAME Art AS Items.Art)) [OID, DocN, Items.Art]

Слайд 30

Доступ к данным

Вычисление О-видов. Соединение по ссылке в атрибуте.

Атрибут сигнатуры содержит ссылку ->

Доступ к данным Вычисление О-видов. Соединение по ссылке в атрибуте. Атрибут сигнатуры
cоединение (ссылка = OID) + переименование атрибутов «по ссылке»

Shipments [.DocNo, .Cntr.Name]

(RSHIPMENTS LEFT JOINCntr=OID (RCONTRACTOR RENAME Name AS Cntr.Name)) [OIDSHIPMENTS, DocN, Cntr.Name]

Ссылочные конструкции в атрибутах могут иметь любую длину

Слайд 31

Доступ к данным

Вычисление О-видов. Соединение по ссылке в заголовке.

Shipments.Cntr // пример выражения

Доступ к данным Вычисление О-видов. Соединение по ссылке в заголовке. Shipments.Cntr //
групповой ссылки

Выражение групповой ссылки – выражение, возвращающее унарное отношение, содержащие множество OID (групповую ссылку).
…в т.ч. любой путь, оканчивающийся на имя ссылки.

Shipments [.Cntr]

RSHIPMENTS[OID, Cntr]

Слайд 32

Доступ к данным

Вычисление О-видов. Соединение по ссылке в заголовке.

Заголовок сигнатуры содержит ссылку ->

Доступ к данным Вычисление О-видов. Соединение по ссылке в заголовке. Заголовок сигнатуры
cоединение (ссылка = OID)

((RSHIPMENTS)[OID, Cntr] JOINCntr=OID RCONTRACTORS) [OIDCONTRACTORS, Name, INN]

Shipments.Cntr [.Name, .INN]

Ссылочные конструкции в заголовках могут иметь любую длину

Слайд 33

Доступ к данным

Вычисление О-видов. Отбор объектов.

Выражение отбора объектов (в путях)
nameD<критерий>
Результат: групповая

Доступ к данным Вычисление О-видов. Отбор объектов. Выражение отбора объектов (в путях)
ссылка на объекты, определяемые именем nameD класса D или ссылки на него, которые удовлетворяют WHERE-критерию (покортежному)

(((RSHIPMENTS.Items RENAME Art AS Items.Art) WHERE Items.Art = "Tie")[OID]
JOINOID=OID RSHIPMENTS)
[OID, DocN]

SHIPMENTS<.Items.Art = "Tie“> [.DocN]

Критерий – logical_exp(cont1, cont 2 …), где cont – продолжение памеD
мн-во объектов вычисляется как
(D[cont1, cont2 …] WHERE logical_exp(cont1, cont2 …)) [OID]

Слайд 34

Доступ к данным

Вычисление О-видов. Отбор объектов.

Выражение отбора объектов для сложных компонентов имя_класса_или_ссылки<критерий, критерий…>

Доступ к данным Вычисление О-видов. Отбор объектов. Выражение отбора объектов для сложных
Запятая “,” - логическая операция “межкортежный_AND”. Результат: пересечение множеств объектных идентификаторов, сформированных по каждому из связанных запятой критериев

Shipments< .Items.Art =“Tie”, .Items.Art = “Axe”> [.DocN]

(((RSHIPMENTS.Items RENAME Art AS Items.Art) WHERE Items.Art = "Tie") [OID]
INTERSEPT
((RSHIPMENTS.Items RENAME Art AS Items.Art) WHERE Items.Art = "Axe") [OID])
JOINOID RSHIPMENTS)
[OID, DocN]

Слайд 35

Доступ к данным

Вычисление О-видов. Отбор объектов.

Выражения отбора объектов могут сочетаться и вкладываться

Shipments<

Доступ к данным Вычисление О-видов. Отбор объектов. Выражения отбора объектов могут сочетаться
.Cntr.Bank<.Name = “...” OR .BIC = “...”>
OR .Cntr<.Name = “...”>,
.No LIKE “1%”>
.Cntr
[ .Name, .INN, .Bank.Name]

Shipments<.DocN LIKE “1%”>.Cntr.Bank [.Name, .BIC]

Shipments<.Cntr.Bank.BIC LIKE “1%”> [.DocN, .Date]

Поиск от условий к данным возможен ….

…. "против ссылки"

…. "по ссылке"

Слайд 36

Доступ к данным

Использование О-видов.

О-виды – отношения, представляющие данные об объектах используя имена

Доступ к данным Использование О-видов. О-виды – отношения, представляющие данные об объектах
и последователностей имен, заданных в описании классов этих объектов. О-виды могут использоваться в
- выражениях запросов (в т.ч. ad-hoc запросах), основанных на операциях реляционной алгебры. В SQL это SELECT выражение.
- командах, изменяющих данные В SQL это команды INSERT, UPDATE, DELETE
Принцип трансляции этих команд
1) Анализ входной команды. Поиск сигнатур используемых О-видов
2) Построение выражений, вычисляющего эти О-виды
3) Во входной команде: Замена выражений, образующие сигнатуры, на построенные вычисляющие выражения

Слайд 37

Для одного объекта
(RD WHERE OID = this)[a] + (RD WHERE OID =

Для одного объекта (RD WHERE OID = this)[a] + (RD WHERE OID
this)[b]
где this – объектный идентификатор

D
(
a INTEGER;
b INTEGER;
...
mthd(...)
)
D.mthd(...) AS
begin
...;
... a + b...;
...;
end

Трансляция процедур

Идея

Слайд 38


Операцию доступа – за скобки(!)
(RD WHERE OID = this)[a+b]

Для одного объекта
(RD WHERE

Операцию доступа – за скобки(!) (RD WHERE OID = this)[a+b] Для одного
OID = this)[a] + (RD WHERE OID = this)[b]
this – объектный идентификатор

D
(
a INTEGER;
b INTEGER;
...
mthd(...)
)
D.mthd(...) AS
begin
...;
... a + b...;
...;
end

Трансляция процедур

Идея

Слайд 39

Трансляция процедур

Утверждение о транслируемости:
Любая процедура p над компонентами С класса D, может

Трансляция процедур Утверждение о транслируемости: Любая процедура p над компонентами С класса
быть транслирована в такую процедуру p' над отношениями RD… этого класса, что результат однократного исполнения процедуры p' будет аналогичен исполнению исходной процедуры p в каждом объекте из заданного множества объектов.

Слайд 40

Трансляция процедур

Утверждение о транслируемости:
Любая процедура p над компонентами С класса D, может

Трансляция процедур Утверждение о транслируемости: Любая процедура p над компонентами С класса
быть транслирована в такую процедуру p' над отношениями RD… этого класса, что результат однократного исполнения процедуры p' будет аналогичен исполнению исходной процедуры p в каждом объекте из заданного множества объектов.

proc (par1:D1, par2 D2…)
{
localRelVal (…a:D…)
}

Rpar(OID, par1:D1, par2 D2…)
RlocalRelVal (OID, …a:D…)

Параметры и локальные переменные существуют в ПРС в relVar с разным временем жизни.

Слайд 41

Трансляция процедур

Трансляция RValue выражений

f( C1, C2, …) -> Cn
где f -

Трансляция процедур Трансляция RValue выражений f( C1, C2, …) -> Cn где
суперпозиция примитивных реляционных операций primop
primop1(C1, primop2(C2, … (…)))

Любая из primop может содержать скалярные операции над атрибутами отношений Ci

Для любого Ci существует такое отношение классов Ri, что
(Ri WHERE OID = theOID)[!OID] –> Сi
где [!OID] операция проекцию, исключающая атрибут OID

Слайд 42

Для любого Ci существует такое отношение классовRi, что
(Ri WHERE OID

Для любого Ci существует такое отношение классовRi, что (Ri WHERE OID =
= theOID)[!OID] –> Сi
где [!OID] операция проекцию, исключающая атрибут OID

Для любого Cres существует такое отношение результатов Rres, что
(Rres WHERE OID = theOID)[!OID] –> Сi
где [!OID] операция проекцию, исключающая атрибут OID

В силу замкнутости рел.алгебры, для исходного
Cn := f( C1, C2, …), где f есть суперпозиция primop1(C1, primop2(C2, … (…)))
существует
Rn :=f’( R1, R2, …), где f есть суперпозиция op’1(R1, op’2(R2, … (…)))

f’ есть трансляция f ; скалярные операции в трансляции не меняются

f'(R1, R2, …) JOIN these -> theseRn, Rn – объединяет результаты для множества these (гр. ссылка)

Трансляция RValue выражений

Трансляция процедур

Слайд 43

Трансляция последовательности операторов

процедура proc – алгоритмическая последовательность операторов - присваивания Сj :=

Трансляция последовательности операторов процедура proc – алгоритмическая последовательность операторов - присваивания Сj
f(… Сi …) , Rtemp - параметры, лок.переменные - вызова call p(…)

update Rn with (f'(R1, R2, …) JOIN these)

Трансляция процедур

Слайд 44

Трансляция алгоритмов

Операторы if… и while… групповая ссылка these может быть разделена по

Трансляция алгоритмов Операторы if… и while… групповая ссылка these может быть разделена
заданному условию

Трансляция процедур

Слайд 45

Утверждение о транслируемости:
Любая процедура p над компонентами С класса D, может быть

Утверждение о транслируемости: Любая процедура p над компонентами С класса D, может
транслирована в такую процедуру p' над отношениями RD… этого класса, что результат однократного исполнения процедуры p' будет аналогичен исполнению исходной процедуры p в каждом объекте из заданного множества объектов.

Трансляция процедур

Слайд 46

служат для персистентного хранения данных . Для их реализации создаются реальные переменные

служат для персистентного хранения данных . Для их реализации создаются реальные переменные
отношения ПРС, схема которых в точности соответствует ранее описанным отношениям RD….

Хранимые компоненты

realRD.C (OID: dOID, a:D, …)

класс D(…C(a:D…), …)
реализация D.C AS STORED;

Слайд 47

Связывание

Структура класса-наследника объединяет множества наследуемых и собственных компонентов и методов. Реализации наследуемых

Связывание Структура класса-наследника объединяет множества наследуемых и собственных компонентов и методов. Реализации
компонентов и методов могут быть переопределены.

класс D(…C, M(…), …)
реализации D.C AS f1(…); D.M(…) AS p1;
класс- наследник subD EXTEND D (…)
переопределение реализаций subD.C AS STORED; subD.M(…) AS p2;

Отношение класса RD… объединяет (связывает) результаты трансляций реализаций.
- для сложного компонента
RD.C AS
f1’(…)
UNION
realRD.C
- для простого компонента
RD AS
realRD LEFT JOINOID (f1’(…) [OID, calcC])
[OID, …, REPLACE(C, calcC), …], где REPLACE(C, calcC) заменяет хранимое значение простого компонента C на вычисленное значение calcC (если такое есть).

Связывание полиморфных компонентов

Слайд 48

Связывание

Структура класса-наследника объединяет множества наследуемых и собственных компонентов и методов. Реализации наследуемых

Связывание Структура класса-наследника объединяет множества наследуемых и собственных компонентов и методов. Реализации
компонентов и методов могут быть переопределены.

Для метода M, определнного в классе D, создается процедура D.M’, связывающая все существующие реализации этого метода
D.M’(these, …) AS
begin
p’1(these INTERSEPT scope(p1), …)
p’2(these INTERSEPT scope(p2), …)
end
где scope(p) определяет множество объектов, с которым связана реализация р.

класс D(…C, M(…), …)
реализации D.C AS f1(…); D.M(…) AS p1;
класс- наследник subD EXTEND D (…)
переопределение реализаций subD.C AS STORED; subD.M(…) AS p2;

Связывание полиморфных методов

Слайд 49

Трансляция

Цель: Система, состоящая из множества персистентных объектов разных классов D, определенных на

Трансляция Цель: Система, состоящая из множества персистентных объектов разных классов D, определенных
расширяемом множестве доменов (D1,…, Dn,…)

Команды декларативного ОО-языка - Спецификация класса (структура и ключи) - Создание объектов - Доступ к данным (запись и чтение) - Реализация класса (выражения и процедуры) и связывание реализаций

Таблица символов
Программируемая Реляционная Система

Ошибки

Транслятор

Выходные данные
Каталог БД

Команды ПРС

Реляционная БД определенная на фиксированном множестве доменов (dOID, D1, … Dj)

Слайд 50

прототип («RxO System»)

SQL-сервер

Прототип.

SQL

трансляция

ОО-расширения

http://theorm.narod.ru/OOtransRUS.pdf

прототип («RxO System») SQL-сервер Прототип. SQL трансляция ОО-расширения http://theorm.narod.ru/OOtransRUS.pdf

Слайд 51

Прототип.

CREATE CLASS BANKS
{
Name STRING;
BIC STRING;
}KEY uniqBIC (BIC); //ключ класса -

Прототип. CREATE CLASS BANKS { Name STRING; BIC STRING; }KEY uniqBIC (BIC);
БИК уникален для банка
CREATE CLASS CONTRACTORS //КОНТРАГЕНТЫ
{
Name STRING;
Bank BANKS; //ссылка на BANKS
BankAcc STRING;
INN STRING;
}KEY uniqINN (INN);
CREATE CLASS GOODS //ТОВАРЫ
{
Art STRING;
PricePL FLOAT; //цена
Turnover SET OF //Оборот (компонент-набор)
{
Txt STRING; //комментарии
Date DATETIME; //дата
DocN STRING; //номер
Cntr CONTRACTORS; //ссылка на CONTRACTORS
Qty INTEGER; //кол-во
}KEY Key2Turn (DocN, Cntr); //ключ компонента-набора
QtyFree INTEGER; //остаток на складе
}KEY UniqArt (Art);

Создание класса. Спецификация класса.

Слайд 52

Прототип.

CREATE CLASS SHIPMENTS //товарные операции
{
DocN STRING; //номер
Cntr CONTRACTORS; //ссылка на контрагента
DocDate DATETIME; //дата

Прототип. CREATE CLASS SHIPMENTS //товарные операции { DocN STRING; //номер Cntr CONTRACTORS;
заказа
Txt STRING; //комментарии
PostIt(inDate DATETIME); //метод "учесть"
PostDate DATETIME; //дата учета
Items SET OF //компонент-набор – список перевозимых товаров
{
Art STRING; //артикул – (внешний ключ, см.ниже)
Qty INTEGER; //штук
}KEY uniqArt (Art); //ключ набора – артикулы не повторяются
}KEY uniqDocN (DocN)
REFERENCE ToUniqArt //внешний ключ – перевозимые артикулы
Items.(Art) ON GOODS.UniqArt; // описаны в GOODS

Создание класса. Спецификация класса.

Создание класса - Спецификация класса (команда CREATE CLASS …) существование класса и его интерфейс.
- Для каждого компонента и метода задается реализация (команда ALTER CLASS… REALIZE …)

Слайд 53

Компоненты могут быть реализованы
1) Как хранимые … AS STORED;
2) Как вычисляемые с

Компоненты могут быть реализованы 1) Как хранимые … AS STORED; 2) Как
помощью процедуры, возвращающей значение
…AS
{
тело_процедуры
};
Методы класса реализуются только как процедуры и не возвращают значения

Прототип.

ALTER CLASS BANKS
REALIZE(
Name STRING,
BIC STRING
)AS STORED;

Создание класса. Реализация класса.

ALTER CLASS GOODS
REALIZE
QtyFree INTEGER AS
{
DECLARE
{
tmpQty INTEGER;
tmpQtyRes INTEGER;
}
tmpQty:=
SELECT SUM(#g.Items.Qty)
FROM SHIPMENTS #g
WHERE #g.PostDate IS NOT NULL
AND #g.Items.Art = Art;
IF(tmpQty IS NULL) THEN tmpQty:= 0;
tmpQtyRes:=
SELECT SUM(#g.Items.Qty)
FROM SHIPMENTS #g
WHERE #g.Items.Art = Art
AND #g.PostDate IS NULL
AND #g.Items.Qty < 0;
IF(tmpQtyRes IS NULL) THEN tmpQtyRes:= 0;
RETURN tmpQty + tmpQtyRes;
};

Слайд 54

Прототип.

NEW CONTRACTORS
WITH SET
.Name := "X3",
.Bank :=
(NEW BANKS WITH SET

Прототип. NEW CONTRACTORS WITH SET .Name := "X3", .Bank := (NEW BANKS
.BIC := "30602"),
.BankAcc := "40602",
.INN := "772";

Создание и доступ к объектам.

Объекты создаются командой NEW
NEW имя_класса [WITH…]
refVar := NEW имя_класса [WITH…]

Объекты уничтожаются командой DESTROY
DESTROY групповая_ссылка

DESTROY BANKS[.BIC = "I.E."];

Объекты никогда не "теряются". Относясь к классу, они доступны при групповых операциях с классом.

Слайд 55

Прототип.

Изменение данных.

Для изменения данных используются традиционные SQL операции, использующие в качестве аргуменов

Прототип. Изменение данных. Для изменения данных используются традиционные SQL операции, использующие в
пути и путевые продолжения
INSERT INTO путь ({ппрод := …}(,n))
UPDATE путь SET {ппрод :=…}(,n)
DELETE FROM путь

INSERT INTO SHIPMENTS[.DocN = "F.e."].Items (.Art, .Qty)
VALUES("Tie", 10);

Методы класса выполняются командой
EXEC путь.имя_метода ([параметры])

EXEC SHIPMENTS[.DocDate<’2011.01.01’].PostIt('2011.04.20');

В локальных контекстах допускается операция присваивания
путьлок := …;

Слайд 56

Прототип.

Запросы.

Для запросов к данным используются традиционное SELECT выражение, использующие для обозначения источников

Прототип. Запросы. Для запросов к данным используются традиционное SELECT выражение, использующие для
данных пути и путевые продолжения
SELECT ппрод FROM путь …;

Слайд 57

Прототип.

CREATE CLASS VALUEOPS //фин.документ
{
VDocN STRING; //номер
VDate DATETIME; //дата
ExpVal FLOAT; //ожидаемая сумма

Прототип. CREATE CLASS VALUEOPS //фин.документ { VDocN STRING; //номер VDate DATETIME; //дата
Value FLOAT; //сумма
};
CREATE CLASS SALES
EXTENDED SHIPMENTS, VALUEOPS
{
SaleItems SET OF //компонент-набор: данные о проданных товарах
{
Art STRING; //артикул
Price FLOAT; //цена
Qty INTEGER; //штук
}KEY uniqArtPrice (Art,Price);
}
REFERENCE ToUniqArt SaleItems.(Art) ON GOODS.UniqArt;

Наследование.

Допускается множественное наследование. Структура класса-наследника объединяет множества наследуемых и собственных компонентов и методов. Реализации наследуемых компонентов и методов могут быть переопределены.

SHIPMENTS
Items - хранимый

VALUEOPS

SALES SaleItems - хранимый Items - RValue(SaleItems)

Слайд 58

EXEC SHIPMENTS[.DocDate<’2011.01.01’].PostIt('2011.04.20');
SELECT
#s.DocN,
#s.PostDate,
#s.Txt,
#s.Cntr.Name,
#s.Items.Art,

EXEC SHIPMENTS[.DocDate SELECT #s.DocN, #s.PostDate, #s.Txt, #s.Cntr.Name, #s.Items.Art, #s.Items.Qty, #g.PricePL FROM SHIPMENTS

#s.Items.Qty,
#g.PricePL
FROM SHIPMENTS #s JOIN GOODS #g ON #s.Items.Art = #g.Art;

Прототип.

Полиморфизм

Для существующих объектов класса SHIPMENT
1)Выполняем метод
2) Вычисляем запрос

Слайд 59

EXEC SHIPMENTS[.DocDate<’2011.01.01’].PostIt('2011.04.20');
SELECT
#s.DocN,
#s.PostDate,
#s.Txt,
#s.Cntr.Name,
#s.Items.Art,

EXEC SHIPMENTS[.DocDate SELECT #s.DocN, #s.PostDate, #s.Txt, #s.Cntr.Name, #s.Items.Art, #s.Items.Qty, #g.PricePL FROM SHIPMENTS

#s.Items.Qty,
#g.PricePL
FROM SHIPMENTS #s JOIN GOODS #g ON #s.Items.Art = #g.Art;

Прототип.

Полиморфизм

Для существующих объектов класса SHIPMENT
1)Выполняем метод
2) Вычисляем запрос

Слайд 60

Использование

Предложенный подход не противоречит и не препятствует использованию «обычных» реляционных структур. При

Использование Предложенный подход не противоречит и не препятствует использованию «обычных» реляционных структур.
этом он позволяет: 1) использовать расширяемое множество доменов. 2) задавать внешние ключи между классами и отношениями. 3) комбинировать в запросах данные из отношения и классов.

Слайд 61

Использование

Предложенный подход не противоречит и не препятствует использованию «обычных» реляционных структур. При

Использование Предложенный подход не противоречит и не препятствует использованию «обычных» реляционных структур.
этом он позволяет: 1) использовать расширяемое множество доменов. 2) задавать внешние ключи между классами и отношениями. 3) комбинировать в запросах данные из отношения и классов.

Слайд 62

Использование.

Эволюционное развитие существующих реляционных СУБД.
Добавляются функции
инструмента создания объектных моделей предметной области.

Использование. Эволюционное развитие существующих реляционных СУБД. Добавляются функции инструмента создания объектных моделей

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

Евгений Григорьев (с) 2011

"Д.002 Данные
Представление фактов о предметной области системы баз данных или информационной системы в форме, допускающей их хранение и обработку на компьютере, передачу по каналам связи, а также восприятие человеком."
М.Р.Когаловский
Энциклопедия технологий баз данных.

Слайд 63

Использованная литература:
Григорьев Е.А. Объектно-ориентированная трансляция для программируемых реляционных систем. http://theorm.narod.ru/OOtransRUS.pdf (текущая версия)
Григорьев

Использованная литература: Григорьев Е.А. Объектно-ориентированная трансляция для программируемых реляционных систем. http://theorm.narod.ru/OOtransRUS.pdf (текущая
Е.А. RxO - прототип. Объектно-ориентированные SQL-подобные языковые расширения. http://theorm.narod.ru/RxOprototypeRUS.pdf (текущая версия)
Пратт Т., Зелковиц М. Языки программирования: разработка и реализация. 4-е изд. – СПб: Питер, 2002.
Codd, E.F. A Relational Model of Data for Large Shared Data Banks. CACM 13(6), June 1970. Republished in Milestones of Research -- Selected Papers 1958-1982 (CACM 25th Anniversary Issue), CACM 26(1), January 1983.
Мейер Д. Теория реляционных баз данных. – М.: Мир, 1984.
Hugh Darwen and C.J. Date. The Third Manifesto . http://www.dcs.warwick.ac.uk/~hugh/TTM/TTM-2011-10-30.pdf  (текущая версия).
А. Эйзенберг, Дж. Мелтон. SQL:1999, ранее известный как SQL3 (перевод Кузнецова С.Д.). http://citforum.ru/database/digest/sql1999.shtml
Имя файла: Объектно-ориентированный-транслятор-для-программируемой-реляционной-системы..pptx
Количество просмотров: 126
Количество скачиваний: 0