Пиши Дома Нужные Работы

Обратная связь

Структура программного кода пользовательского интерфейса

Общий подход к автоматической генерации программного кода пользовательского интерфейса по его проекту

Разработка пользовательского интерфейса и прикладной программы, в соответствии с онтологическим подходом (так же, как и в моделеориентиро­ванном), осуществляется раздельно, поэтому программный код[1] (далее код) программного средства состоит из: кода прикладной программы; кода пользовательского интерфейса; кода связи пользовательского интерфейса с прикладной программой.

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

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

Для генерации кода пользовательского интерфейса используются все компоненты проекта пользовательского интерфейса.

Код связи интерфейса с прикладной программой описывает способ взаимодействия интерфейса и прикладной программы (локальное либо распределенное) и указывает конкретные характеристики такого взаимодействия. Данный код генерируется на основе проекта связи интерфейса с прикладной программой.



Одним из основных требований к генератору кода пользовательского интерфейса является возможность его генерации на различные платформы и языки программирования. Однако, код пользовательского интерфейса, библиотеки элементов интерфейса отличаются в различных языках програм­мирования и платформах, что делает невозможным разработку единствен­ного генератора кода, способного генерировать код на различные платформы и языки программирования. Разработка множества генераторов кода (см. рис. 4.1А) для каждой тройки «платформа - язык программирования – библиотека элементов интерфейса» является необоснованно трудоёмкой и приведёт к необходимости внесения изменений во все уже разработанные генераторы кода в случае, например, появления новых элементов интерфейса.

Однако для всех платформ и языков программирования можно выделить общие составные части кода интерфейса, которые выполняют идентичные функции, но реализуются с помощью различных операторов и функций. Например, присваивание нового значения параметру элемента интерфейса в программах на языках C++, C# и Java, для различных библиотек элементов интерфейса осуществляется с использованием различных средств программирования, хотя, по сути, и с точки зрения проекта интерфейса, это одно и то же действие.

Решением данной проблемы является генерация кода не на конкретный язык программирования, а на специализированный абстрактный язык, кото­рый описывает структуру кода пользовательского интерфейса и связи между элементами такой структуры. Для генерации программного кода на конкрет­ный язык и платформу, осуществляется преобразование с кода на абстракт­ном языке в код на один из языков программирования (см. рис. 4.1Б).

А)

Код интерфейса на абстрактном языке
Б)

Рис. 4.1 Методы генерации кода интерфейса по его проекту

 

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

Структура программного кода пользовательского интерфейса

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

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

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

Структура кода для реализации WIMP- интерфейсов.Код для реализации WIMP-интерфейсов содержит: код инициализации интерфейса; код структуры окон; код поведения окон.

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

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

Код поведения окон описывает, каким образом окна и элементы управления реагируют на события, возникающие в ходе взаимодействия с пользователем, и какие действия при этом производятся. Данный код генерируется на основе проекта сценария диалога.

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

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

Будем считать, что сгенерированный текст Text_Gen состоит из последовательности элементов текста: Text_Gen=<text_geni> .

Генерация текста Text_Gen осуществляется по его шаблону Text_pattern=<elem_patterni> , состоящему из последовательности элементов шаблона (см. гл. 3), а также результатам работы прикладной программы x. Следует отметить, что с одной стороны, один и тот же шаблон текста Text_pattern может соответствовать различным результатам работы прикладной программы x, с другой – в зависимости от них генерируется различный текст по одному и тому же шаблону.

Прежде, чем описать алгоритм генерации текста по его шаблону Text_pattern и результатам работы прикладной программы x, введем необходимые понятия и пояснения.

