СТАТЬЯ 30.08.01

Исследование возможностей CASE-технологии при создании интеллектуальных систем управления

Предыдущая часть

(c) 2000 Семизельникова О.А.

Эта статья была размещена на сайте www.inftech.webservis.ru/

2.3.3. Фрейм как совокупность процедур

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

Строки описания характеризуются следующими моментами:

1. Каждая строка описания фрейма относится либо к фрейму в целом, либо к одной из экранных форм фрейма, либо к одному из элементов одной из экранных форм фрейма.

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

3. Каждая строка описания фрейма, кроме строк содержащих функцию def0, должна иметь некоторый программный М-код. Строки с def0 могут его не иметь. Слово “строка” не следует понимать слишком буквально - включенный М-код может состоять и из нескольких строк.

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

5. Кроме того, строка описания может иметь или не иметь отнесенное к этой строке текстовое пояснение.

В общем случае строки описания фрейма бывают двух типов - строки описания с функцией def0 и строки описания с переопределенной функцией.

Строка описания с переопределенной функцией.

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

"Возможно будет исполняться..." обозначает, что факт исполнения или не исполнения переопределенной функции определяется тем, является ли объект на уровне которого переопределена функция к моменту вызова текущим или же он текущим не является.

Согласно п.1, строка описания с переопределенной функцией может быть переопределена на уровне фрейма, его экранной формы или элемента экранной формы. Если в строке описания переопределения функции Вы не укажите номера экранной формы, то переопределение будет относиться ко всему фрейму, если укажите конкретный номер - то только в пределах указанной экранной формы, если также укажите и номер элемента - то только для элемента.

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

Если в момент вызова некоторой функции qW'а эта функция не переопределена на уровне текущих объектов (т.е. отсутствует строки описания с переопределением этой функции), то будет вызван по имени и исполнен тот вариант этой функции, который находится в системе qW по умолчанию. Если вызывающая функция чисто qW'овская, то умолчание для вызываемой функции, разумеется, имеется. Если же вызывающая функция не qW'овская, а, например, Ваша, то, разумеется, Вы сами несете ответственность за то, что она будет вызывать.

В общем случае, переопределенная Вами функция содержит М-код и вызовы других функций qW'а. Эти другие функции Вы тоже можете переопределить на уровне тех или других объектов (фреймов, экранных форм, элементов экранных форм) точно таким же образом, так что конечный результат может быть достаточно сложным и требующим предварительного продумывания. Одна и та же функция может быть переопределена много раз на уровне разных объектов.

Поиск вызванной функции совершается системой по уровням от текущего элемента экранной формы к уровню текущего фрейма и далее совершается поиск умолчания в самой системе qW. Если функция рекурсивно вызывает саму себя (имеется ввиду, что М-код переопределенной функции содержит вызов функции с тем же именем, что и переопределенная вызывающая функция), то qW будет искать от уровня выше уровня переопределения. В остальных случаях qW ищет переопределения с низшего возможного уровня.

Переопределенная функция может быть вызвана из двух принципиально разных "точек вызова". Во-первых, любая функция qW может быть вызвана из тела (программного текста) другой функции с помощью конструкций $$F и D. Во-вторых, некоторые функции qW могут быть вызваны из обработчика событий qW. По завершении выполнения переопределенной функции в первом случае происходит возврат в тело вызвавшей функции, во втором случае система будет исполнять отработку или ожидать появления следующего события.

Строка описания с функцией def0.

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

Если Вы в списке строк описания фрейма оставите только строки с def0, то это подмножество строк позволит Вам представить фрейм как совокупность входящих в него экранных форм, а каждую из экранных форм - как совокупность входящих в нее элементов. Фреймы, экранные формы и элементы экранных форм имеют код. Код (номер) фрейма, как уже было сказано, число в интервале 0-999. Код (номер) экранной формы – один символ, чаще всего цифра, код (номер) элемента – число. Коды фрейма и экранной формы задает Пользователь, код элемента подставляет qW.

Функция def0 не содержит М-кода по умолчанию (кроме просто q “” – кода завершения). В зависимости от того что она определяет, в строке описания фрейма с этой функцией (в отличие от других функций) может как быть так и не быть М-кода переопределения.

Как правило, М-код функции def0 вызывается только из обработчика событий qW по событию типа "выбор", связанному с объектом, который определяется строкой описания с этой самой def0. Если, например, строка с def0 описывает элемент экранной формы типа "метка", для которого нет события типа "выбор", то написание М-кода для этой функции вряд ли будет иметь какой-либо смысл.

2.3.4. Функции qW

Основным исполняемым программным блоком в qW является экранная форма. Как исполняемый блок экранная форма содержит в себе совокупность исполняемых элементов – функций. В общем случае, функция qW представляет собой алгоритм, состоящий из других функций qW более низкого уровня, связанных между собой М-кодом. Совокупность всех имеющихся функций qW образует некоторую сетевую структуру, на нижнем уровне которой находятся М-функции работы с базой данных ($ORDER, SET и др.) и функции работы с оконным интерфейсом (для GUI это ^$W, ^$D и ^$E – структурированные переменные стандарта MWAPI, для CHUI это OPEN^%WINTER и др.). Для Пользователя доступен весь набор функций, из которых он может составить интересующий его алгоритм и оформить его в виде функции.

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

