'

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

Понравилась презентация – покажи это...





Слайд 0

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


Слайд 1

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


Слайд 2

Программируемая реляционная система “Thе Third Manifecto ” by H.Darwen and C.Date "…A database shall be 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, …).


Слайд 3

Создание 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 – декартово произведение, R1E 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(…) Команды ПРС


Слайд 4

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


Слайд 5

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


Слайд 6

Объекты и классы Объект характеризуется инкапсулированными состоянием  (сложное значение) и поведением   Объектная переменная есть совокупность именованных переменных отношений + связанный функционал Объект = реляционная БД 1) Структура сложных объектов есть совокупность переменных, типы которых реализуются целевой машиной 2) ПРС как целевая машина реализует тип отношение.


Слайд 7

Объекты и классы Состояние объекта описывается множеством значений, не более сложных, чем значение отношения Вырожденные формы отношений Могут быть заданы более простыми языковыми конструкциями Далее: Рассматриваем только отношения (сложные компоненты) и скаляры (простые компоненты)


Слайд 8

Класс 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 … (…) Спецификация класса наследника объединяет спецификации родительских классов и собственных компонентов и методов. Наследуемые компоненты и методы могут менять реализацию. Объекты и классы


Слайд 9

Класс 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

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


Слайд 11

Трансляция Цель: Система, состоящая из множества персистентных объектов разных классов D, определенных на расширяемом множестве доменов (D1,…, Dn,…) Команды декларативного ОО-языка - Спецификация класса (структура и ключи) - Создание объектов - Доступ к данным (запись и чтение) - Реализация класса (выражения и процедуры) и связывание реализаций Таблица символов Программируемая Реляционная Система Ошибки Транслятор Выходные данные Каталог БД Команды ПРС Реляционная БД определенная на фиксированном множестве доменов (dOID, D1, … Dj)


Слайд 12

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


Слайд 13

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


Слайд 14

Структура и ключи Для каждого из сложных компонентов rCi класса T : значения из всех объектов могут быть объединены в виде отношения сложного компонента RT.С. (1OID ? 1setC1) E (2OID ? 2setC1) E … -> RT.C1 (1OID ? 1setC2) E … -> RT.C2 … (1OID ? 1setCm) E … -> RT.Cm где m – число сложных компонентов класса, jOID – идентификатор некоторого объекта, jsetCi –сложный компонент соответствующего объекта. Ключи Ключом отношения является совокупность поля OID и полей, указанных в спецификации как ключи соответствующего сложного компонента. Если какие-либо атрибуты сложного компонента указаны в спецификации как уникальные в классе, они является ключами отношения RT.С.


Слайд 15

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


Слайд 16

Структура и ключи EXEC begin RSHIPMENTS (OID:dOID, DocN:String, Cntr:dOID) KEY(OID), KEY(DocN), 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….


Слайд 17

Структура и ключи EXEC begin RSHIPMENTS (OID:dOID, DocN:String, Cntr:dOID) KEY(OID), KEY(DocN), 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

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


Слайд 19

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


Слайд 20

Доступ к данным Путь - обусловленная структурой классов и ссылками между ними последовательность имен, определенных в спецификации этих классов. CONTRACTORS.Bank.BIK SHIPMENTS.Cntr.Bank [.Name, .BIK] Терминальный путь, оканчивается на имя базового типа Нетерминальный путь, оканчивается на имя ссылки или сложного компонента. Допускает путевые продолжения SHIPMENTS.Items [.Art, .Qty]


Слайд 21

Доступ к данным Путь - обусловленная структурой классов и ссылками между ними последовательность имен, определенных в спецификации этих классов. CONTRACTORS.Bank.BIK SHIPMENTS.Cntr.Bank [.Name, .BIK] SHIPMENTS.Cntr [.Name, .Bank.Name, .Bank.BIK] Терминальный путь, оканчивается на имя базового типа Нетерминальный путь, оканчивается на имя ссылки или сложного компонента. Допускает путевые продолжения SHIPMENTS.Items [.Art, .Qty]


Слайд 22

Доступ к данным Путь - обусловленная структурой классов и ссылками между ними последовательность имен, определенных в спецификации этих классов. 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]


Слайд 23

Доступ к данным Общий принцип: Любой нетерминальный путь может трактоваться как имя отношения («О-вид»), содержащего атрибуты, имена которых представляют собой скалярные путевые продолжения этого пути 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

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


Слайд 25

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


Слайд 26

Доступ к данным - Простая проекция - Соединение в классе - Соединение по ссылке в атрибуте О-вида - Соединение по ссылке в заголовке О-вида - Отбор объектов Вычисление О-видов. О-виды вычисляются на основании сигнатур, с использований реляционных операций над отношениями RD… Схема результата операций - (OID:dOID, …)