Лексикографический порядок. Зададим лексикографический порядок на элементах шаблона текста Text_pattern. Каждому элементу elem_patterni шаблона текста Text_pattern присвоим свой позиционный номер i в соответствии с лексикографическим порядком. Формирование позиционных номеров конструкций, входящих в описание шаблона, происходит следующим образом. Позиционный номер конструкции состоит из позиционного номера сложной конструкции, в которую входит эта конструкция и порядкового номера конструкции в сложной конструкции. Так, если порядковый номер некоторой конструкции шаблона текста в сложной конструкции есть n1, то ее позиционный номер будет n.n1, где n - позиционный номер сложной конструкции. Любая сложная конструкция, входящая в конструкцию цикл (или альтернативу) имеет тот же позиционный номер, что и эта конструкция цикл (или альтернатива).

Пример 4.1.

Пусть описание шаблона текста имеет вид, как в примере 3.3 (см. гл. 3, стр.122). Этот шаблон состоит из сложной конструкции цикл, имеющей позиционный номер 1, который, в свою очередь, состоит из следующей последователь­ности конструкций:

- простой конструкции строка String «значение управляющего параметра - », имеющей позиционный номер 1.1,

- конструкции цикл, имеющей позиционный номер 1.2;

- выводимого множества InsetVal с позиционным номером 1.2.1.

Обобщенный алгоритм формирования текста состоит из следующих основных шагов:

I. Чтение элемента шаблона elem_patterni в соответствии с лексикографическим порядком.

II. Если не достигнут конец шаблона текста Text_pattern, то переход на шаг III, иначе выход из алгоритма.

III. Если элементом шаблона текста elem_patterni является сложная конструкция – цикл, выводимое множество или альтернатива, то:

a. вычисление множества значений управляющего и вспомогательных параметров отношения NameRelk по результатам значений прикладной программы x;

b. уточнение множества их значений в соответствии с дополнительной информацией, заданной на предыдущем шаге – Condition_Defi-1, которая включает вектор значений параметров и вектор отношений циклов и альтернатив (см. ниже);

c. формирование дополнительной информации Condition_Defi;

IV. Формирование очередного фрагмента текста Text_Geni.

V. Переход на шаг I.

Дополнительная информация определяет значения параметров отноше­ния, количество циклов и альтернатив, внешних по отношению сложной конструкции и др. информацию, необходимую для формирования текста на каждом шаге. Дополнительная информация Condition_Defi на шаге i - это пара: вектор значений параметров Values_Pari и вектор отношений циклов и альтернатив Relations_Cycle_Alti, т.е. Condition_Defi=(Values_Pari, Relations_Cycle_Alti). Каждый элемент вектора значений параметров Values_Pari – пара, состоящая из имени параметра и множества его значений на шаге i. Каждый элемент вектора отношений циклов и альтернатив Relations_Cycle_Alti, указывает имя отношения, входящего в описание цикла либо альтернативы и его управляющего параметра, число повторений цикла на шаге i, а также множество пройденных значений управляющего параметра к шагу i.

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

1. Если элементом шаблона текста elem_patterni на шаге i является строка String, то дополнительная информация не изменяется, т.е. Condition_Defi= Condition_Defi-1; к тексту Text_Geni-1, сформированному на предыдущем шаге добавляется строка elem_patterni.

2. Если элементом шаблона текста elem_patterni на шаге i является циклCycleVal, то определяется число выполнений цикла; при определении числа выполнений цикла возможны следующие варианты:

· в результатах работы прикладной программы x нет отношения с именем NameRelk, заданного при описании OutDatAn - условий анализа результатов; в этом случае число повторений цикла r=0;

· в результатах работы прикладной программы x имеется отношение с именем NameRelk; в этом случае возможно два варианта:

- параметры отношения NameRelk не получили значений на предыдущих шагах; в этом случае число повторений цикла определяется мощностью множества значений управляющего параметра DirectiveParki отношения NameRelk из x, т.е. r=m{DirectiveParki }.

- параметры отношения NameRelk получили значения на предыдущих шагах; в этом случае число выполнений цикла определяется по результатам работы прикладной программы x в соответствии с дополнительной информацией - значениями параметров отношения в векторах значений параметров Values_Pari и отношений циклов и альтернатив Relations_Cycle_Alti.

