Объектно-реляционный язык ORL
(полуфинальная спецификация в состоянии перманентной модификации)
Структура языка
Элементы языка
Ссылки и множества
Системные объекты и базовые классы
Определение базовых классов
Дерево классов
Ключевые слова
Нереализованные понятия
Примеры использования
Структура языка
Выражения
- Язык основан на двух выражениях NEW и GET/SET. Выражения RUN и DEL вводится для удобства и могут быть функционально заменены посредством вызовов стандартных методов RUN и DEL в операторах первых двух выражений. Выражения строятся на базе
элементов языка .
- NEW
|
- Создание нового объекта класса и манипулирование им
|
- LET (GET-SET)
|
- Выборка существующего объекта (объектов) класса и манипулирование им (ими)
|
- RUN
|
- Создание нового объекта класса, манипулирование им и уничтожение после завершения манипуляций
|
- DEL
|
- Выборка существующего объекта (объектов) класса и уничтожение его (их)
|
Структура выражения
- Кажде выражение имеет следующую структуру
[keyword] class [query] [code];
keyword - ключевое слово NEW, GET, SET, RUN или DEL
class - строка символов, соответствующай имени одного из существующих классов
query - спецификация запроса, заключенная в круглые () или фигурные скобки {}, предназначенное для однозначной идентификации одного или множества объектов, с которыми должны производиться манипуляции
code - спецификация манипуляций по изменению значений атрибутов объекта и вызову его методов
NEW
[NEW] class [code];
Выражение позволяет создать новый объект класса
class и произвести с ним манипуляции в соответствии со списком операторов operators , включая изменение значений атрибутов класса и вызов методов класса применительно к объекту (в том числе методов RUN и DEL).
LET (GET | SET)
[GET | SET] class [query] [code];
Выражение позволяет предварительно выбрать один или несколько объектов класса
class и произвести с ним или с ними манипуляции в соответствии со списком операторов operators , включая изменение значений атрибутов класса и вызов методов класса применительно к каждлому выбранному объекту (в том числе методов RUN и DEL).
DEL
[NEW] class [query] [code];
Выражение эквивалентно по смыслу выражению GET | SET, причем после завершения всех манипуляций с каждым из выбранных объектов, к каждому из них применяется метод DEL для уничтожения объекта.
RUN
[NEW] class [code];
Выражение эквивалентно по смыслу выражению NEW, причем после завершения всех манипуляций с созданным объектом, к нему применяется метод RUN для предопределенных этому объекту действий и, затем - метод DEL для уничтожения объекта
Элементы языка
В языке выдяляются следующие группы синтаксических элементов
Ключевые слова NEW, GET, SET, RUN или DEL
Имена базовых и призводных классов, методов и атрибутов
Знаки препинания , предназначенные для разделения выражений и элементов языка
Значения типа имени, строки, числа, даты
Выражения , определяемые ключевыми словами и именами классов, запросами и операторами
Запросы , представляющие собой списки условных операторов и вложенных запросов
Операторы , представляющие собой списки условные и безусловловных операторов и операторов-выражений
Знаки препинания
В языке выделяются следующие знаки препинания
;
- точка с запятой обозначает конец выражения или оператора в списке операторов
,
- запятая разделяет элементы множеств в списках, операторы в списках операторов запроса или выражения в списке выражений внутри оператора
.
- точка обозначает переход от одного объекта или метода к другому объекту или методу в пути доступа по цепочке
{
и } - фигурные скобки обозначают начало и конец запроса или ссылки, операторы которых соединены по условию OR
(
и ) - круглые скобки обозначают начало и конец запроса или ссылки, операторы которых соединены по условию AND
"
и " - двойные кавычки обозначают начало и конец строки текста
//
- начало комментария, продолжающегося до конца строки
Значения
- Имя - цепочка символов латинского алфавита и цифровых, включая символ подчеркивания _, где первый в цепочке символ не является цифровым
- Строка - цепочка любых символов, кроме символа пробела и знаков препинания, где первый символ не является цифровым, или цепочка любых символов, заключенная в двойные кавычки
- Число - цепочка любых символов из числа {0123456789.+-}, где + и - могут стоять только один раз в начале, а точка может стоять только в одном месте
- Дата - эквивалентна строке
Запросы
Все запросы являются экземплярами базового класса запрос или производных от него классов.
Операторы
Все операторы являются экземплярами базового класса запрос
Ссылки и множества
Для связи объектов друг с другом язык предусматривает ссылки и множества.
- Ссылка обозначает однозначное указание на некий объект и соответствует таким понятиям, как машинный адрес в памяти или уникальный первичный ключ в базе данных. В языке ссылка представлена как запрос, однозначно идентифицирующий тот объект, на который делается ссылка.
- Множество, или коллекция значений, представляет собой список ссылок или массив указателей на объекты некоторого класса, в том числе класса объект (что практически означает
множество объектов любого класса)
Системные объекты и базовые классы
Системными объектами являются экземпляры базовых классов "класс", "метод", атрибут, изначально определенные системой, и определяющие следующие базовые предопределенные классы, все из которых являются объектами, то есть - экземплярами класса объект.
Объект
Базовый класс для всех других классов. От него происходят все остальные базовые классы, а также подавляющее большинство производных классов, определяемых для хранения данных предметной области. Класс класс является, с одной стороны, производным от него, а сам объект является, в свою очередь экземпляром класса класс. Не происходит ни от кого.
OBJECT
Класс
Класс объектов, экземпляры которого являются классами. Происходит от класса
объект. Все базовые классы, включая и его самого, являются его наследниками. Класс объект является его экземпляром, и он сам является экземпляром самого себя. Класс класс может описывать как множество объектов, размещенных в одной таблице базы данных, так и тип значения атрибута другого класса или аргумента метода или функции.
CLASS
Метод
Класс, описывающий некую программную функцию, выполняющую некоторые действия применительно к какому-либо классу и реализованную некоторым образом. Происходит от класса
класс.
METHOD
Атрибут
Класс, описывающий атрибут объектов некоторого класса или входные, выходные или внутренние параметры некоторого метода. Происходит от класса
объект.
ATTRIBUTE
Оператор
Класс, объектов описывающих некоторое однократное действие над объектами или атрибутами, выполняемое в последовательности других таких-же объектов, в рамках
метода или запроса.
OPERATOR
Запрос
- Класс, описывающий некоторые правила выбора объекта заданного класса, возможные действия над ним и какой-либо непосредственно возвращаемый результат. Происходит от класса
метод, являются его системно-поддерживаемыми расширением.
QUERY
Определение базовых классов
CLASS OBJECT
Атрибуты
- ID - число, системный идентификатор объекта, уникальный первичный ключ в базе данных
- CLASS - ссылка на объект - "основной" класс данного объекта
- OWNER - ссылка на объект - "владелец" данного объекта
- ELEM - идентификатор (системный атрибут)
- CLASSES - множество классов, экземплярами которых является объект
- VALUES - множество значений атрибутов объекта (системный атрибут)
- JOINED BY - множество объектов, к которым данный объект присоединен
- JOINS - множество объектов, присоединенных к данному объекту
Описание атрибутов
Синтаксис
Определение
-
CLASS CLASS
Атрибуты
- NAME - строка, системное имя класса в символах латинского алфавита, уникально его идентифицирующее
- TEXT - строка, текстовое описание класса, или альтернативное содержательное имя в символах любого алфавита
- TYPE - строка, тип класса [ ATOM | STRUCTURE | VARIANT ]
- USAGE - строка, назначение класса [ABSTRACT|TEMPORARY|UNIVERSAL|ALONE|EMBEDDED|REFERENCED]
- TABLE - строка, имя базы данных и таблицы в базе банных, при хранении класса в базе данных
- EXTENDS - множество наследуемых классов
- EXTENDED BY - множество классов - наследников (зарезервированный атрибут)
- METHODS - множество методов класса
- ATTRIBUTES - множество атрибутов класса
OBJECTS - множество объектов - экземпляров класса
Описание атрибутов
- TYPE
- Допустимые значения:
- atom - элементарный класс
- structure - структура
- variant - вариант
- USAGE
- Описывает способ хранения экземпляров класса
- Допустимые значения:
- abstract - абстрактный для наследования дочерними классами
- temporary - существует только в памяти для временного использовани
- universal - реальный для инстантации экземплярами в СУБД
- alone - самостоятельный для непосредственного доступа
- embedded - встроенный для использования внутри объектов
- referenced - самостоятельный для использования в связи с другими
- Примечания:
- universal включает alone, owned, linked, и, возможно, temporary
Синтаксис
- <class_statement> =
- [ universal | abstract | temporary | alone | embedded | referenced ]
- class <class_name>
- [ <constructor_arguments> ] [ <external_text> ]
- <attribute_declaration> = | <attribute_statement> | { <attribute_statement> } |
- <attribute_statement> = <attribute_name>
- [ access [ protected | private | public ] ;]
- [ usage [ embedded | [shared|own] reference | [shared|own] collection ] ;]
- [ key [ not [key] | unique | order ] ;]
- [ null [ null | not [null] ] ;]
- <class_reference> [ <constructor_arguments> ];
- [ <external_text> ]
- ;
- <external_text> = text <text_string> ;
-
Определение
-
CLASS METHOD
Атрибуты
- NAME - строка, системное имя метода в символах латинского алфавита, уникально его идентифицирующее
- TEXT - строка, текстовое описание метода, или альтернативное содержательное имя в символах любого алфавита
- TYPE - способов реализации метода [ CODE | PROGRAM | STORED | SCRIPT ]
- RETURN - значение, возвращаемое методом, возвращаемый атрибут
- CALLS - множество операторов метода CODE
- CALLERS - множество методов, вызывающих этот метод
- LOGIC - сцепление подчиненных операторов IF (AND или OR) и DO (PAR/SEQ)
- LOCATION - расположение метода
Описание атрибутов
- OWNER - класс, методом которого является данный метод
Синтаксис
Определение
-
CLASS ATTRIBUTE
Атрибуты
- ORDER - порядковый номер атрибута
- NAME - строка, системное имя атрибута в символах латинского алфавита, уникально его идентифицирующее
- TEXT - строка, текстовое описание атрибута, или альтернативное содержательное имя в символах любого алфавита
ACCESS - [ protected | private | public ]
KEY - [ not [key] | unique | order ]
USAGE - [ EMBEDDED | REFERENCE | COLLECTION]
SHARED - [ YES | NOT ]
TYPE - (STRING,INT,DATE,STRUCTURE,UNION)
DOMAIN - ссылка на класс значениий данного атрибута
NULLS - разрешены ли пустые значения [ NO | YES ] ( [NULL | NOT NULL] )
PARAMETER - является ли атрибут параметром [ NO | IN | OUT | INOUT ]
QUERY - ссылка на METHOD, реализующий инициализацию значения атрибута при создании экземпляра объекта данного класса
Описание атрибутов
- OWNER - ссылка на класс, атрибутом которого является сам атрибут
Синтаксис
Определение
CLASS OPERATOR
- реализация оператора DO или фильтра IF запроса или метода
- TYPE - тип значения операнда - самоочевидно по контексту VALUE/QUERY
- LQUERY - объект атрибута оператора (1 операнд)
- LVALUE - атрибут оператора (1 операнд)
- OPERATION - операция оператора
- OPERATION - операция оператора
- VALUE - значение операнда (2 операнд)
- QUERY - запрос операнда (2 операнд)
- CALLS - подчиненные вложенные операторы
- LOGIC - сцепление подчиненных операторов IF (AND или OR) и DO (PAR/SEQ)
Атрибуты
Описание атрибутов
TYPE : DO PAR = …,…,… DO SEQ …;…;…
TYPE : IF ANY = …,…,… IF ALL …;…;…
Синтаксис
Определение
Разновидности
|
- TYPE
|
- LQUERY
|
- LVALUE
|
- OPERATION
|
- METHOD
|
- QUERY
|
- VALIUE
|
- Присвоение значения
|
- DO
|
- Get-query
|
- Attribute
|
- +-*/…
|
|
|
- Value
|
- Присвоение переменного значения
|
- DO
|
- Get-query
|
- Attribute
|
- +-*/…
|
|
- [Get-query]
|
- Attribute
|
- Проверка на значение
|
- IF
|
- Get-query
|
- Attribute
|
- <>=…
|
|
|
- Value
|
- Проверка на переменное значение
|
- IF
|
- Get-query
|
- Attribute
|
- <>=…
|
|
- [Get-query]
|
- Attribute
|
- Вызов метода
|
- RUN
|
- [Get-query]
|
|
|
- Method
|
- [Set-query]
|
|
- Создание (на основании шаблона)
|
- NEW
|
[Get-query] |
|
|
|
- Set-query
|
|
- Манипуляция
|
- LET
|
- Get-query
|
|
|
[Method] |
- Set-query
|
|
- Манипуляция
|
- GET
|
- Get-query
|
|
|
[Method] |
- [Set-query]
|
|
- Манипуляция
|
- SET
|
- [Get-query]
|
|
|
[Method] |
- Set-query
|
|
- Удаление
|
- DEL
|
- Get-query
|
|
|
|
- [Set-query]
|
|
CLASS QUERY
Атрибуты
- Атрибуты соответствуют
методу
Описание атрибутов
- TYPE - тип запроса SET | GET | NEW | DEL (UPDATE | SELECT | INSERT | DELETE)
- OWNER - класс объекта, к которому применяется запрос
- CALLS - для SET - операторы, для GET - условия фильтра
Синтаксис
Определение
Дерево классов (пока еще устаревшее)
Примерно соответствует схеме системных метаданных в том смысле, что манипуляции на синтаксическом уровне языка управления бизнес-метаданными и бизнес-данными прямо отображаются на создание, удаление и изменение объектов метаданных и данных в системной области
- DATA
- SYSTEM METADATA
- CLASS
- INTERFACE
- ...
- SYSTEM DATA
- OBJECT
- BUSINESS METADATA
- BUSINESS_CLASS
- BUSINESS_INTERFACE
- ...
- BUSINESS DATA
- BUSINESS_OBJECT
- ...
- ...
Зарезервированные слова
Эти слова являются именами базовах классов и методов или их атрибутов. Хотя принципиально нет необходимости ограничивать использование этих слов, во избежание путаницы не рекомендуется их использование.
name primary unique nokey type function method implemented embed extends
extended embeds embedded object location implementation call caller
argument order attribute owner extension functions methods arguments objects
calls callers attributes owners universal alone usage query new set get del
filter filters operation operand operator value temporary alone
reference references referenced run key access entity id attribute
not but by shared collection atom structure variant own defaults
Нереализованные понятия
- entity // базовая сущность, от которой все растет
- id // уникальный код
- name // основное им
- attribute // атрибут сущности или отношение M:1
- references[] // набор при сущности или отношение 1:M
- new // метод создани
- set // метод изменени
- get // метод выборки
- del // метод удалени
- run // метод запуска
interface // по сути, набор методов, реализующих поведение
functions[] // по сути, абстрактные методы
implemented[] // реализующие классы
text // внешнее имя интерфейса
function
interface // интерфейс функции
methods[] // список методов функции
arguments[] // аргумент функции (доступен вызывающему после)
implementation // реализация класса-интерфейс
interface // реализующий класс
class // реализуемый интерфейс
call // вызов метода методом
method // вызываемый метод
caller // вызывающий метод
argument // аргумент метода
function // функция аргумента
order // порядок аргумента
class // класс-тип аргумента
extension // наследование двух классов
class // класс-наследник
super // наследуемый класс
not / but - используются для переопределения системных метаданных on fly
class any_class
usage not abstract but universal;
text not "Any abstract class" but "Some universal class";
;
class.referenced - переход к классу, владельцу отношени
Примеры использования языка
- new person
- name = john;
- age = 35;
- kids
- name=ann; age=1 ;
- ,
- name=bob; age=2 ;
- ;
- wife
- name=joe; age=22;
- ;
- ;
-
- method
- query_person;
- owner (name person)
- type get;
- logic all;
- code
- name = john,
- age = 35,
- ;
- ;
-
- get person( name=jonh, age=35 ) age+=1, name=John; ;
- get person( name=jonh; age=35 ) age+=1; name=John; ;
- set person age+=1, name=John; ( name=jonh, age=35 );
- set person age+=1; name=John; ( name=jonh; age=35 );
-
-
SQL
- CREATE TABLE PERSON_DATA (
- FIRST_NAME CHAR(40), MIDDLE_NAME CHAR(40), LAST_NAME CHAR(40));
- INSERT INTO PERSON_DATA (FIRST_NAME, MIDDLE_NAME,LAST_NAME)
- VALUES ("Васисуалий", "Сысоевич", "Лоханкин");
- INSERT INTO PERSON_DATA (FIRST_NAME, MIDDLE_NAME,LAST_NAME)
- VALUES ("Сидор", "Петрович", "Иванов");
- UPDATE PERSON_DATA SET MIDDLE_NAME = "Свиридович"
- WHERE FIRST_NAME "Васисуалий" AND LAST_NAME "Лоханкин" ;
ORL
- class PERSON_DATA
- storage alone;
- text "Данные физического лица";
- extends BUSINESS_TYPE, BUSINESS_STRUCTURE;
- implements SOME_INTERFACE, OTHER_INTERFACE;
- attributes
- CHAR FIRST_NAME(40) text "Имя",
- CHAR MIDDLE_NAME(40) text "Отчество",
- CHAR LAST_NAME(40) text "Фамилия";
- ;
- PERSON_DATA objects
- FIRST_NAME "Васисуалий", MIDDLE_NAME "Сысоевич", LAST_NAME "Лоханкин";
- FIRST_NAME "Сидор" , MIDDLE_NAME "Петрович", LAST_NAME "Иванов" ;
- ;
- PERSON_DATA objects ( FIRST_NAME "Васисуалий" LAST_NAME "Лоханкин" )
- MIDDLE_NAME "Свиридович"
- ;
Примеры ORL-запросов посредством класса QUERY
- // 1 вариант запроса
query GET_MIDDLE_NAME_BY_OTHERS
class PERSON_DATA;
return MIDDLE_NAME;
filters FIRST_NAME = value "Васисуалий", LAST_NAME = value "Лоханкин" ;
text "Выборка отчества по имени и фамилии";
;
// 2 вариант запроса
query GET_MIDDLE_NAME_BY_OTHERS
PERSON_DATA; MIDDLE_NAME;
FIRST_NAME = value "Васисуалий", LAST_NAME = value "Лоханкин" ;
;
// 1 вариант запроса с изменением
query GET_MIDDLE_NAME_BY_OTHERS
PERSON_DATA;
FIRST_NAME = value "Васисуалий", LAST_NAME = value "Лоханкин" ;
;
PERSON_DATA objects ( GET_MIDDLE_NAME_BY_OTHERS ) MIDDLE_NAME "Свиридович".
// 2 вариант запроса с изменением
PERSON_DATA objects
( FIRST_NAME = value "Васисуалий", LAST_NAME = value "Лоханкин" )
MIDDLE_NAME "Свиридович"
;
// Запрос с косвенной подстановкой критери
// SELECT CLIENT NAME WHERE CLIENT.ID = ORDER.CLIENT_ID
query GET_ORDER_CLIENT_ID class ORDER; return CLIENT_ID .
query GET_CLIENT_NAME_BY_ORDER
class CLIENT;
return NAME;
filters ID = query GET_ORDER_CLIENT_ID
;
// или
- query GET_CLIENT_NAME_BY_ORDER
- class CLIENT;
- return NAME;
- filters ID = query ( class ORDER; return CLIENT_ID )
- ;
Словарь
ATTRIBUTE. QUERY
Объектно-реляционный язык ORL и системное ядро