Слайд 27

Доступ к данным Вычисление О-видов. Простая проекция. Сигнатура является подмножеством одного из отношений класса -> проекция Shipments [.DocNo, .Date] RSHIPMENTS[OID, DocN, Cntr]


Слайд 28

Доступ к данным Вычисление О-видов. Соединение в классе. Сигнатура содержит атрибуты разных отношений класса -> cоединение по OID + переименование атрибутов сложных компонентах Shipments [.DocNo, .Items.Art] (RSHIPMENTS LEFT JOINOID (RSHIPMENTS.Items RENAME Art AS Items.Art)) [OID, DocN, Items.Art]


Слайд 29

Доступ к данным Вычисление О-видов. Соединение по ссылке в атрибуте. Атрибут сигнатуры содержит ссылку -> cоединение (ссылка = OID) + переименование атрибутов «по ссылке» Shipments [.DocNo, .Cntr.Name] (RSHIPMENTS LEFT JOINCntr=OID (RCONTRACTOR RENAME Name AS Cntr.Name)) [OIDSHIPMENTS, DocN, Cntr.Name] Ссылочные конструкции в атрибутах могут иметь любую длину


Слайд 30

Доступ к данным Вычисление О-видов. Соединение по ссылке в заголовке. Shipments.Cntr // пример выражения групповой ссылки Выражение групповой ссылки – выражение, возвращающее унарное отношение, содержащие множество OID (групповую ссылку). …в т.ч. любой путь, оканчивающийся на имя ссылки. Shipments [.Cntr] RSHIPMENTS[OID, Cntr]


Слайд 31

Доступ к данным Вычисление О-видов. Соединение по ссылке в заголовке. Заголовок сигнатуры содержит ссылку -> cоединение (ссылка = OID) ((RSHIPMENTS)[OID, Cntr] JOINCntr=OID RCONTRACTORS) [OIDCONTRACTORS, Name, INN] Shipments.Cntr [.Name, .INN] Ссылочные конструкции в заголовках могут иметь любую длину


Слайд 32

Доступ к данным Вычисление О-видов. Отбор объектов. Выражение отбора объектов (в путях) 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]


Слайд 33

Доступ к данным Вычисление О-видов. Отбор объектов. Выражение отбора объектов для сложных компонентов имя_класса_или_ссылки<критерий, критерий…> Запятая “,” - логическая операция “межкортежный_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]


Слайд 34

Доступ к данным Вычисление О-видов. Отбор объектов. Выражения отбора объектов могут сочетаться и вкладываться 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] Поиск от условий к данным возможен …. …. "против ссылки" …. "по ссылке"


Слайд 35

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


Слайд 36

Для одного объекта (RD WHERE OID = this)[a] + (RD WHERE OID = this)[b] где this – объектный идентификатор D ( a INTEGER; b INTEGER; ... mthd(...) ) D.mthd(...) AS begin ...; ... a + b...; ...; end Трансляция процедур Идея


Слайд 37

