Автоматическая генерация кода программ с явным выделением состояний

Содержание

Слайд 2

О чем доклад?

Как описать сложную логику работы приложения.
Как преобразовать это описание в

О чем доклад? Как описать сложную логику работы приложения. Как преобразовать это
код максимально удобным способом.
Инструментальное средство MetaAuto.

Слайд 3

Мотивация

Существует разрыв между фазами проектирования и реализации.
В большинстве случаев моделируют статическую часть

Мотивация Существует разрыв между фазами проектирования и реализации. В большинстве случаев моделируют
программы с помощью диаграммы классов.
Сложную логику невозможно описать.
Диаграммы взаимодействия и последовательности бесполезны.
Диаграммы состояний использовать сложно.

Слайд 4

Что нам нужно?

Необходимо научиться описывать сложную логику.
Необходимо инструментальное средство для преобразования этого

Что нам нужно? Необходимо научиться описывать сложную логику. Необходимо инструментальное средство для
описания в исходный код программы.

Слайд 5

Как описывать сложную логику работы программы
Программирование с явным
выделением состояний.

Как описывать сложную логику работы программы Программирование с явным выделением состояний.

Слайд 6

Программа с явным выделением состояний

Явное выделение состояний:
Вместо набора флагов – выделенное состояние.
Непредвиденные

Программа с явным выделением состояний Явное выделение состояний: Вместо набора флагов –
переходы исключаются.
Ускорение тестирования.

Слайд 7

Описание программы с явным выделением состояний

Диаграммы состояний UML или аналогичные (графы переходов

Описание программы с явным выделением состояний Диаграммы состояний UML или аналогичные (графы
автоматов).
Требуется автоматическая генерация кода или исполнение программы по графам переходов.

Слайд 8

Преимущества программ с явным выделением состояний.

Облегчение проектирования
Облегчение документирования
Ускорение процесса тестирования.

Преимущества программ с явным выделением состояний. Облегчение проектирования Облегчение документирования Ускорение процесса тестирования.

Слайд 9

Аналоги

Для многих языков программирования не созданы соответствующие инструментальные средства.
Существующие инструментальные средства не

Аналоги Для многих языков программирования не созданы соответствующие инструментальные средства. Существующие инструментальные
позволяют настраивать получаемый исходный код.

Слайд 10

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

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

Слайд 11

Генерация кода

подстановки (templates C++);
подстановки с исполнением кода (ASP);
обработчики данных регулярной структуры (XSLT).
Наличие

Генерация кода подстановки (templates C++); подстановки с исполнением кода (ASP); обработчики данных
групп состояний.
Наличие групповых переходов.
Наличие логических выражений.

Слайд 12

Пример. Шаг 1

Visio file

Пример. Шаг 1 Visio file

Слайд 13

Пример. Шаг 2




Пример. Шаг 2 … … … XML file
/>





















XML file

Слайд 14

Пример. Шаг 3





Пример. Шаг 3 //--- this file is machine generated --- //Model: namespace
match="//actionNode" use="@name"/>

//--- this file is machine generated ---
//Model:
namespace Automatas
{
public class BaseAutomata
{
}

}



/// <summary>
///
/// </summary>
public abstract class : BaseAutomata
{
protected string y = "s0";
public void A(int e)
{
switch (y)
{
mode="SWITCH_BLOCK">


}
}

mode="FUNCTION_DEFINITIONS">



mode="FUNCTION_DEFINITIONS">



}


XSLT-шаблон

Слайд 15

Пример. Шаг 4

//--- this file is machine generated ---
//Model: ModelName
namespace Automatas
{
public

Пример. Шаг 4 //--- this file is machine generated --- //Model: ModelName
class BaseAutomata
{
}
///
/// Lexical analyzer
///

public abstract class A2 : BaseAutomata
{
protected string y = "s0";
public void A(int e)
{
switch (y)
{
case "s0":
if (e == 0) {z401(); y = "s1";}
break;
case "s1":
if (e == 1) {z200(); y = "s1";}
else if (e == 0) {z401(); y = "s1";}
break;
}
}
///
///
///

protected abstract void z200();
///
/// Initialize and return the first match
///

protected abstract void z401();
}

///


/// Syntactical analyzer
///

public abstract class A1 : BaseAutomata
{
protected string y = "s0";
public void A(int e)
{
switch (y)
{
case "s0":
if (true) {z200(); Call_A2(0); y = "s1";}
break;
case "s1":
if (x206()) { y = "s4";}
else if (x201()){z201(); z301(); y = "s1";}
else if (x202()){ y = "s2";}
else if (x203()){z203(); y = "s3";}
break;
case "s2":
if (x205()) { y = "s0";}
else if (x204())
{z202(); Call_A2(1); y = "s1";}
else if (true) { y = "s4";}
break;
case "s3":
if (x207()) {z204(); y = "s1";}
else if (true) { y = "s4";}
break;
case "s4":
if (true) {z205(); y = "s0";}
break;
}
}
///
/// Command in the top of the stack
///

/// Is condition correct
protected abstract bool x201();
/*Часть входных переменных и действий пропущено*/
}
}

Код программы

Слайд 16

Интеграция с MS Visual Studio 2003

Интеграция с MS Visual Studio 2003

Слайд 17

Применения

При создании самого инструментального средства
Созданы шаблоны для языков C#, C++, Assembler
Предполагается использовать

Применения При создании самого инструментального средства Созданы шаблоны для языков C#, C++,
для встроенных систем
настраиваемость
простота использования

Слайд 18

Вопросы?

Вопросы?
Имя файла: Автоматическая-генерация-кода-программ-с-явным-выделением-состояний.pptx
Количество просмотров: 122
Количество скачиваний: 0