Если число выполнений цикла r=0, то выполнение цикла на этом заканчивается и выполняется переход к элементу описания шаблона текста, следующему за циклом. При этом дополнительная информация и текст остаются без изменений, т.е. Condition_Defi= Condition_Defi-1, Text_Geni = Text_Geni-1.

Если число выполнений цикла r>=1, то дальнейшее выполнение цикла зависит от того, какая из перечисленных ниже трех ситуаций имеет место:

- данный цикл не является вложенным в другие циклы;

- данный цикл является вложенным в тело некоторых других циклов, но на значения параметров в OutDatAn - условии анализа результатов никаких ограничений циклами или альтернативами, внешними по отношению к данному циклу, не наложено;

- на некоторые параметры отношения NameRelk наложены ограничения внешними циклами либо альтернативами.

В зависимости от перечисленных ситуаций определяются условия формирования элементов каждого из векторов: вектора значений параметров Values_Pari и вектора отношений циклов и альтернатив Relations_Cycle_Alti. Так, в первых двух случаях, к вектору значений параметров Values_Pari добавляется количество элементов, совпадающее с числом параметров отношения NameRelk, при этом каждый элемент состоит из имени параметра отношения и множества его значений из x. К вектору отношений циклов и альтернатив Relations_Cycle_Alti добавляется элемент, содержащий имя отношения, заданного при описании OutDatAn и его управляющего параметра, количество выполнений цикла, а также множество значений управляющего параметра. При этом текст остается без изменений, т.е. Text_Geni=Text_Geni-1 и происходит переход к следующему в лексикографическом порядке элементу шаблона текста, т.е. первой конструкции в описании цикла Constrcycle1.

Если на некоторые параметры отношения NameRelk были наложены ограничения внешними циклами либо альтернативами, то к вектору значений параметров Values_Pari добавляются только те параметры, которых не содержится в данном векторе; при этом множество их значений определяется не только результатами прикладной программы, но также и значениями параметров отношения NameRelk в этом векторе (процедура определения значений параметров описана в формальном описании вычислительного процесса, см. п. 4.3). Вектор отношений циклов и альтернатив Relations_Cycle_Alti формируется так же, как и в предыдущем случае. При этом текст остается без изменений, т.е. Text_Geni = Text_Geni -1 и происходит переход к следующему в лексикографическом порядке элементу шаблона текста, т.е. первой конструкции в описании цикла Constrcycle1. Далее r раз выполняется тело цикла. После каждого выполнения тела цикла происходит формирование нового состояния, при этом вектор значений параметров Values_Pari не изменяется, в векторе отношений циклов и альтернатив число выполнений цикла Relations_Cycle_Alti уменьшается на единицу, из мно­жества значений управляющего параметра исключается «пройденное зна­чение», т.е. значение, которое ему было сопоставлено на предыдущем шаге.

3. Если элементом шаблона текста elem_patterni на шаге i является выводимое множество InsetVal, то выполнение данной конструкции зависит от того, какая из перечисленных ниже ситуаций имеет место:

- в результатах прикладной программы x отношение с именем NameRelk отсутствует;

- на значения параметров в описании выводимого множества никаких условий циклами и альтернативами, внешними по отношению к данной конструкции, не наложено;

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

Если в результатах x нет отношения с именем NameRelk, то выполнение конструкции на этом заканчивается. Далее выполняется переход к элементу описания шаблона текста, позиционный номер которого является следующим в лексикографическом порядке за позиционным номером выводимого множества. При этом дополнительная информация и текст остаются без изменений, т.е. Condition_Defi= Condition_Defi-1, Text_Geni = Text_Geni -1.

Если на значения параметров в описании выводимого множества не наложено условий внешними циклами и альтернативами, в этом случае дополнительная информация остается без изменений, т.е. Condition_Defi= Condition_Defi-1, к тексту добавляются все значения управляющего параметра DirectiveParki из x, упорядоченные в соответствии с условием Condition, т.е. Form_Texti =Form_Texti-1+М((NamePark DirectiveParki)), где М((NamePark, DirectiveParkj)) – упорядоченное множество значений управляющего параметра DirectiveParkj отношения NamePark из x.

