(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

SAL - эффективный язык программирования для построения информационных систем

С.А. Большаков

Оглавление

Введение

Предварительно поясню, почему решился написать данную статью.

Во-первых, часто возникают вопросы:

  • Какой язык является основой CTD2000 и удобен ли он при разработке сложных информационных систем?
  • Можно ли его сравнить с распространенными языками программирования?
  • В чем его основные преимущества и недостатки?

Во-вторых, действительно считаю, что язык SAL, созданный позднее наиболее известных языков и, поэтому, включивший в себя их основные достоинства, является эффективным и удобным инструментом программирования. В первую очередь, это касается проектов создания информационных систем.

Если посмотреть вглубь вопроса, то, возможно, главными при выборе и использовании языка программирования будут следующие свойства:

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

Конечно, для характеристики языка программирования, который является специализированным языком перечисленных свойств явно недостаточно, но, я думаю, они понятны опытным разработчикам, а также и причины, по которым я делаю на них акцент. Считаю, что именно эти цели поставили перед собой разработчики, когда проектировали и реализовывали новую систему программирования - SQLWindows.

И, в-третьих, мы больше говорим о возможностях систем программирования, их сравниваем, а меньше обращаем внимание на языки программирования, что также очень важно при выборе средств для реализации информационных систем.

Заранее скажу, чтобы предвосхитить возражения, что в данной статье не предусматривается сравнение с другими языками, и данная статья не является рекламной. Основная цель, которую я преследую - познакомить читателя с языком SAL и его характеристиками. Понимаю, что в короткой статье невозможно описать язык полностью, поэтому постараюсь обратить внимание на самые существенные свойства и особенности.

Общие особенности языка

Язык SAL был разработан для системы программирования SQLWindows, которая изначально была ориентирована на программирование в среде Windows (читай на обработку сообщений) и для взаимодействия с СУБД, основанными на SQL языке. Отсюда, кстати и название системы SQLWindows (SQL+Windows). Название самого языка программирования происходит от названия системы: SAL - SQLWindows Application Language. С другой стороны за основу языка были взяты конструкции структурного программирования ( if, while и т.д.), поэтому язык получился очень похожим на язык СИ. Так как SAL является в большей степени специализированным языком, то в нем, по сравнению с СИ, введены ограничения (нет указателей и т.п.). Однако в него введены и такие возможности, которые в СИ не реализованы в явном виде (например, переменные типа String и Boolen). В целом, разработчики нового языка нашли удачный компромисс между универсальностью (или даже сверхуниверсальностью, как в СИ) и специализированными возможностями языка по работе с данными.

Я думаю, что найдена некоторая "золотая середина", позволяющая достичь целей и свойств, рассмотренных выше. Так, в частности, в языке отсутствуют операторные скобки при наличии блоков (при первом взгляде это выглядит дико!), нет необходимости в лишних преобразованиях данных, введены стандартные объекты, обеспечивающие простоту построения интерфейса пользователя. С другой стороны, язык SAL является объектно-ориентированным языком, обеспечивающим создание объектов и наследование их, является в полной мере одним из языков класса 4GL.

Структура программы

Самой главной особенностью языка SAL является представление программы в структурном виде, который называется OUTLINE. Такое представление очень похоже на представление структуры документа в Word. При желании мы можем развернуть фрагмент текста или его свернуть. В конечном счете, все приложение или описание отдельного окна может быть свернуто в одну строку текста. Покажем это на примере. Фрагмент текста обработки сообщения при нажатии кнопки в развернутом виде:


ON SAM_Click
Set bVal = TRUE
Call SalSendMsg (pbFind, SAM_Click, 0, 0)
Return TRUE

Фрагмент этого же текста в свернутом виде:


ON SAM_Click

В этом простейшем примере мы можем наблюдать еще одну особенность. Три строки (оператора) являются блоком, но выделение блока выполняется не за счет операторных скобок, а за счет вложенности и автоматического сдвига текста вправо, как это предусмотрено в стандартах структурного программирования (традиционные скобки: {, }, begin и end становятся ненужными). По этой же причине не используются разделители конца оператора (например, <;>). К этому быстро привыкаешь, как привыкли к программированию без GOTO, которого, кстати, в SAL вообще нет. В таком OUTLINE представлении, которое, по сути, является объемным представлением текста программы, закрашенные "ромбики" означают наличие вложенности, а пустые - ее отсутствие. Отмечу, что такое представление программы появилось задолго до того, как в распоряжение программистов появились объекты в виде деревьев просмотра.

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

Function: ConvertDate
Description:
Returns:
String:
Parameters:
String: strVal
Receive Date/Time: dtVAL
Static Variables:
Local Variables:
Number: nTemp
Date/Time: dtTemp
Actions:
Set nTemp = 0
Call …

Расположение фрагментов описания параметров функции (Parameters), локальных переменных функции (Local Variables), типа возврата (Returns) и тела функции (Actions) фиксировано. Имена переменных могут быть произвольными (регистр различается). В примере для наглядности даны префиксы типа переменных. При необходимости мы можем развернуть нужный фрагмент OUTLINE, просмотреть его и отредактировать. Аналогично структурируется вся программы (описание глобальных переменных и функций, настроек, окон), отдельные объекты общего вида и объекты интерфейса (состав окна, параметры, переменные окна и т.д.). Такая структуризация, на первый взгляд, вносит ограничения, но на самом деле эти ограничения призрачны, а порядку в программе, извините за тавтологию, на порядок больше. К структурной организации приложения быстро привыкаешь, а жесткая организация программного текста способствует, в конечном счете, уменьшению числа ошибок. Рассмотрим ниже основные элементы программирования.

Переменные, константы и комментарии

Переменные в программе могут быть следующих типов:

  • Boolen (Receive) - логические переменные
  • Date/Time (Receive) - переменные типа дата-время
  • File Handle (Receive) - переменная дескриптор файла
  • Long String (Receive) - переменная длинная строка (BLOB)
  • Number (Receive) - универсальная вещественная переменная (и целая в том числе)
  • Sql Handle (Receive) - переменная указатель курсора
  • String (Receive) - переменная типа строка (до 256 символов)
  • Window Handle (Receive) - переменная указатель оконного объекта
  • Session Handle (Receive) - переменная дескриптор сессии
  • Стандартные классы - переменные стандартных классов
  • Собственные классы - переменные собственных классов.

Переменные, помеченные как Receive, могут быть возвращены из функции, фактически выполняется передача по ссылке, хотя при вызове функции это не нужно явно указывать. Максимальная длина имени идентификатора равна 500 символам, кроме того, различается регистр, как в СИ. Существует набор специальных системных переменных, которые упрощают работу функций и операторов, например: SqlUser- идентифицирует пользователя при подключении к БД. Константы в программе могут быть следующих типов: Boolen, Date/Time, Number и String. Задание констант выполняется в традиционном синтаксисе: строка - "Пример". Комментарии помечаются знаком "!" в первой позиции строки, например:

! Временно комментировано при отладке
! Set = nTemp

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

Операции, операторы и выражения

В языке SAL предусмотрен стандартный набор операций в общепринятой транскрипции: арифметические, отношения, логические, побитовые и операции над строками. Приоритеты выполнения операций традиционны, а скобочная запись поддерживается практически любой вложенности. Набор операторов языка SAL следующий:

  • Break - оператор завершения циклов
  • Call - оператор вызова функций, в параметрах тоже могут вызываться функции.
  • If - условный оператор
  • Else - часть составного условного оператора
  • Else if - часть составного условного оператора с продолжением проверок
  • Loop - оператор цикла с повторением
  • On - Оператор обработки сообщений к объектам
  • Return - возврат из функций
  • Select Case - оператор переключатель
  • Set - оператор присваивания.
  • When SqlError - оператор обработки ошибок в SQL запросах
  • While - оператор цикла по условию

Из данного перечисления видно, что язык SAL обладает полным набором операторов, поддерживающих структурное программирование, что является, кстати, еще одной его особенностью. Построение выражений в языке SAL соответствует общепринятому в универсальных языках программирования: в качестве элементов могут быть функции с вложенным вызовом, причем гарантируется стандартное приведение типов. В качестве фактических параметров функций могут использоваться любые выражения.

Массивы

Предусматривается описание и использование массивов переменных любых доступных типов. Массивы могут быть статическими (фиксированного размера) и динамическими с переменными границами, устанавливаемыми в процессе выполнения программы. Массивы могут быть одноразмерные, двухразмерные и многоразмерные. Для работы с динамическими массивами мгогоразмерными предусмотрены специальные функции. Число размерностей массива ограничивается только доступными системными ресурсами. При работе с массивами типа дескрипторов (например, окон) обеспечивается автоматическое преобразование названия оконного объекта в соответствующий тип дескриптора, например:

Window Handle: hWndKeyFields[*] - описание массива дескриптора окон

Set hWndKeyFields[0]=dfLastName - заполнение переменной массива полем фамилии

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

Локальность описаний, области видимости и квалификация ссылок.

Для доступа к переменным и объектам в SAL введены механизмы ограничения доступа: определение локальных переменных, переменных окон, внутренних переменных объектов. Это позволяет выполнять программирование разных фрагментов приложений с использованием идентичной нотации. При необходимости возможен также доступ к этим данным, для чего нужно указать квалифицированную ссылку вида:

Set nTemp = MainWindow.nVal

В приведенном примере обращение к переменной nVal выполняется через ссылку на окно MainWindow.

Функции

Язык SAL обеспечивает создание и вызов внутренних функций (internal) и внешних функций (external). Пример описания фрагмента функции был дан выше. Внешние функции могут подключаться из динамических библиотек общего вида (DLL) или из библиотек, созданных на базе SAL (APD). Внутренние функции описываются на языке SAL. Они могут быть глобальными для всего приложения или локализованы в объектах, в том числе и оконных объектах. Кроме того, внутренние функции могут быть подключены с помощью подключаемых библиотек (APL - INCLUDE). В состав языка SAL входит большое число стандартных функций, их более 500. Эти функции подключаются автоматически. Они имеют удачные названия и легко запоминаются. Ниже перечислены основные классы SAL функций:

  • Функции работы с массивами
  • Функции шрифта и цвета
  • Функции преобразования данных
  • Функции работа с датами
  • DDE функции
  • Функции отладки
  • Функции управления окнами
  • Функции Drag and Drop
  • Функции редактирования текста
  • Функции email
  • Функции управление файлами
  • Функции форматирования
  • Функции списков и компбоксов
  • DOS функции
  • OLE DB функции
  • MTS функции ( MS Tran. server)
  • Функции MDI интерфейса
  • Функции управление сообщениями
  • Функции управления программами
  • Математические функции
  • Функции работы с рисунками
  • Функции печати
  • Функции отчетов
  • Функции управление прокруткой
  • SQL функции
  • Функции работы со строками
  • Функции работа с таблицами
  • Функции работы с окнами
  • Функции из VisualToolchest и QuickObject
  • ActivX функции
  • Поддержка PL/SQL Oracle 

При подключении функций в программу обеспечивается копирование списка типов параметров, что позволяет уменьшить число ошибок при вызове функций. Параметры передаются по значению, если не указано слово Receive при описании формальных параметров функций. Если это слово задано, то вызов выполняется по ссылке и обеспечивается возможность редактирование значений переменных и возврат значений из функции. Функция может иметь или не иметь типа возврата. Для задания типа возврата в секции описания функции Returns должен быть указан один из доступных типов. Возвращаемые типы функций могут быть любыми, в том числе и пользовательскими. В этом случае в функции должен быть предусмотрен оператор Return с выражением, соответствующим типу возврата.

Сообщения и их обработка

В языке SAL предусмотрена прозрачная схема обработки сообщений и реализации управления в программе. Для тех, кто знаком со стандартной схемой обработки сообщений для Windows API, будет понятны и механизмы, используемые в SAL. За одним исключением: эти механизмы еще более просты. Для каждого объекта, стандартного или нового, предусмотрена секция, в которой могут быть определены подсекции для обработки сообщений конкретного типа. Могут быть обработаны стандартные сообщения объектов, пользовательские сообщения и, даже любые сообщения Windows. Секция обработки сообщений выглядит так:

Form Window: frm1
Description:

Tool Bar:
Contens:

Message Action:
On SAM_Create
Call SQLImmediate("SELECT * FROM TABLE")
Set nVal = 0
Call …
On SAM_Close
Set nVal = 1
Call …
On User_Message1
Set nVal = 2
Call …
On WM_CHAR
Set nVal = 2
Call …

В данном примере в секции обработки предусмотрена обработка четырех видов сообщений: два сообщения стандартные для окна (SAM_Create и SAM_Close), одно сообщение созданное пользователем (User_Message1) и одно стандартное сообщение WINDOWS (WM_CHAR). В SAL предусмотрены специальные функции для инициирования сообщений (POST и SEND), в которых можно в стандартном формате передавать параметры. Сообщения инициируются также системой, например, при создании окон (SAM_Create) или пользователем при нажатии кнопок и клавиш. При построении приложений, взаимодействующих с COM серверами, могут обрабатываться сообщения- события от COM сервера. При программировании специальный конструктор-подсказчик предоставляет список доступных видов сообщений в данном контексте. На мой взгляд, такая прозрачная схема управления сообщениями в SAL способствует большой прозрачности логики приложений и снижает количество возможных ошибок при программировании.

Классы

SAL является языком объектно-ориентированного программирования (ООП). В нем определены все необходимые механизмы для описания классов, наследования, множественного наследования, статические переменные классов, полиморфизм, подключения АХ объектов и т.д. На основе данных механизмов построены библиотеки (например, Visual Toolchest), могут быть построены COM серверы и клиенты (есть статья на сайте), механизмы построения WEB приложений (есть статья на сайте) и реализованы стандартные объекты пользовательского интерфейса. Теме использования ООП будет посвящен отдельный материал, который скоро появиться на нашем сайте. Аналогично мы планируем рассказать о стандартных библиотеках Visual Toolchest. Давая общую характеристику ООП в SAL, отмечу, что классы, которые можно создавать, подразделяются на две группы: классы оконного интерфейса и функциональные классы. Классы оконного интерфейса наследуются от стандартных классов и могут обрабатывать сообщения, а функциональные классы предназначены для использования для динамического создания объектов-переменных. Такое разделение упрощает процедуры управления объектами и создание приложений.

Стандартные объекты интерфейса и библиотеки

Для построения приложений в SAL предусмотрен набор стандартных объектов, который обеспечивает возможность быстрого и надежного программирования интерфейса. Это традиционный набор Windows: окна, окна диалога, таблицы, кнопки, списки и так далее. Стандартные объекты тесно вписаны в систему, поэтому работа с ними проста. На основе стандартных объектов мы можем создать собственные объекты, которые обеспечат набор типовых программных решений. Эти объекты можно поместить в подключаемую библиотеку и подключать в разные приложения. Предусматриваются и другие стандартные библиотеки, работа с которыми в SAL упрощена. Это библиотеки Visual Toolchest и QUICK OBJECT. В них включены дополнительные объекты интерфейса, которые можно использовать в приложениях. И, наконец, SAL обеспечивает удобный механизм подключения любых AX компонент, которые установлены на вашем компьютере. Это делается в режиме простого мастера подсказок.

Отладка программ

В языке SAL, а точнее в дизайнере разработки CTD (SQLWindows), предусмотрены все традиционные возможности отладки программ: выполнение программ по шагам, просмотр переменных и сообщений, стека вызова функций, точки останова и т.д. С учетом повышенной наглядности программ, о которой было сказано выше, процесс отладки и поиска ошибок является достаточно эффективным. В дополнение к этому предусматриваются специальные механизмы отладки SQL запросов, как в автономном режиме, так и в режиме отладки приложений.

Почему для информационных систем?

Уверен, что читатель прочитав название данной статьи, спросит: почему SAL ориентирован на создание именно информационных систем? В языке предусмотрен достаточно высокий потенциал для программирования достаточно широкого класса задач. Он будет прав только отчасти. Берусь утверждать, что наиболее высокую эффективность программирования будет обеспечена при программировании на SAL именно информационных систем. Достаточно посмотреть на стандартные типы переменных и наборы стандартных функций, объектов и увидеть, что они в большей степени подходят для информационного программирования (String, SQL функции и управление сообщениями.). Если вы захотите создать на SAL динамическую программу типа игры, то, наверняка, вас ждет неудача. Думаю, что можно найти множество других примеров, в которых язык SAL не будет достаточно эффективным и уступит универсальным языкам программирования. С другой стороны, намного меньше недостатков вы найдете в SAL при программировании информационных систем, чем в универсальных языках, в которых некоторые процессы будут реализовываться со значительно большей трудоемкостью. Отмечу в конце, что язык SAL лежит также в основе языка для создания триггеров и хранимых процедур для SQL СУБД фирмы Centura - SQLBase.

Заключение

Думаю, что данный экскурс в язык программирования информационных систем SAL, который составляет основу программирования в продуктах Centura (CTD2000 и SQLBase), поможет Вам составить четкое представление об этом языке, а возможно и выбрать его для реализации информационных систем нового поколения.



 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 03.12.2001 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Bamboo
IBM DOMINO COLLABORATION EXPRESS AUTHORIZED USER ANNUAL SW SUBSCRIPTION & SUPPORT RENEWAL
NauDoc Enterprise 10 рабочих мест
Stimulsoft Reports.Ultimate Single License Includes one year subscription, source code
ABBYY FineReader 14 Standard Full
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
СУБД Oracle "с нуля"
Краткие описания программ и ссылки на них
ЕRP-Форум. Творческие дискуссии о системах автоматизации
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100