Телематика'2004

XI Всероссийская
научно-методическая
конференция


 

 

ЯЗЫК АВТОМАТНОГО ПРОГРАММИРОВАНИЯ «STATE»

Н.Н.Шамгунов, А.А.Шалыто

Санкт-Петербургский государственный университет информационных технологий, механики и оптики, Санкт-Петербург

Тел.: (812) 247-95-45, e-mail: shalyto@mail.ifmo.ru

В настоящее время активно развивается технология автоматного программирования, впервые сформулированная в работе [1] и развитая в работе [2]. Совершенствование указанной технологии связано с совместным использованием автоматов и классов. Этот вопрос исследуется в проектах, опубликованных на сайте http://is.ifmo.ru, во многих из которых используется конструкция switch, которая не является «объектной».
Цель настоящей работы состоит в разработке нового объектно-ориентированного языка программирования, который позволяет:
– эффективно работать с конечными автоматами на основе объектно-ориентированной модели;
– обеспечить работу с каждым автоматом как с единым объектом на этапе проектирования, кодирования и использования.
Наиболее близким подходом для решения указанной задачи является применение любого объектно-ориентированного языка и реализация на нем паттерна State [3]. Такой подход неэффективен для создания систем, содержащих большое количество небольших автоматов с малым числом состояний, так как:
– для каждого автомата необходимо ввести столько классов, сколько состояний в реализуемом автомате плюс один (базовый);
– для доступа к данным автомата из объектов, реализующих состояния, необходимо обращаться к контексту [3], хранящему эти данные, что усложняет код и делает неудобным добавление новых данных.
Авторы считают, что одним из важнейших факторов, ограничивающих широкое использование автоматов в разработке программного обеспечения, является отсутствие непосредственной их поддержки в современных языках программирования. Для устранения этого недостатка разработан новый язык программирования State. Язык построен на базе языка C#, в который введены синтаксические конструкции «automaton» и «state». Программа на этом языке компилируется в сборку Microsoft CLR (Common Language Runtime [4]). Ввиду того, что язык является расширением C#, он обладает всеми его преимуществами.
Automaton (далее автомат) – это расширение понятия class за счет использования понятия «состояние». Если не определить ни одного состояния, автомат будет эквивалентен классу. В теле автомата можно определить одно или несколько состояний state, внутри каждого, из которых описывается набор методов. Это позволяет непосредственно реализовывать паттерн State не в виде совокупности классов, а внутри одной логической конструкции. Автомат может наследоваться как от класса, так и от другого автомата. Это позволяет, в частности, повторно использовать код для реализации модифицированных графов переходов.
Для компиляции языка разработан препроцессор, преобразующий код на языке State в код на языке C#. Препроцессор преобразует автомат в класс, который может быть скомпилирован в Microsoft CLR. Таким образом, обеспечена возможность работы с автоматом как с единым объектом, как на этапах проектирования и кодирования, так и на этапе использования.
В качестве примера реализуем простейший автомат с двумя состояниями. При переходе из первого состояния во второе при входном воздействии move формируется выходное воздействие (на консоль выводится строка State1). На петле во втором состоянии при том же входном воздействии на консоль выводится строка State2. Этот автомат на языке State описывается следующим образом.
using System;
automaton Sample
{
enum State
{
state1,
state2,
}
State _state = State.state1;
state ( _state == State.state1 )
{
public void move ()
{
Console.WriteLine ( "state1" );
_state = State.state2;
}
}
state ( _state == State.state2 )
{
public void move ()
{
Console.WriteLine ( "state2" );
_state = State.state2;
}
}
static void Main(string[] args)
{
Sample s = new Sample ();
s.move ();
s.move ();
}
}
Применение автоматов в программировании в настоящее время активно развивается. Так, в частности, в Microsoft Research разработан язык ASML (Abstract State Machine Language) [5]. Предлагаемый язык рассчитан на более широкую аудиторию, так как является расширением языка C#.

Литература
1. Шалыто А.А. SWITCH-технология. Алгоритмизация и программирование задач логического управления. СПб.: Наука, 1998.
2. Шалыто А.А., Туккель Н.И. SWITCH-технология – автоматный подход к созданию программного обеспечения «реактивных» систем // Программирование. 2001. №5. http://is.ifmo.ru, раздел «Статьи».
3. Гамма Э., Хелм Р., Джонсон Р., Влассидес Дж. Приемы объектно-ориентированного проектирования. Паттерны проектирования. СПб.: Питер, 2001.
4. Richter, J. Applied Microsoft® .NET Framework Programming. Microsoft Press, 2002.
5. Abstract State Machine Language. http://research.microsoft.com/foundations/AsmL/.


 



Санкт-Петербург, 7-10 июня 2004 г.
XI Всероссийская научно-методическая конференция "Телематика'2004"