Классификация функций

Базовая классификация функций qW связана с их использованием в проектировании Приложений qW. Различают два типа функций - Пользовательские и Рабочие. Пользовательские функции являются функциями более высокого уровня и составлены из Рабочих функций.

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

y,z - уровень фрейма, экранной формы и элемента экранной формы.

s - уровень фрейма и экранной формы.

f - уровень фрейма.

Умолчания этих функций содержатся в программах %qfu, %qf999(CHUI) и %qg999(GUI).

Если Рабочая функция не может быть переопределена, то первая буква характеризует принадлежность к классификационной группе:

q - доступ к БД. Отработка в программе %qget.

w - функции взаимодействия с оконным интерфейсом. Отработка в программе %qfw (CHUI) или %qgw (GUI).

с - общесистемные функции. Отработка в программе %qfc.

х - системные пользовательские функции. Отработка в программе %qfx.

о - функции сервисного обслуживания. Отработка в программе %qfo.

b - специальные функции режима построителя. Отработка в программе %qfb (CHUI) или %qgb (GUI).

t - функции транслятора. Отработка в программе %qft.

h - функции формирования и вывода печатных форм. Отработка в программе %qfh.

К Рабочим функциям также относятся так называемые гиперфункции $$G и $$GG (они не переопределяемые).

Пользовательские функции подразделяются на функции отработки событий, функции-параметризаторы и небольшое количество сервисных функций, относимых по характеру своего использования к Пользовательским. Если Пользовательская функция может быть переопределена, то первая буква ее четырехсимвольного имени, также как и у Рабочих функций, характеризует уровень возможного переопределения. Не переопределяемые Пользовательские функции обычно начинаются на "c". Три последних символа в именах функций отработки событий являются цифрами, образующими номер ассоциированного с этими функциями события.

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

Вызовы функций

Существует три способа вызова функций qW.

1. Прямой вызов функции по ее имени. Часто используется при составлении новых функций qW.

2. Вызовы функций отработки событий (только их) могут быть сделаны через обработчик.

3. Вызов функции при помощи метафункции $$F и метапроцедуры D, обеспечивающих поиск переопределенных функций.

В третьем случае, например, вызов оформляется в виде:

Некоторая Переменная Пользователя = $$F(“Имя Функции”,Параметр1,…,Параметр6)

D D(“Имя Функции”,Параметр1,…,Параметр6).

Явно задаваемые параметры Параметр1,…,Параметр6 индивидуальны для каждой функции, их может быть любое количество в пределах шести и может не быть вообще. Параметры могут быть обязательными и необязательными. Обязательные параметры должны быть заданы, необязательные могут быть пропущены. В качестве параметров Вы можете использовать системные переменные. Если Вы пропускаете параметр в конце, то просто его не пишите, если в середине, то оставляете запятые – разделители. Например:

D D(“Имя”,Параметр1,Параметр2,Параметр3,Параметр4,Параметр5) – опускаем Параметр2 и Параметр5, получаем D D(“Имя”,Параметр1,,Параметр3,Параметр4).

Схема исполнения любой функции qW с использованием $$F и D представлена на рис.2.5. В конечном итоге вызов функции осуществляется по ее имени, состоящим из 4 символов. Первый символ в имени определяет путь поиска программного текста этой функции. Если функция может быть переопределена, то ее поиск сначала осуществляется в исполняемой программе (qf_№фрейма), а затем в модуле – библиотеке. Если не может быть переопределена, то сразу в модуле – библиотеке.

Функции на z,у ищутся сначала на уровне текущего элемента экранной формы, потом на уровне текущей экранной формы, затем на уровне текущего фрейма. Функции на s – начиная сразу с текущей экранной формы, на f только на уровне фрейма. (Напомним Вам, что уровень переопределения для функции Вы оформляете при проектировании в соответствующих полях строки описания этой функции. В строке описания Вы вводите или не вводите номер элемента, номер экрана, и номер фрейма.).

В качестве входных параметров функция qW, в общем случае, использует явно задаваемые параметры и значения переменных, заимствованных из локальной среды qW (в локальную среду qW входят системные переменные, служебные понятия и др. В качестве выходных параметров функция возвращает в общем случае пустую или непустую строку, и изменяет значения переменных локальной среды. В процессе исполнения некоторые из функций обращаются к базе данных, вызывают функции оконного интерфейса, ожидают прерываний от клавиатуры или мыши. Кроме того, как уже было сказано, функция может при помощи тех же $$F и D вызывать другие функции qW, схема исполнения которых будет точно такой же (как на рис.2.5). В рассматриваемом алгоритме анализ возвращаемого значения не производится и им Пользователь должен заниматься специально.

Продолжение статьи

Дополнительную информацию Вы можете получить в компании Interface Ltd.

Отправить ссылку на страницу по e-mail
Обсудить на форуме


Interface Ltd.
Тel/Fax: +7(095) 105-0049 (многоканальный)
Отправить E-Mail
http://www.interface.ru
Ваши замечания и предложения отправляйте автору
По техническим вопросам обращайтесь к вебмастеру
Документ опубликован: 30.08.01