В данном классе определены операции для заполнения списка имитируемых внешних событий, а также создания описателя события при нажатии на клавишу клавиатуры. Для упрощения заполнения списка имитируемых событий (атрибут list_event), клавиши событиям назначаются автоматически, начиная с символа, который определяется атрибутом ch_key. Пользователь может запросить список назначений, нажав клавишу, символ которой определяется атрибутом help_key. Диаграмма класса приведена на рисунке7.
Рисунок7 - Диаграмма класса Imitator
При инициализации объектов выполняется заполнение списка имитируемых событий с помощью операции Add_event(…) класса Imitator.
При нажатии клавиш на клавиатуре активизируется операция главной программы, которая вызывает операцию Create_event(…)класса Imitator. Если символ клавиши соответствует некоторому внешнему событию, то создается описатель события и помещается в список описателей главной программы.
Диаграмма класса приведена на рисунке8. В состав атрибутов данного класса включаются общие атрибуты для всех активных классов приложения. Атрибут id предназначен для хранения строки с именем объекта, которое может быть выведено на экран. Атрибут extern_event является списком, который создается при инициализации объекта (экземпляра) класса и содержит имена внешних событий связанных с данным классом. Используется при инициализации объектов класса для занесения внешних событий, связанных с объектом, в список имитатора.
Рисунок8 - Диаграмма класса AE
Все операции данного класса объявлены как виртуальные. В классах наследниках эти операции могут перекрываться. Обязательно в классах наследниках должна быть определена операция диспетчера вызовов (do_it) других операций класса. Виртуальная операция Out_param(…) предназначена для задания операции вывода текстовых сообщений о значениях атрибутов объекта.
Рассмотрение данного вопроса целесообразно вести на примере разработки домена. В качестве предметной среды выбрана область цифровых логических схем. На рисунке9 приведен фрагмент цифровой логической схемы. Необходимо для заданного фрагмента разработать статическую модель прикладной области, определить состав событий и операций обработки событий, для языка C# разработать исходные тексты операций классов и сгенерировать проект для MSVisualStudio.Net.
Рисунок9 - Фрагмент цифровой логической схемы
Разработка статической (информационной) модели прикладной области базируется на результатах объектно-ориентированного анализа (ООА). ООА может быть проведен различными способами, например, с помощью классической категоризации [7]. Должны быть выполнены следующие работы: выделены и описаны классы и их атрибуты; определены и описаны связи между классами; построена диаграмма статической модели. Описание выделенных классов оформляется в виде таблицы4.
Таблица 4 - Описание классов
Имя класса | Представители класса | Описание |
And | Элементы D1, D3 | Логический элемент, выполняющий логическую операцию «И» (конъюнкцию). Значения входных сигналов изменяются асинхронно. Имеет два устойчивых состояния: высокий уровень выходного напряжения – 1 и низкий - 0 |
Not | Элементы D2, D4 | Логический элемент, выполняющий логическую операцию «НЕ» (инверсия, отрицание). Значения входных сигналов изменяются асинхронно. Имеет два устойчивых состояния: высокий уровень выходного напряжения – 1 и низкий – 0 |
Классы And и Not являются активными классами.
Для каждого класса выделяются и описываются его атрибуты (таблица 5).
Таблица 5 - Описание атрибутов класса And
Имя атрибута | Содержательное описание | Доп. значения |
vx1 | Значение сигнала на первом входе | [0; 1] |
vx2 | Значение сигнала на втором входе | [0; 1] |
vyx | Значение сигнала на выходе | [0; 1] |
tz | Время задержки логическогоэлемента | 1 – 20 нс |
Таблица 6 - Описание атрибутов класса Not
Имя атрибута | Содержательное описание | Доп. значения |
vx | Значение сигнала на входе | [0; 1] |
vyx | Значение сигнала на выходе | [0; 1] |
tz | Время задержки логическогоэлемента | 1 – 20 нс |
В соответствии с заданной схемой экземпляры класса And имеют физическую связь с экземплярами класса Not, причем в каждой связи участвуют ровно по одному экземпляру каждого класса.
Таким образом, на основании приведенной информации можно составить предварительную статическую модель предметной среды на языке UML, которая приведена на рисунке10.
Рисунок10 - Предварительная статическая модель
Следует иметь в виду, что при генерации кода в состав атрибутов класса And будет введен еще один: имя – taker; тип – Not. То есть, имя помеченного стрелкой конца связи добавляется в качестве атрибута к классу от которого исходит стрелка.
Событие – это нарушенное однообразие. Однообразие в схеме нарушается, если происходит изменение какого-либо сигнала. В цифровых схемах возможны два изменение сигнала: из 0 в 1 и обратно. То есть, с каждым входом и выходом элемента схемы связаны два события. Каждому событию необходимо присвоить имя и определить другие данные. Описание событий для объекта and класса And и объекта not класса Not приведены в таблицах7,8.
Таблица 7 -Описание событий объекта and класса And
Имя события | Описание | Источник | Приемник | Данные |
vx10_1 | Изменение сигнала на входе 1 из 0 в 1 | Внеш. схема | Объект and | нет |
vx11_0 | Изменение сигнала на входе 1 из 1 в 0 | Внеш. схема | Объект and | нет |
vx20_1 | Изменение сигнала на входе 2 из 0 в 1 | Внеш. схема | Объект and | нет |
vx21_0 | Изменение сигнала на входе 2 из 1 в 0 | Внеш. схема | Объект and | нет |
vyx0_1 | Изменение сигнала на выходе из 0 в 1 | Объект and | Объект and | нет |
vyx1_0 | Изменение сигнала на выходе из 1 в 0 | Объект and | Объект and | нет |
Таблица 8 - Описание событий объекта not класса Not
Имя события | Описание | Источник | Приемник | Данные |
vx0_1 | Изменение сигнала на входе из 0 в 1 | Объект and | Объект not | нет |
vx1_0 | Изменение сигнала на входе из 1 в 0 | Объект and | Объект not | нет |
vyx0_1 | Изменение сигнала на выходе из 0 в 1 | Объект not | Объект not | нет |
vyx1_0 | Изменение сигнала на выходе из 1 в 0 | Объект not | Объект not | нет |
Простейший способ реагирования на события сопоставить каждому событию операцию класса, причем в качестве имен операций использовать имена событий. Для задания взаимодействия объектов по событиям можно использовать диаграмму последовательностей языка UML. На диаграмме последовательностей изображаются исключительно те объекты, которые непосредственно участвуют во взаимодействии и не показываются возможные статические ассоциации с другими объектами. Для диаграммы последовательностей ключевым моментом является динамика взаимодействия объектов во времени. При этом диаграмма последовательностей имеет как бы два измерения. Одно — слева направо в виде вертикальных линий, каждая из которых изображает линию жизни отдельного объекта, участвующего во взаимодействии. Графически каждый объект изображается прямоугольником и располагается в верхней части своей линии жизни. Внутри прямоугольника записывается имя объекта. На рисунке11 приведена диаграмма последовательностей для описанных событий и объектов. В качестве источника внешних событий на диаграмме приведен объект класса Imitator. Аргумент main_prog задает ссылку на объект главной программы, с помощью которого можно обращаться к операциям, определенным в главной программе.