model-driven engineering

Post on 02-Jan-2016

56 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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

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

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;}

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

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

М3 (MOF)

М2 (UML, SysML)

М1 (mymodel.xmi)

М0 (myprogram.exe)

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>

...

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

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

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

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

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

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

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

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

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

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

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;}

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 ...

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

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

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

Избор на Template

Генерация

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

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

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

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

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

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

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

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

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

...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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]

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

Model-Driven Engineering

Въпроси?

top related