Контекстная интерпретация OCL- ограничений Парамонов В.В., Черкашин Е.А., Федоров Р.К. Институт динамики систем и теории управления СО РАН
Постановка задачи В последнее время актуален вопрос сокращения сроков разработки информационных систем (ИС), возможность внесения изменений в результаты ранних этапов разработки ИС. Основу документации разработчика должна формировать модель ИС, из которой она реально получена.
Подход к созданию ИС Перспективным подходом к разработке ИС является методика на основе архитектуры MDA – Model Driven Architecture. В основе подхода лежат понятия модели, не зависимой от платформы – Platform Independent Model (PIM), модели, зависимой от платформы – Platform Specific Model (PSM).
Этапы создания PSM-модели ИС: генерация ядра ИС Построение UML диаграммы ИС (PIM), в т.ч. –Формализация дополнительной информации, связанной со спецификой предметной области. Преобразование в платформо-зависимую модель. Дополнительна я информация (модель платформы реализации) Преобразование PIM PSM
PIM-модель ИС
CREATE DATABASE IF NOT EXISTS DATABASE ; CONNECT DATABASE ; CREATE TABLE PERSON ( OID CHAR(128), BIRTHDAY DATE, DOCTYPE VARCHAR(255), FLAT INTEGER, NUMBER VARCHAR(255), PERSONNAME_FIRST VARCHAR(255), PERSONNAME_MIDDLE VARCHAR(255), PERSONNAME_LAST VARCHAR(255), PROFESSION_OID CHAR(128) NOT NULL REFERENCES PROFESSION (OID), SEX ENUM( "unknown", "male", "female" ) NOT NULL… Структура базы данных
class Object: # table: OBJECT pass class Person: # table: PERSON pass def getAllDocuments(self): rc=self.Document.select_basic(PATIENT_OID=self.OID) return rc def locateDocument(self, located_OID, default=_local_mark): rc=self.Document.select_basic(PATIENT_OID=self.OID, OID=located_OID) if rc: return rc elif default==_local_mark: raise KeyError, 'object not found' else: return default Объекты приложения
Пользовательский интерфейс
Схема реализации генератора
Дополнительная информация: ограничения Ограничения PIM являются важной частью ИС. Они определяют часть модели автоматизируемого объекта. Задание ограничений Естественный язык Формально
OCL OCL - формальный язык ограничений содержит необходимую строгость высказывания и может быть достаточно легко проинтерпретирован как человеком, так и вычислительной системой. OCL является частью спецификации UML.
Использование OCL Язык запросов. Ограничение диапазона значений для числовых переменных и типов данных. Пре- и пост- условия алгоритмов (подпрограмм). Задавать инварианты циклов. Язык задания атрибутов и выражений в UML.
Использование OCL в MDA OCL Язык Модули преобразования Модель Правила преобразования
Интерпретация OCL OCL-выражение: context Person inv: self.reg_time < self.dep_time Возможно проинтерпретировать как: ограничение для баз данных: ALTER TABLE PERSON ADD CONSTRAINT REG_TIME < DEP_TIME код для элемента пользовательского интерфейса: if (!this.reg_time
Интерпретация OCL Contex Price post: --Условие максимальной цены до выполнения операции self.highPrice < self.price implies self ^ updateHighPrice(self.price) inv: self.highPrice>=self.price CREATE TRIGGER stockhigh NO CASCADE BEFORE UPDATE ON stocks REFERENCING NEW AS newrow FOR EACH ROW MODE DB2SQL WHEN (newrow.highprice IS NULL OR newrow.price > newrow.highprice) SET newrow.highprice = newrow.price; По следующему OCL-выражению: Генератор создает триггер БД:
Роль OCL в разрабатываемой системе Транслятор языка OCL Контекст (Интерпретация PIM) Преобразование дерева, зависящее от контекста Дерево разбора Генерирование исходного кода OCL- выражение Исходный код Модифицированное дерево как часть PSM
Выводы Разрабатывается программная технология интерпретации PIM- моделей ИС. Создаются методики анализа формализованных ограничений в контексте интерпретации ИС. Программные технологии тестируются на реальных примерах.
Апробация программной технологии Информационная система «Канц-регистр» Диаграмма, состоящая из 101 класса привела к –91 таблице; –8000 строк программного кода методов классов. Цикл генерации – 3 минуты. Бюджет руб. Время настройки пользовательского интерфейса 6 чел/мес. Общее время разработки 12 чел/мес.