Если на значения некоторых параметров в описании выводимого множества наложены условия внешними циклами или альтернативами, т.е. в векторе значений параметров Values_Pari некоторые из параметров отношения NamePark, получили значения, в этом случае дополнительная информация остается без изменений, т.е. Condition_Defi= Condition_Defi-1, к тексту добавляется подмножество значений управляющего параметра DirectiveParki, сформированное по результатам прикладной программы x и значениям параметров в векторе значений параметров Values_Pari, т.е. Text_Geni = Text_Geni-1+М((NamePark DirectiveParki)), где М((NamePark, DirectiveParkj)) - подмножество значений управляющего параметра.

4. Если элементом шаблона текста elem_patterni на шаге i является альтернатива,то определяется множество значений управляющего параметра DirectiveParki отношения с именем NameRelk, заданного при описании альтернативы. Способ определения множества значений управляющего параметра DirectiveParkj совпадает со способом его определения в конструкции выводимое множество. Дальнейшее выполнение конструкции альтернатива зависит от условий выбора.

Если имеет место одна из ситуаций:

- мощность множества значений управляющего параметра DirectiveParkj совпадает с числом в одном из условий выбора;

- заданное подмножество значений в одном из условий выбора есть подмножество множества значений управляющего параметра DirectiveParki;

- предыдущие два условия не выполняются, но последним условием выбора является метка.

Тогда формирование очередного состояния зависит от способа определе­ния значений управляющего параметра DirectiveParkj и определяется следующим образом.

Если в результатах работы прикладной программы x нет отношения с именем NameRelk, т.е. число значений управляющего параметра равно нулю. Тогда дополнительная информация и текст остаются без изменений, т.е. Condition_Defi= Condition_Defi-1, Text_Geni = Text_Geni-1; происходит переход к следующему в лексикографическом порядке элементу шаблона текста - непосредственно следующему за первым по порядку условием выбора среди множества условий выбора, в котором возможным числом значений управляющего параметра является ноль, иначе происходит переход к позиционному номеру конструкции в лексикографическом порядке, следующему за условием выбора, которым является метка.

Если на значения параметров отношения NameRelk никаких ограничений циклами или альтернативами, внешними по отношению к данной альтернативе не наложено, это означает, что имена параметров отношения NameRelk не совпадают с именами параметров в векторе значений параметров Values_Pari. В этом случае к вектору значений параметров Values_Pari добавляется количество элементов, совпадающее с числом параметров отношения NameRelk, при этом каждый элемент состоит из имени параметра отношения и множества его значений из x. К вектору отношений циклов и альтернатив Relations_Cycle_Alti добавляется элемент, содержащий информацию об имени отношения, заданного при описании альтернативы, именах параметров этого отношения, а также множество значений управляющего параметра. При этом текст Text_Geni = Text_Geni-1 остается без изменений и происходит переход к следующему в лексикографическом порядке элементу шаблона текста, т.е. к конструкции в лексикографическом порядке, непосредственно следующей за первым по порядку условием выбора среди множества условий выбора, удовлет­воряющих значению управляющего параметра. Иначе происходит переход к конструкции с позиционным номером в лексикографическом порядке, непосредственно следующем за условием выбора, совпадающим с меткой.

Если на значения некоторых параметров отношения NameRelk наложены условия внешними циклами или альтернативами, т.е. в векторе значений параметров Values_Pari некоторые из параметров отношения NamePark, получили значения, в этом случае то к вектору значений параметров Values_Pari добавляются только те параметры, которых не содержится в данном векторе; при этом множество их значений определяется не только результатами прикладной программы x, но также и значениями параметров отношения NameRelk в этом векторе. Вектор отношений циклов и альтернатив Relations_Cycle_Alti формируется так же, как в предыдущем случае. При этом текст Text_Geni = Text_Geni-1 остается без изменений и происходит переход к следующему в лексикографическом порядке элементу шаблона текста, непосредственно следующему за первым по порядку условием выбора среди множества условий выбора, удовлетворяющих значению управляющего параметра NameRelk. Иначе происходит переход к конструкции с позиционным номером в лексикографическом порядке, непосредственно следующим за условием выбора, совпадающим с меткой.