Операцию доступа – за скобки(!) (RD WHERE OID = this)[a+b] Для одного объекта (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

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


Слайд 39

Трансляция процедур Утверждение о транслируемости: Любая процедура p над компонентами С класса D, может быть транслирована в такую процедуру p' над отношениями RD… этого класса, что результат однократного исполнения процедуры p' будет аналогичен исполнению исходной процедуры p в каждом объекте из заданного множества объектов. proc (par1:D1, par2 D2…) { localRelVal (…a:D…) } Rpar(OID, par1:D1, par2 D2…) RlocalRelVal (OID, …a:D…) Параметры и локальные переменные существуют в ПРС в relVar с разным временем жизни.


Слайд 40

Трансляция процедур Трансляция RValue выражений f( C1, C2, …) -> Cn где f - суперпозиция примитивных реляционных операций primop primop1(C1, primop2(C2, … (…))) Любая из primop может содержать скалярные операции над атрибутами отношений Ci Для любого Ci существует такое отношение классов Ri, что (Ri WHERE OID = theOID)[!OID] –> Сi где [!OID] операция проекцию, исключающая атрибут OID


Слайд 41

Для любого 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 выражений Трансляция процедур


Слайд 42

Трансляция последовательности операторов процедура proc – алгоритмическая последовательность операторов - присваивания Сj := f(… Сi …) , Rtemp - параметры, лок.переменные - вызова call p(…) update Rn with (f'(R1, R2, …) JOIN these) Трансляция процедур


Слайд 43

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


Слайд 44

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


Слайд 45

служат для персистентного хранения данных . Для их реализации создаются реальные переменные отношения ПРС, схема которых в точности соответствует ранее описанным отношениям RD…. Хранимые компоненты realRD.C (OID: dOID, a:D, …) класс D(…C(a:D…), …) реализация D.C AS STORED;


Слайд 46

Связывание Структура класса-наследника объединяет множества наследуемых и собственных компонентов и методов. Реализации наследуемых компонентов и методов могут быть переопределены. класс 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 (если такое есть). Связывание полиморфных компонентов


Слайд 47

Связывание Структура класса-наследника объединяет множества наследуемых и собственных компонентов и методов. Реализации наследуемых компонентов и методов могут быть переопределены. Для метода 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; … Связывание полиморфных методов


Слайд 48

Трансляция Цель: Система, состоящая из множества персистентных объектов разных классов D, определенных на расширяемом множестве доменов (D1,…, Dn,…) Команды декларативного ОО-языка - Спецификация класса (структура и ключи) - Создание объектов - Доступ к данным (запись и чтение) - Реализация класса (выражения и процедуры) и связывание реализаций Таблица символов Программируемая Реляционная Система Ошибки Транслятор Выходные данные Каталог БД Команды ПРС Реляционная БД определенная на фиксированном множестве доменов (dOID, D1, … Dj)


Слайд 49

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


Слайд 50

Прототип. 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); Создание класса. Спецификация класса.


Слайд 51

Прототип. CREATE CLASS SHIPMENTS //товарные операции { DocN STRING; //номер Cntr CONTRACTORS; //ссылка на контрагента DocDate DATETIME; //дата заказа 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 …)


Слайд 52

Компоненты могут быть реализованы 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; };


Слайд 53

Прототип. NEW CONTRACTORS WITH SET .Name := "X3", .Bank := (NEW BANKS WITH SET .BIC := "30602"), .BankAcc := "40602", .INN := "772"; Создание и доступ к объектам. Объекты создаются командой NEW NEW имя_класса [WITH…] refVar := NEW имя_класса [WITH…] Объекты уничтожаются командой DESTROY DESTROY групповая_ссылка DESTROY BANKS[.BIC = "I.E."]; Объекты никогда не "теряются". Относясь к классу, они доступны при групповых операциях с классом.


Слайд 54

Прототип. Изменение данных. Для изменения данных используются традиционные 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'); В локальных контекстах допускается операция присваивания путьлок := …;


Слайд 55

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


Слайд 56

Прототип. CREATE CLASS VALUEOPS //фин.документ { VDocN STRING; //номер VDate DATETIME; //дата ExpVal FLOAT; //ожидаемая сумма 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)


Слайд 57

EXEC SHIPMENTS[.DocDate<’2011.01.01’].PostIt('2011.04.20'); SELECT #s.DocN, #s.PostDate, #s.Txt, #s.Cntr.Name, #s.Items.Art, #s.Items.Qty, #g.PricePL FROM SHIPMENTS #s JOIN GOODS #g ON #s.Items.Art = #g.Art; Прототип. Полиморфизм Для существующих объектов класса SHIPMENT 1)Выполняем метод 2) Вычисляем запрос


Слайд 58

EXEC SHIPMENTS[.DocDate<’2011.01.01’].PostIt('2011.04.20'); SELECT #s.DocN, #s.PostDate, #s.Txt, #s.Cntr.Name, #s.Items.Art, #s.Items.Qty, #g.PricePL FROM SHIPMENTS #s JOIN GOODS #g ON #s.Items.Art = #g.Art; Прототип. Полиморфизм Для существующих объектов класса SHIPMENT 1)Выполняем метод 2) Вычисляем запрос


Слайд 59

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


Слайд 60

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


Слайд 61

Использование. Эволюционное развитие существующих реляционных СУБД. Добавляются функции инструмента создания объектных моделей предметной области. среды персистентного существования объектов. инструмента, позволяющего получать данные о состоянии существующих объектов. результат: Сервер модели предметной области Евгений Григорьев (с) 2011 "Д.002 Данные Представление фактов о предметной области системы баз данных или информационной системы в форме, допускающей их хранение и обработку на компьютере, передачу по каналам связи, а также восприятие человеком." М.Р.Когаловский Энциклопедия технологий баз данных.


Слайд 62

Использованная литература: Григорьев Е.А. Объектно-ориентированная трансляция для программируемых реляционных систем. 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


Слайд 63

Объектно-ориентированный транслятор для программируемой реляционной системы. Евгений Григорьев (с) 2011 СПАСИБО!


×

HTML:





Ссылка: