Re: Все начинается со скелета


[ Пpишедшие ответы ] [ Отпpавьте свой ответ ] [ Пеpеговоpный пункт ] [ FAQ ]

Posted by Аркадий Водяник (195.58.229.49) on September 05, 2002 at 02:17:49:

In Reply to: Прошу совет по освоению Клиента LX posted by Дмитрий Макаров, М А К СтолыпинЪ on September 02, 2002 at 03:42:26:

Наверное, в какой-то степени удобно представлять себе CLX не как клиента, а как
"сервер", клиентом которого является человек. Программа этого "сервера" пишется
на обычном языке ФБП с несколько иным набором функций и операторов.
Можно писать по-разному, но наиболее типичный случай укладывается в очень
простую схему: бесконечный цикл, в начале цикла находится оператор WAIT,
который ждет поступления запроса пользователя или наступления некоторых
других событий; после WAIT извлекается информация о запросе-событии, а
затем следуют ветвления, где перечислены возможные случаи и указано, что
надо делать при наступлении этих случаев. Вот скелет формы-апплета:


... серверная часть формы/апплета
... здесь размещаются описания layer'ов и об'ектов
... (или алгоритмы их создания).
... С layer'ами и об'ектами манипулирует программа для CLX
...
clprogram ... начало программы для CLX
... вступительная часть: инициализация переменных, массивов,др.структур,
... иногда загрузка графики и т.д.
...
while 1 окаймление бесконечного цикла
wait ожидание запроса-события
o=[obj] извлекаем об'ект: источник запроса-события
if o=... первый тип об'екта (например, клик мышью ('BAT'))
... реакция на первый тип об'екта
elseif o=... второй тип об'екта (например, нажатие на клавишу ('CHAR'))
... реакция на второй тип об'екта
... третий тип об'екта и т.д.
... реакция...
endif
endwhile окаймление бесконечного цикла

Небольшое отступление.
Подобные бесконечные циклы лежат в основе практически каждого приложения Windows,
X Window, Mac OS, Java и т.п. Другое дело, что зачастую они могут маскироваться
об'ектно-ориентированными конструкциями, которые на мой взгляд, несколько
усложняют восприятие программ начинающими, хотя сторонники OOП конечно же
придерживаются диаметрально противоположной точки зрения; многонитевость исполнения
также не улучшает понимание происходящего. Поэтому я и решил придерживаться в CLX
очень простой модели написания clprogram. Думается, что если при этом
предельно достижимый потолок функциональности и пострадал, то незначительно.

Вернемся к об'ектам. Я повторюсь (так как все это есть в документации),
что количество типов об'ектов в CLX совсем невелико:

'BAT' - клик мышью,
'CHAR' - нажатие на клавишу клавиатуры,
'К...' - об'ект 'кнопка',
'S...' - поле для ввода произвольных знаков,
'N...' - поле для ввода чисел,
'M...' - меню,
'TIMER' - "будильник", который прерывает WAIT в указанное время,
'ANSWER' - получатель ответов от ФБП:Сервера (прерывает WAIT, когда приходит
ответ).

Понятно, что в ветвлениях скелета не всегда достаточно конструкций вида
"elseif o=...": для кнопок, полей и меню следует использовать функцию [cp...]:
"elseif [cp o,1,1]=...".

Как и в организме между частями скелета есть "органы". В данном
случае это смысловое наполнение между ветвями elseif. Здесь могут быть
запрограммированы реакции на события, общение с ФБП:Сервером, создание или
модификация графики, чтение или изменение содержимого об'ектов и layer'ов
и т.п.


Пpишедшие ответы:



Отпpавьте свой ответ

Name:
E-Mail:

Subject:

Comments:
Link URL:
(можно не вводить)
Link Title:
(можно не вводить)
Image URL:
(можно не вводить)
ВАЖНО: Если отпpавленное сообщение не будет видно сpазу в
списке сообщений, нажмите клавишу Reload в browser'e.


[ Пpишедшие ответы ] [ Отпpавьте свой ответ ] [ Пеpеговоpный пункт ] [ FAQ ]