180 likes | 361 Views
Model-Driven Engineering. Калин Наков. Model-Driven Engineering. От картинки към краен продукт. int main(int argc, char *argv[]) { if (argc > 2) { printf("Too many args"); return -1; } printf( " Welcome! " ); return 0; }. Четирислойна йерархия. М3 (MOF) .
E N D
Model-Driven Engineering Калин Наков
Model-Driven Engineering • От картинки към краен продукт int main(int argc, char *argv[]) { if (argc > 2) { printf("Too many args"); return -1; } printf("Welcome!"); return 0; }
Четирислойна йерархия М3 (MOF) М2 (UML, SysML) М1 (mymodel.xmi) М0 (myprogram.exe)
Съхранение на М2 и М1 <?xml version="1.0" encoding="UTF-8"?> <XMI xmi.version="1.0"> <XMI.header> <XMI.documentation> </XMI.documentation> <XMI.metamodel xmi.name="UML" xmi.version="1.3"/> </XMI.header> <XMI.content> ...
Валидация на М1 package mymodel context Flower inv PacmanDanger: Pacman.forAll( p | not p.canEat(self)) endpackage Error log Invariant PacmanDanger failed, model validation failed
Начини на редактиране • Дървовидно редактиране * MyModel * Pacman #color: blue #canEat: Flowers, Triangles • Графично редактиране
Код генерация int main(int argc, char *argv[]) { if (argc > 2) { printf("Too many args"); return -1; } printf("Welcome!"); return 0; }
Инкрементална код-генерация [template public FLWR(f: Flower)] CREATE TABLE [f.name/] ( [for (c:Column|f.column) ... CREATE TABLE MyFlower( MyID:PRIMARY KEY ...
Процес на код генерация Избор на подсистема Избор на Template Генерация Merge с изходния код Краен продукт
Параметризирана код генерация • Вмъкване на код за допълнителни проверки • Генериране на специална Debug версия • Включване/изключване на модули • Вкарване на код за обратна връзка към модела • Включване/изключване на документация • ...
Защо round-trip engineering почти никога не върши работа?
Как се пише софтуер чрез MDE • Мета-модел на данните М2 • Валидационна схема (семантика) на модели М1 • Графична презентация на елементите от М2 • Templates за код генерация от М1 • Автоматична генерация на редактор на М1 • Създаване на система диаграми чрез редактора • Пускане на код-генерация (код, документация) • Компилация и пакетиране на крайния продукт
През погледа на програмиста cppmain.m2t: [template CppClass(c:class)] [for (a:Attribute)] private: a.type a.name; [/for] [/template]
Model-Driven Engineering Въпроси?