Re: Языково-ориентированное программирование: следующая пара
От: serb Россия  
Дата: 19.04.06 12:01
Оценка:
Добрый день.
Почитал я тут споры на счет трудности освоения DSL, за и против и тд.
И набросал небольшой примерчик как я понимаю эту тематику. Очень хотелось бы чтобы кто-нибудь попинал.

Для демонстрации нового подхода попробуем разработать систему “Расписание движения поездов метро”.
1. Анализ предметной области.
Предметная область, в которой будет работать наша система, будет метрополитен. Система должна рассчитать расписание движения поездов для метрополитена по различным входным параметрам, таким как загруженность линии, времени суток, количество персонала. Мы хотим, чтобы наша система была универсальной и подходила для описания схемы любого метрополитена. Для этого нужно разработать всю модель системы на предметном языке, а затем сгенерировать по ней некоторое ядро, а настраивать его будут пользователи системы.
2. Проектирование предметной области.
Основные элементы, которые будут входить в нашу систему это:
1) Станция метро и её набор характеристик.
2) Поезд метро и его набор характеристик.
3) Переход между станциями и его набор характеристик.
4) Переезд между станциями и его набор характеристик.
5) Пассажир метро и его набор характеристик.
6) Персонал метро и его набор характеристик.
3. Реализация предметной области.
Разрабатываем алгоритм составления расписания, который работает с объектами предметной области.
Создаем команды нашего языка для манипулирования объектами предметной области:
1) Создать станцию метро (Характеристика1,…).
2) Создать переезд между станция_1 и станция_2(Характеристика 1,…).
3) Создать переход между станция_1 и станция_2(Характеристика 1,…).
4) Задать количество пассажиров на станции между время_1 и время_2(Характеристика 1,…).
5) Создать поезд (Характеристика 1,…).
6) Создать машиниста (Характеристика 1,…).
7) Создать расписание.
На данном этапе мы сделали модель предметной области и разработали язык для её описания и изменения. Язык описан в виде текста, но в общем случае это может быть что угодно: текст, таблицы, диаграммы или схемы. Функции этого языка сильно ограничены, но их достаточно для решения поставленной задачи. Теперь это концептуальное решение необходимо перевести в исходный код системы по следующим пунктам:

1 Необходимо разработать генераторы, которые смогут преобразовать понятия “Станция метро”, “Поезд метро” в классы универсального языка программирования.
Например:
Понятие “Станция метро” будет преобразовано следующим образом:
Class MetroStation
{
    String Name;
    ...
}

Все остальные объекты предметной области преобразуются аналогично.

2 При получении команды наша система должна сделать разбор команды, по возможности оптимизировать её и проверить на наличие ошибок(например попытку создания станции с пустым именем). После проверок наша система должна преобразовать команду из понятий предметной области в код. Например, команда “Создать станцию метро” может быть преобразована в следующий код
metroStations.add(new MetrosStation(“Невский проспект”,…));

Разработка системы завершена. Всю остальную настройку и доработку можно выполнить силами специалистов предметной области(Заказчиков).Этот пример очень простой для понимания принципов программирования в новом стиле, но его можно было бы расширить, добавив в команды функции создания новых элементов языка наравне с остальными, например, добавить понятие наземного перехода между станциями.
Узким местом в этом примере является создание генераторов из концептуальной модели в код и проверка на корректность тех команд, которые вводит пользователь. Только невозможность автоматизировать этот процесс сводит на нет все достоинства новой методологии.
Для того чтобы этот метод программирования заработал,необходимо, чтобы после разработки предметно ориентированного языка, позволяющего строить схему метро, программист смог использовать в своей программе некоторый редактор, что бы пользователи смогли спроектировать в нём метро своего города.

Фактически это попытка провести следующий подход "Пускай системы пишут те кто разбирается в предметной области, а универсальные программисты нужны лишь для того чтобы построенная система заработала"


Спасибо
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.