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

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


 

 

ТЕКСТОВЫЙ ЯЗЫК ДЛЯ АВТОМАТНОГО ПРОГРАММИРОВАНИЯ

В.С. Гуров, М.А. Мазин, А.А. Шалыто

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

(Скачать вариант для печати)


В рамках проекта UniMod [1] предложены метод и средство для моделирования и реализации объектно-ориентированных программ со сложным поведением на основе автоматного подхода. Модель системы в рамках указанного проекта предлагается строить с помощью двух типов UML-диаграмм: диаграмм классов и диаграмм состояний [2]. При этом на диаграмме классов, которая представляется в виде схемы связей и взаимодействия автоматов, изображаются источники событий, автоматы и объекты управления, которые реализуют функции входных и выходных воздействий. Код для источников событий и объектов управления пишется на языке Java [3]. Поведение автоматов описывается с помощью диаграмм состояний.
С использованием инструментального средства UniMod выполнен ряд проектов, который доступны по адресу http://is.ifmo.ru/unimod-projects/. Данные проекты показали эффективность применения автоматного программирования и средства UniMod при реализации систем со сложным поведением, но также выявили и ряд недостатков:
• ввод диаграмм состояний с помощью графического редактора трудоемок;
• многие программисты предпочитают работать с текстовым представлением программы, несмотря на то, что диаграммы позволяют представлять информацию более компактно и обозримо;
• невозможно в одном Java-классе совместить автомат и объект управления, что не позволяет прозрачно использовать автоматное программирование совместно с объектно-ориентированным, так как в настоящее время код, генерируемый из автоматной модели, не является в полной мере объектно-ориентированным.
Для устранения перечисленных недостатков авторы предложили новый подход к разработке автоматных программ и применению автоматов в объектно-ориентированных системах. В рамках этого подхода предлагается использовать систему метапрограммирования JetBrains Meta Programming System (MPS) [4, 5], которая позволяет создавать проблемно-ориентированные языки (Domain Specific Language – DSL) [5, 6]. Для задания языка в системе MPS требуется разработать:
• структуру абстрактного синтаксического дерева (АСД) [7] для разрабатываемого языка. Узлам АСД могут соответствовать такие понятия как «объявление класса», «вызов метода», «операция сложения» и т.п.;
• модель текстового редактора для каждого типа узла АСД. Задание редактора для узла АСД равноценно заданию конкретного синтаксиса для этого узла. При этом, если для традиционных текстовых языков программирования создание удобного редактора – отдельная сложная задача, то для языков, созданных с помощью средства MPS, редакторы являются частью языка. Эти редакторы поддерживают автоматическое завершение ввода текста и проверку корректности программы;
• модель ограничений на экземпляры АСД;
• модель системы типов [8] для языка;
• модель трансформации программы на задаваемом языке в исполняемый код.
Система MPS позволяет как создавать новые языки, так и расширять языки уже созданные с помощью этой системы.
В отличие от традиционных языков, языки, созданные с помощью системы MPS, не являются текстовыми в традиционном понимании, так как при программировании на них пользователь пишет не текст программы, а вводит ее в виде АСД с помощью специальных редакторов. Структура и внешний вид этих редакторов таковы, что работа с моделью программы для пользователя выглядит, как традиционная работа с текстом программы. Отказ от традиционного текстового ввода программ значительно упрощает создание новых языков [9] – исчезает необходимость в разработке лексических и синтаксических анализаторов, и, как следствие, перестают действовать ограничения на класс грамматик языков. Недостатком такого подхода является зависимость языков от системы MPS – невозможно разрабатывать программы без этой системы. Однако подобное ограничение присуще и традиционным, чисто текстовым языкам, которые зависят от компиляторов. Впрочем, после трансляции программы, написанной на языке, созданном в системе MPS, исполняемый код перестает зависеть от этой системы.
С помощью системы MPS авторами созданы два варианта текстового языка для автоматного программирования. Первый язык выполнен в виде расширения языка Java, а второй является самостоятельным языком. Эти языки позволяют описывать состояния и логику переходов автоматов, а также события, обрабатываемые автоматами. При этом, так же, как и в инструментальном средстве UniMod, функции входных и выходных переменных реализуются на другом языке программирования.
Текстовый язык автоматного программирования второго типа расширяет язык Java и позволяет в одном Java-классе совмещать автоматные и не автоматные аспекты. После написания программы на этом языке, она сначала транслируется в Java-код, но уже без автоматного расширения, а затем компилируется стандартным Java-компилятором. Преимуществом этого языка является простота его использования в объектно-ориентированных приложениях, написанных на языке Java. При применении этого языка проверка корректности программы осуществляется на стадии ее написания, а не в процессе компиляции.
В то же время для приложений, написанных на других языках, этот язык не подходит. Для таких приложений предпочтительно использовать независимую от языка Java, первую версию автоматного языка. Эта версия менее зависима от платформы и полностью соответствует понятию запускаемых спецификаций.
Использование специальных языков для автоматного программирования упрощает разработку автоматов, избавляя программиста от необходимости описывать их средствами языков общего назначения.
Так как диаграммы состояний являются более наглядными по сравнению с текстовым представлением автоматов, то при использовании рассматриваемых языков может быть обеспечена возможность автоматического построения диаграммы состояний по мере набора текста. Однако эти диаграммы доступны только в режиме просмотра, а не редактирования.
С применением текстового языка автоматного программирования второго типа можно подробно ознакомиться в работе [10].
Исходя из изложенного, можно утверждать, что в настоящей работе предложен подход к построению программ, который может быть назван текстово-визуальным.
Литература
1. Гуров В.С., Мазин М.А., Нарвский А.С., Шалыто А.А. UML. SWITCH-Технология. Eclipse //Информационно-управляющие системы. 2005. №6(13), с. 12-17. http://is.ifmo.ru/works/uml-switch-eclipse/.
2. Гуров В.С., Мазин М.А., Шалыто А.А. Операционная семантика UML-диаграмм состояний в программном пакете UniMod //Труды XII Всероссийской научно-методической конференции "Телематика’2005". СПб.: СПбГУ ИТМО. Т.1, с.74-76. http://tm.ifmo.ru/tm2005/db/doc/get_thes.php?id=224.
3. Eckel B. Thinking in Java. NJ: Prentice Hall, 2006.
4. Fowler M. Language Workbenches: The Killer-App for Domain Specific Languages? http://www.martinfowler.com/articles/languageWorkbench.html (русский перевод – Фаулер М. Языковой инструментарий: новая жизнь языков предметной области http://www.maxkir.com/sd/languageWorkbenches.html).
5. Dmitriev S. Language Oriented Programming: The Next Programming Paradigm //onBoard, Issue № 2, 2005 (русский перевод – Дмитриев С. Языково-ориентированное программирование: следующая парадигма //RSDN Magazine. 2005. № 5).
6. Ward M. Language Oriented Programming //Software – Concepts and Tools, 15, 1994.
7. Ахо А., Сети Р., Ульман Дж. Компиляторы. Принципы, технологии, инструменты. М.: Вильямс, 2003.
8. Luo Z. Computation and Reasoning: A Type Theory for Computer Science. Oxford University Press, 1994.
9. Simonyi C. The Death of Computer Languages, the Birth of Intentional Programming //The Future of Software, Univ. of Newcastle upon Tyne, England, Dept. of Computing Science, 1995.
10. Красильников Н.Н., Шалыто А.А. Мультиагентная система дорожного движения. Реализации на языке Java и текстовом языке автоматного программирования. СПбГУ ИТМО, 2007. http://is.ifmo.ru, раздел ”Автоматный язык”.

 



Санкт-Петербург, 18-21 июня 2007 г.
XIV Всероссийская научно-методическая конференция "Телематика'2007"