Программист-прагматик. Путь от подмастерья к мастеру | страница 56
Языки управления данными создают некую форму структуры данных, используемой приложением. Эти языки часто используются для представления конфигурации.
Например, программа sendmail применяется во всем мире для маршрутизации электронной почты в сети Интернет. Она обладает многими достоинствами и преимуществами, которые управляются огромным файлом конфигурации, написанном на собственном языке конфигурирования программы sendmail:
Mlocal, P=/usr/bin/procmail,
F=lsDFMAw5:/|@qSPfhn9,
S=10/30, R=20/40,
T=DNS/RFC822/X-Unix,
A=procmail -Y -a $h -d $u
Очевидно, удобочитаемость не является сильной стороной sendmail.
Уже давно фирма Microsoft использует язык данных, который может описывать меню, реквизиты окон, диалоговые окна и другие ресурсы Windows. На рис. 2.2 показан фрагмент типичного файла ресурсов. Он читается намного легче, чем пример с программой sendmail, но используется точно так же – компилируется для генерации структуры данных.
Рис. 2.2. Файл .rc для Windows
MAIN_MENU MENU
{
POPUP « &File"
{
MENUITEM «&New», CM_FILENEW
MENUITEM «&Open…», CM_FILEOPEN
MENUITEM «&Save», CM_FILESAVE
}
}
MY_DIALOG_BOX DIALOG 6,15,292,287
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION «My Dialog Box"
FONT 8, «MS Sans Serif"
{
DEFPUSHBUTTON «OK», ID_OK, 232,16, 50,14
PUSHBUTTON «Help», ID.HELP, 232, 52, 50,14
CONTROL «Edit Text Control», ID EDIT1, «EDIT», WS_BODER | WS_TABSTOP, 16,16, 80, 56
CHECKBOX «Checkbox», ID CHECKBOX 1,153, 65,42,38, BS_AUTOCHECKBOX | WS_ABSTOP
}
Процедурные языки идут дальше. В этом случае язык является исполняемым и поэтому может содержать инструкции, конструкции управления и т. п. (подобные сценарию на с. 50).
Вы также можете использовать собственные процедурные языки, чтобы облегчить сопровождение программы. Например, вас просят интегрировать информацию из унаследованного приложения в новую разработку графического интерфейса. Обычно это осуществляется при помощи «экранного кармана»; ваше приложение связывается с основным (mainframe) приложением так, как если бы это обычный пользователь-человек, генерируя нажатия клавиш и «считывая» принимаемые отклики. Вы можете создать сценарий взаимодействия при помощи мини-языка [14].
locate prompt «SSN:"
type «%s» social_security_number
type enter
waitfor keyboardunlock
if text_at(10,14) is «INVALID SSN» return bad_ssn
if text_at(10,14) is «DUPLICATE SSN» return dup_ssn
# etc…
Когда приложение определяет, что пора вводить номер SSN, то по этому сценарию оно вызывает интерпретатор, который затем управляет транзакцией. Если интерпретатор встроен в приложение, то они даже могут совместно использовать данные (например, при помощи механизма обратного вызова).