Далее выполняется конструкция, которая является первой по порядку в условии выбора среди множества условий выбора, удовлетворяющих значению управляющего параметра NameRelk.

Если ни одно из условий выбора не удовлетворяется, и среди условий выбора нет условия выбора, совпадающего с меткой, то дополнительная информация и текст остаются без изменений, т.е. Condition_Defi= Condition_Defi-1, Text_Geni = Text_Geni-1; происходит переход к следующей конструкции за альтернативой.

Структура кода пользовательского интерфейса для диалога, осно­ванного на графических сценах.Код пользовательского интерфейса для диалога, основанного на графических сценах, состоит из трех основных блоков: блока инициализации сцены, блока управления сценой, блока воспроизведения сцены.

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

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

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

Модель генерации кода

Модель генерации кода пользовательского интерфейса состоит из моде­ли генерации WIMP-интерфейсов, вычислительной модели генерации текста и модели генерации кода для диалога, основанного на графических сценах.

Модель генерации программного кода WIMP-интерфейсов.В Приложении 4 А представлена спецификация абстрактного языка для описа­ния кода WIMP-интерфейсов. Опишем отображения компонентов проекта интерфейса в код на абстрактном языке:

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

main{{<инициализация программного интерфейса>} run <имя>;}

1.1. {Interfacei ç Interfacei = <Interfacenamei, InteractionModeli, Functionsi>} ®{<инициализация программного интерфейса>}, где Interfacei – программный интерфейс проекта связи интерфейса с прикладной программой. В зависимости от параметра InteractionModeli отображение имеет вид:

1.1.1. {Interfacei ç InteractionModeli = Локальная} ®

Interfacename1.initlocal.(путь к файлу1, имя класса1);

Interfacenameinterfacecount. initlocal. (путь к файлуinterfacecount, имя классаinterfacecount);

где «путь к файлу»iÎIModelparameters, «имя класса»i Î IModelparameters модели взаимодействия InteractionModeli;

1.1.2. {Interfacei ç InteractionModeli = Распределенная} ®

Interfacename1.initremote.(сетевой адрес1, номер порта1, имя объекта1);

Interfacenameinterfacecount. initremote.( сетевой адресinterfacecount, номер портаinterfacecount, имя объектаinterfacecount),

где «сетевой адрес»i ÎIModelparameters, «номер порта»i Î IModelparameters, «имя объекта»i Î IModelparameters модели взаимодействия InteractionModeli;

1.2. StartWindow® run StartWindowID; где StartWindow – это начальное окно проекта сценария диалога, StartWindowID - это идентификатор StartWindow.

2. Код программных интерфейсов описывает структуру программных интерфейсов, предоставляемых прикладной программой: {<программный интерфейс>}

2.1. {Interfacei ç Interfacei = <Interfacenamei, InteractionModeli, Functionsi>} ®

interface Interfacename1 { <объявление функций> }

interface Interfacenameinterfacecount { <объявление функций> },

где Interfacei – программный интерфейс проекта связи интерфейса с прикладной программой.

2.1.1. <объявление функций> для каждого Interfacei генерируется следующим образом:

{Functionij ç Functionij = < Function_Nameij, Function_Parametersij, Function_Return_Typeij >} ®

<тип возвращаемого значения функции> Function_Namei1 <объявление параметров функции>;

<тип возвращаемого значения функции> Function_Nameifunccount <объявление параметров функции>;

2.1.1.1.<тип возвращаемого значения функции> для каждой Functionij генерируется следующим образом:

- если Function_Return_Typeij = Æ, то <тип возвращаемого значения> генерируется как void;

- если Function_Return_Typeij = String, то <тип возвращаемого значения> генерируется как string;

- если Function_Return_Typeij = Integer, то <тип возвращаемого значения> генерируется как int;

