SummerSlam (2000)
- 1 year ago
- 0
- 0
RSL или Object RSL ( аббр. от англ. R-Style Language ) — объектно-ориентированный , предметно-ориентированный , интерпретируемый , проприетарный язык программирования , разработанный компанией для использования в своих программных продуктах .
Среда разработки под названием «Оболочка RSL» включает в себя:
RSL также называют макроязыком , а программы на нём — макросами . Инструменты для создания и отладки программ на RSL доступны для свободного скачивания на сайте разработчика, однако такие макросы не должны содержать вызовов модулей, содержащих бизнес-логику и встроенных в основные программы R-Style Softlab. Интерпретатор реализован под Windows , позволяет работать под Wine . Ранние версии поддерживали MS-DOS .
Поддержка RSL встроена во все подсистемы АБС , а также InterBank, RS-Payments.
TArray()
.
TbFile()
.
OnError()
и класса
TrslError()
.
Модуль RSLSRV регистрирует в системе объект RSLSrv.RslEngine, который позволяет использовать макрос на RSL как объект ActiveX . Глобальные переменные макроса становятся свойствами, а процедуры — методами. Например, пусть существует макрос myactivex.mac :
var str1:String = "Test string"; macro func1(a) return a*a; end;
тогда можно использовать следующий код на Visual Basic :
Sub TestRSL()
Set eng = CreateObject("RSLSrv.RslEngine")
Set MyObj = eng.LoadModule("myactivex.mac")
Debug.Print MyObj.str1 ' печатает Test string
Debug.Print MyObj.func1(2) ' печатает 4
End Sub
RSD — библиотека предназначена для универсального доступа к источникам данных, поддерживающим SQL , из программ на языках C++ и RSL. Объектная модель построена на основе ADO .
Библиотека имеет несколько уровней (каждый последующий уровень базируется на предыдущем: большую часть функциональности делегирует нижележащему уровню):
Уровни 1 и 2 реализованы в виде DLL , а уровень 3 — как DLM.
|
Этот раздел статьи
ещё
не написан
.
|
|
Этот раздел статьи
ещё
не написан
.
|
Windows Reports — объектно-ориентированная библиотека для вывода отчётов в форматы офисных приложений MS Excel , MS Word , Internet Explorer . Библиотека основана на технологиях RSCOM и ActiveX . Большая часть написана на RSL, также в состав входят DLM-модули.
RSL имеет встроенную поддержку работы с базами данных (БД), управляемых
Pervasive PSQL
(
ранее
Btrieve
и
Pervasive.SQL
).
Словари БД
имеют расширение
.def
(аналог
.ddf
), файлы таблиц БД —
.dbt
(аналог
.mkd
). Также есть возможность работать с файлами БД
.dbf
. Работа с
SQL
организована с использованием
ADO
через модуль
и библиотеки
.
|
Этот раздел
не завершён
.
|
В части синтаксиса RSL имеет общие черты с языками
C++
и
Pascal
. Например, присваивание и операции сравнения «равно», «не равно» записываются так же, как и в C++ (
=
,
==
,
!=
). А логические операции — как в Pascal (
and
,
or
,
not
).
RSL (аналогично C++ ) поддерживает комментарии двух типов: многострочные и однострочные .
/*
Пример большого комментария,
состоящего из нескольких строк
*/
// Вся оставшаяся часть строки является комментарием
Язык RSL разрешает наличие вложенных комментариев обоих типов как по отдельности, так и вместе.
Все поддерживаемые типы данных в RSL разделяются на скалярные и объектные.
Скалярные типы:
Integer
.
Double
.
Decimal
,
Numeric
.
Money
.
String
.
Bool
(имеющий значения
TRUE
и
FALSE
).
Date
.
Time
.
DateTime
.
MemAddr
.
ProcRef
.
MethodRef
.
SpecVal
(имеющий значения
NullVal
и
OptVal
).
NULL
.
Variant
.
Объектные типы:
Tbfile
.
TRecHandler
.
TArray
.
TStreamDoc
.
Object
.
В RSL предусмотрено неявное и явное преобразование из одного типа данных в другой.
Integer
→
Double
→
Numeric
→
String
.
if
и
while
значений не булевого типа. В таком случае произойдет попытка преобразования в булев тип.
Int()
,
Double()
,
Decimal()
,
Numeric()
,
String()
,
Money()
и др.
В 1997 году язык RSL стал объектно-ориентированным и изменил название на Object RSL . Он вводит классы, которые обеспечивают три самых важных свойства объектно-ориентированного программирования (ООП): инкапсуляцию , наследование и полиморфизм .
В RSL (в отличие от других языков программирования, к примеру, от C++) конструирование объектов происходит в два этапа:
Init
. Если инициализацию необходимо выполнить для класса-родителя, то его метод
Init
следует вызвать явно при инициализации класса-наследника.
Таким образом, в классах RSL деструкторы , определяемые пользователем, не применяются (объекты и их свойства удаляются автоматически).
В RSL наследование позволяет описать новый класс на основе уже существующего (родительского, базового) класса. Таким образом, все методы и свойства класса-родителя также становятся методами и свойствами класса-наследника. Кроме этого, класс-наследник может добавлять свои свойства и методы или переопределять методы класса-родителя . Наследование позволяет строить иерархии классов. Множественное наследование в RSL запрещено.
При наследовании имя класса-родителя указывается в круглых скобках после ключевого слова
Class
. Для инициализации класса-родителя необходимо вызвать предопределенный метод, название которого образуется путём добавления к имени класса-родителя приставки
Init
.
Пример наследования классом Employee («Сотрудник») класса Person («Персона»), при добавлении к нему свойства Post («Должность»):
Class Person (Name, Surname) // Список свойств и методов класса Person end;
Class (Person) Employee (Name, Surname, Post) InitPerson (Name, Surname); // Инициализация класса Person в классе Employee Macro Report() println("Post: ", Post); end; end;
В RSL инкапсуляция реализуется через указание уровня доступа к свойствам и методам класса, а также к переменным и процедурам макромодуля.
private
позволяет объявлять переменные, процедуры и классы как
приватные
, что накладывает запрет на доступ к ним извне. Этот модификатор является аналогом модификатора
protected
в C++.
local
можно объявлять переменные, объекты и процедуры как
локальные
. Локальные переменные доступны только локальным процедурам. Невозможно обратиться к локальной переменной внутри любой другой процедуры макромодуля.
|
local
перед свойством класса, то оно перестает быть свойством класса, как таковым, и становится локальной переменной конструктора. Таким образом, модификатор
local
применим только для процедур инициализации модуля и конструктора класса.
{}
):
|
a
и
{a}
— разные переменные. Если свойство класса взять в фигурные скобки, то оно перестанет быть свойством, как таковым, и стает глобальной переменной макромодуля. Обращение к нему будет осуществляться напрямую по имени, а не через ссылку на объект класса.
Уровни доступа к свойствам и методам класса :
Доступ |
Локальный
(local) |
Приватный
(private) |
Глобальный |
Принудительно
глобальный |
В самом классе | да / нет | да |
да
(через объект класса) |
да |
В наследниках | нет | да |
да
(через объект класса) |
да |
Извне | нет | нет |
да
(через объект класса) |
да |
Уровни доступа к переменным , процедурам и объектам макромодуля:
Доступ |
Локальный
(local) |
Приватный
(private) |
Глобальный |
Принудительно
глобальный |
В макромодуле | да / нет | да | да | да |
В модулях, которые
импортируют данный |
нет | нет | да | да |
Все методы классов RSL являются виртуальными . Так, RSL реализует полиморфизм включения (или чистый полиморфизм) посредством наследования. При добавлении в классе-наследнике метода с именем, которое уже используется для одного из методов класса-родителя, метод наследника переопределит метод родителя. К методу родителя доступ будет только из метода наследника, который его переопределяет. Обращение к этому методу родителя осуществляется по его имени. Но в классе-наследнике вне переопределяющего метода не будет доступа к переопределенному методу родителя. Также станет невозможным обратиться к этому методу класса-родителя через ссылку на объект класса-наследника в основной части программы.
Class First() // Класс-родитель Var x = 2, y = 3;
Macro Sum() return x + y; end; end;
Class (First) Second() // Класс-наследник InitFirst(); Var a = 100;
Macro Sum() // Начало переопределения родительского метода Sum() return Sum() + a; // Использование родительского метода Sum() в методе Sum() наследника end; // Конец переопределения родительского метода Sum()
Macro Sum2() return Sum() + a; // Использование метода Sum() наследника end; end;
obj = Second(); // Создание объекта класса Second()
println(obj.Sum()); // Результат: 105 println(obj.Sum2()); // Результат: 205
Если в этом примере из класса-родителя убрать метод
Sum()
, то в классе-наследнике произойдет
рекурсивный
вызов метода
Sum()
.
Объявлять переменные и указывать их тип не обязательно. Операторы сравнения имеют более высокий приоритет, чем логические операторы. Например, если надо выполнить «действие» в том случае, когда переменная a равна 1 или 2, то необходимо применить следующую конструкцию:
if ((a == 1) or (a == 2)) // действие end;
Выполнение программы начинается с первой инструкции, не входящей в класс или процедуру, как в php .
macro func1 [I'm function 1]; end; // выполнение начнётся здесь [Let's go!];
Программа « Hello, world! » на RSL :
[Hello, world!];
Квайн на RSL (форматирование для удобства чтения):
s="''s=Print(SubStr(s,1,2)+StrFor(34)+s+StrFor(34)+StrFor(59)+SubStr(s,3));''"; Print(SubStr(s,1,2)+StrFor(34)+s+StrFor(34)+StrFor(59)+SubStr(s,3));
Для улучшения этой статьи
желательно
:
|