В комментариях к предыдущему топику много говорилось о том, что статья вышла сухая, академическая и плохо разжеванная. Да и вообще – зачем нужен DSL и какие проблемы он может решить? В связи с этим, я подготовил небольшой вводный обзор возможностей представления знаний о предметных областях в целом, чтобы рассмотреть, какое место в нем занимают DSL и чем все же удобно их использование.
На сегодняшний день существуют различные способы представления знаний о предметных областях. Среди них можно выделить:
– текстовое представление;
– графическое представление;
– табличное представление;
– формульное представление.
Классификация способов представления знаний о предметных областях представлена на рисунке 1.1.
Текстовое представление – наиболее часто встречающийся вид представления знаний о предметной области. Способы текстового представления знания о предметных областях выделены на рисунке 1.2.
Рисунок 1.1 – Способы представления знаний о предметных областях
Рисунок 1.2 – Способы текстового представления знаний о предметной области
Графическое представление – самое информативное для человека, оно позволяет увидеть структурные элементы предметной области, взаимосвязи между ними и процессы, происходящие в предметной области. Способы графического представления знания о предметных областях отображены на рисунке 1.3.
Рисунок 1.3 – Графические способы представления знаний о предметной области
Табличное представление удобно для последующей обработки на ЭВМ, т.к. наиболее формализовано из всех приведеных. Чаще всего используются прямоугольные таблицы, состоящие из строк и столбцов (граф). В верхней строке таблицы обычно располагаются заголовки граф. Таблица 1.1 является примером прямоугольной таблицы, содержащей сведения о погоде в течение нескольких дней.
Таблица 1.1 – Пример таблицы типа «Объект-свойство»
Дата |
Осадки |
Температура (градусы С) |
Давление (мм рт. ст.) |
Влажность (проценты) |
15.03.97 |
Снег |
-3,5 |
746 |
67 |
16.03.97 |
Без осадков |
0 |
750 |
62 |
17.03.97 |
Туман |
1,0 |
740 |
100 |
18.03.97 |
Дождь |
3,4 |
745 |
96 |
19.03.97 |
Без осадков |
5,2 |
760 |
87 |
Данная таблица является примером таблицы типа «объект-свойство». Каждая строка такой таблицы относится к конкретному объекту. В приведенном примере это определенный день, заданный датой. Первая графа обычно идентифицирует этот объект, последующие графы отражают свойства (характеристики) объекта.
Другой тип таблиц называется «объект-объект». Такие таблицы отражают взаимосвязь между различными объектами. Примером является таблица успеваемости учеников по разным предметам – таблица 1.2
Таблица 1.2 – Таблица успеваемости учеников по разным предметам
Ученик |
Русский |
Алгебра |
Химия |
Физика |
История |
Музыка |
Аликин Петр |
4 |
5 |
5 |
4 |
4 |
5 |
Ботов Иван |
3 |
3 |
3 |
3 |
3 |
4 |
Волков Илья |
5 |
5 |
5 |
5 |
5 |
5 |
Галкина Нина |
4 |
4 |
5 |
2 |
4 |
4 |
Эта таблица отражает связь между двумя типами объектов: учениками и изучаемыми дисциплинами. Оценка является характеристикой такой связи. В такой таблице строки и графы могут поменяться местами: в строках — предметы, в столбцах — ученики.
Формульное представление чаще всего используется при создании математической модели предметной области и стоит отдельно от приведенных ранее способов представления знаний о предметных областях.
Рассмотрим подробнее текстовое и графическое представления как наиболее естественные и удобные для восприятия.
Текстовое представление разделяют на структурированное описание и неструктурированное описание. Неструктурированное описание представлено простым текстом. Структурированное, в свою очередь, подразделяется на исполняемое (тем или иным образом исполняющееся на ЭВМ) и неисполняемое. К неисполняемым относятся техническое задание (структурированный и даже гостированный документ, содержащий общую информацию о предметной области) и набор бизнес-требований (структурированный документ, содержащий расширенную информацию о предметной области).
Исполняемые текстовые способы представления заний о предметных областях являются уже больше технологиями, чем способами, с точки зрения программиста. Однако, если взглянуть на представленные в этой классификации DSL, XML и онтологии предметной области со стороны эксперта предметной области, эти способы гораздо ближе к естественному языку описания процессов, проходящих в предметной области, чем многие другие. К тому же, за счет своей структуризации, эти способы представления знаний о предметных областях удобны для исполнения в программный код.
Графический способ представления также можно разделить на структурированный и неструктурированный. К неструктурированному представлению относятся рисунки, графики и фотографии, которые хорошо описывают предметную облатсь визуально, однако недостаточно формализованы для дальнейшей работы с ними. Структурированное, в свою очередь, можно разделить на представление в виде диаграмм и в виде объектных моделей.
Диаграммы представлены UML, SADT, Data Flow и ассоциативными картами (Mind Map). Этот способ описания предметной области постоянно динамически развивается, появляются новые спецификации и возможности для их построения. Он достаточно формализован и в настоящее время является основой проектирования программных систем.
К объектным моделям можно отнести графы и графические языки описания предметной области. Последние наиболее близки к естественному описанию предметной области и позволяют выражать представление о предметной области в терминологии, присущей конкретной предметной области.
Как видим из классификации, среди структурированных моделей представления знаний, которыми может оперировать пользователь, являющийся экспертом предметной области, но ничуть не являющийся программистом, присутствуют:
1. Техническое задание
2. Набор бизнес-функций
3. DSL
ВСЕ. Для создания остальных моделей необходимо обладать дополнительным набором знаний, который не относится к предметной области эксперта. А если теперь взять за основу то, что техническое задание и набор бизнес-функций не являются исполняемыми моделями, выходит, что на текущий момент DSL – единственный способ описания своих знаний о предметной области экспертом, не имеющим подготовки в программировании. И это единственный способ для последующего приведения в программный код готового продукта, требующий незначительного допиливания со стороны программиста.
Если у вас есть альтернативная точка зрения, вы не согласны с каким-то мыслями или хотите высказать свое мнение на этот счет – прошу в комменты, люблю конструктивную критику и полезное обсуждение по делу.