- если Function_Return_Typeij = Float, то <тип возвращаемого значения> генерируется как float;

- если Function_Return_Typeij = Boolean, то <тип возвращаемого значения> генерируется как bool;

2.1.1.2. <объявление параметров функции> для каждой Functionij генерируется следующим образом:

{Function_Parameterijk ç Function_Parameterijk = <FuncParam_Valueijk, FuncParam_Typeijk>} ®

(<тип параметра функции> Function_ParameterIDij1,

<тип параметра функции> Function_ParameterIDijfuncparamtercount),

где Function_ParameterIDijk – это идентификатор Function_Parameterijk, <тип параметра функции> для каждого Function_Parameterijk в зависимости от FuncParam_Typeijk генерируется таким же образом, что и <тип возвращаемого значения функции> для каждой Functionij в зависимости от Function_Return_Typeij;

3. Код структуры окон описывает начальные значения параметров окон:

{<структура окна>}

3.1. {<ControlNamei, Windowi> } ®

wndinit WindowID1: ControlName1 { <элементы управления> <инициализация параметров> <объявление событий>}

wndinit WindowIDwindowcount: ControlNamewindowcount {<элементы управления> <инициализация параметров> <объявление событий>},

где WindowIDi - это уникальный идентификатор окна Windowi;

3.1.1. <элементы управления> для каждого Windowi генерируются следующим образом: controls {<объявление элементов управления>}, где <объявление элементов управления> генерируется следующим образом: каждый элемент управления Controlkj, принадлежащий множеству значений параметра окна Paramk, Paramk = {<Param_Valuekj, Param_Typekj>}, Param_Valuekj=Controlkj, Param_Typekj=ControlTkj, ControlTkj Î Controls, отображается в его тип и идентификатор. {Controlkj | ControlType = Элемент управления, ControlkjÌParamk, Paramk Î Parametersi, Paramk = {<Param_Valuekj, Param_Typekj>}, Param_Valuekj= Controlkj, Param_Typekj = ControlTkj, ControlTkjÎControls } ®

ControlTIDk1 ControlIDk1;

ControlTIDk controlcount ControlTIDk controlcount,

где ControlTIDkj - это идентификатор элемента управления ControlTkj, ControlIDkj - это идентификатор элемента управления Controlkj;

3.1.2. <инициализация параметров> генерируется следующим образом: параметры окна и параметры элементов управления окна отображаются в их инициализации: initialization {<инициализация параметров окна> <инициализация элементов управления>};

3.1.2.1.<инициализация параметров окна> генерируется следующим образом: каждый параметр окна, тип которого не является элементом интерфейса, отображается в его тип, идентификатор и начальное значение. {Paramj | ParamjÎParametersi, Paramj = <Param_Valuej, Param_Typej>, Param_Typej ≠ Controljm} ®

ParamTypeID1 ParamID1 = Param_Value1;

ParamTypeIDparamscount ParamIDparamscount = Param_Valueparamscount,

где ParamTypeIDj - тип параметра Paramj, ParamIDj - идентификатор параметра Paramj, причём в зависимости от типа Param_Typej ParamTypeIDj генерируется следующим образом:

- если Param_Typej= String, то ParamTypeIDj генерируется как string;

- если Param_Typej= Integer, то ParamTypeIDj генерируется как int;

- если Param_Typej= Float, то ParamTypeIDj генерируется как float;

- если Param_Typej= Boolean, то ParamTypeIDj генерируется как bool;

- если Param_Typej= Image, то ParamTypeIDj генерируется как image;

если Param_Typej= Enumerationm, то ParamTypeIDj генерируется как EnumerationIDm, где EnumerationIDm – идентификатор перечисления Enumerationm;

