model-driven engineering

18
First Bulgarian C++ Conference, Velingrad, 27-28 June 2008 Model-Driven Engineering Калин Наков

Upload: erasmus-karsten

Post on 02-Jan-2016

56 views

Category:

Documents


0 download

DESCRIPTION

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) ‏. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Model-Driven Engineering

First Bulgarian C++ Conference, Velingrad, 27-28 June 2008

Model-Driven Engineering

Калин Наков

Page 2: Model-Driven Engineering

First Bulgarian C++ Conference, Velingrad, 27-28 June 2008

Model-Driven Engineering

От картинки към краен продукт

int main(int argc, char *argv[]){ if (argc > 2) { printf("Too many args"); return -1; } printf("Welcome!");

return 0;}

Page 3: Model-Driven Engineering

First Bulgarian C++ Conference, Velingrad, 27-28 June 2008

Четирислойна йерархия

М3 (MOF)

М2 (UML, SysML)

М1 (mymodel.xmi)

М0 (myprogram.exe)

Page 4: Model-Driven Engineering

First Bulgarian C++ Conference, Velingrad, 27-28 June 2008

Съхранение на М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>

...

Page 5: Model-Driven Engineering

First Bulgarian C++ Conference, Velingrad, 27-28 June 2008

Валидация на М1

package mymodelcontext Flowerinv PacmanDanger:

Pacman.forAll( p | not p.canEat(self))endpackage

Invariant PacmanDangerInvariant PacmanDangerfailed, model validationfailed, model validation

failedfailed

Error logError log

Page 6: Model-Driven Engineering

First Bulgarian C++ Conference, Velingrad, 27-28 June 2008

Трансформация на М1

Page 7: Model-Driven Engineering

First Bulgarian C++ Conference, Velingrad, 27-28 June 2008

Начини на редактиране

Дървовидно редактиране

* MyModel * Pacman #color: blue #canEat: Flowers, Triangles

Графично редактиране

Page 8: Model-Driven Engineering

First Bulgarian C++ Conference, Velingrad, 27-28 June 2008

Работа в екип по дадена система

Page 9: Model-Driven Engineering

First Bulgarian C++ Conference, Velingrad, 27-28 June 2008

Код генерация

int main(int argc, char *argv[]){ if (argc > 2) { printf("Too many args"); return -1; } printf("Welcome!");

return 0;}

Page 10: Model-Driven Engineering

First Bulgarian C++ Conference, Velingrad, 27-28 June 2008

Инкрементална код-генерация

[template public FLWR(f: Flower)] CREATE TABLE [f.name/] ( [for (c:Column|f.column) ...

CREATE TABLE MyFlower( MyID:PRIMARY KEY ...

Page 11: Model-Driven Engineering

First Bulgarian C++ Conference, Velingrad, 27-28 June 2008

Процес на код генерация

Избор на подсистема

Избор на Template

Генерация

Merge с изходния код

Краен продукт

Page 12: Model-Driven Engineering

First Bulgarian C++ Conference, Velingrad, 27-28 June 2008

Параметризирана код генерация

Вмъкване на код за допълнителни проверки

Генериране на специална Debug версия

Включване/изключване на модули

Вкарване на код за обратна връзка към модела

Включване/изключване на документация

...

Page 13: Model-Driven Engineering

First Bulgarian C++ Conference, Velingrad, 27-28 June 2008

Защо round-trip engineering почти никога не върши работа?

Page 14: Model-Driven Engineering

First Bulgarian C++ Conference, Velingrad, 27-28 June 2008

Изпълнение на модела

Page 15: Model-Driven Engineering

First Bulgarian C++ Conference, Velingrad, 27-28 June 2008

Как се пише софтуер чрез MDE

Мета-модел на данните М2

Валидационна схема (семантика) на модели М1

Графична презентация на елементите от М2

Templates за код генерация от М1

Автоматична генерация на редактор на М1

Създаване на система диаграми чрез редактора

Пускане на код-генерация (код, документация)

Компилация и пакетиране на крайния продукт

Page 16: Model-Driven Engineering

First Bulgarian C++ Conference, Velingrad, 27-28 June 2008

През погледа на архитекта

Page 17: Model-Driven Engineering

First Bulgarian C++ Conference, Velingrad, 27-28 June 2008

През погледа на програмиста

cppmain.m2t:

[template CppClass(c:class)][for (a:Attribute)]

private: a.type a.name;[/for]

[/template]

Page 18: Model-Driven Engineering

First Bulgarian C++ Conference, Velingrad, 27-28 June 2008

Model-Driven Engineering

Въпроси?