3.1.2.2.<инициализация элементов управления> генерируется следующим образом: каждый элемент управления Controlkj, принадлежащий множеству значений параметра окна Paramk, где Paramk = {<Param_Valuekj, Param_Typekj>}, Param_Valuekj=Controlkj, Param_Typekj=ControlTkj, ControlTkj ÎControls отображается в его идентификатор, тип и инициализацию параметров. {Controlkj | ControlType = Элемент управления, ControlkjÌParamk, Paramk Î Parametersi, Paramk = {<Param_Valuekj,Param_Typekj>}, Param_Valuekj = Controlkj, Param_Typekj= ControlTkj, ControlTkjÎControls} ®

ControlIDk1 = new ControlTIDk1; <инициализация параметров элемента управления>;

ControlTIDk controlcount = new ControlTIDk controlcount; <инициализация параметров элемента управления>,

где ControlTIDkj - это идентификатор элемента управления ControlTkj, ControlIDkj - это идентификатор элемента управления Controlkj. <инициализация параметров элемента управления> для каждого Controlkj генерируется следующим образом: каждый параметр Controlkj отображается в его тип, идентификатор Controlkj, идентификатор этого параметра и начальное значение. {Paramkjm | Paramkjm ÎParameterskj, Paramkjm = <Param_Valuekjm, Param_Typekjm>, Param_Typekjm Ï Controls} ®

ParamTypeIDkj1 ControlIDkj.ParamIDkj1 = Param_Valuekj1;

ParamTypeIDkjparamscount ControlIDkj.ParamIDkjparamscount = Param_Valuekjparamscount,

где ParamTypeIDkjm - тип параметра Paramkjm, ParamIDkjm - идентификатор параметра Paramkjm, ControlIDkj - идентификатор элемента управления Controlkj, причём в зависимости от типа Param_Typekjm ParamTypeIDkjm генерируется таким же образом, что и ParamTypeIDj.

3.1.3. <объявление событий>: events {<объявления событий окна>}, где <объявления событий окна> генерируется следующим образом:

3.1.3.1.каждое состояние Statej, определенное в проекте сценария диалога, событие Eventj которого принадлежит окну Windowi или одному из элементов управления окна Windowi, отображается в его объявление. {Statej | Statej = <Eventj, Variablesj, Instructionsj>, Eventj Î Eventsi } ®

event EventID1;

event EventIDstatecount,

где EventIDj – это идентификатор события Eventj;

3.1.3.2.каждое состояние Statej, событие Eventj которого принадле­жит элементу управления Controljk окна Windowi, отобража­ется в его объявление. {Statej | Statej = <Eventj, Variablesj, Instructionsj>, Controljk=<ControlTypejk, Parametersjk, Eventsjk, Functionsjk>, EventjÎEventsjk, ControljkÌParametersi} ®

event ControlID1k.EventID1;

event ControlIDstatecount k.EventIDstatecount,

где EventIDj – это идентификатор события Eventj, ControlIDjk – это идентификатор элемента управления Controljk.

4. Код поведения окон описывает реакции каждого окна на события.

4.1. {<ControlNamei, Windowi> } ®

wndevents WindowID1{<реакции на события>}

wndevents WindowIDwindowcount {<реакции на события>},

где WindowIDi - это уникальный идентификатор окна Windowi, <реакции на события> для каждого Windowi генерируется следующим образом:






ТОП 5 статей:
Экономическая сущность инвестиций - Экономическая сущность инвестиций – долгосрочные вложения экономических ресурсов сроком более 1 года для получения прибыли путем...
Тема: Федеральный закон от 26.07.2006 N 135-ФЗ - На основании изучения ФЗ № 135, дайте максимально короткое определение следующих понятий с указанием статей и пунктов закона...
Сущность, функции и виды управления в телекоммуникациях - Цели достигаются с помощью различных принципов, функций и методов социально-экономического менеджмента...
Схема построения базисных индексов - Индекс (лат. INDEX – указатель, показатель) - относительная величина, показывающая, во сколько раз уровень изучаемого явления...
Тема 11. Международное космическое право - Правовой режим космического пространства и небесных тел. Принципы деятельности государств по исследованию...



©2015- 2024 pdnr.ru Все права принадлежат авторам размещенных материалов.