Программирование в терминах предметной области
Идея этой парадигмы программирования, что называется "витает в воздухе". Логическая модель приложения, которая описывает внутреннее устройство целевой предметной области и взаимодействие всех ее частей, в соответствующей вычислительной среде способна обеспечить получение такого же результата, которого мы добиваемся обычными технологиями с использованием различных языков программирования, их сред исполнения и фреймворков.
То есть, в отличие от всех остальных парадигм программирования, создается не программа в традиционном ее понимании, а структуры данных, образующие модель приложения, включая все правила ее поведения, и интерфейсные формы взаимодействия с данными. Именно это принципиальное отличие и обеспечивает ключевые преимущества парадигмы: скорость разработки, надежность, наглядность и гибкость.
Давая оценку такому подходу к решению прикладных задач стоит обратить внимание на некоторые факты, подчеркивающие естественность и фундаментальность парадигмы:
а) модель приложения создается комбинированием экземпляров всего четырех базисных элементов: двух сущностей — класса и атрибута класса, и их связей — отношения классов и зависимости атрибутов;
б) упомянутая вычислительная среда образована совокупностью естественных функций базисных элементов;
в) в основе дизайнерского интерфейса к модели приложения и пользовательского интерфейса к производным от нее данным лежат те же самые фундаментальные принципы, что и в основе модели. Оба интерфейса создаются комбинированием экземпляров естественных форм представления базисных элементов, их множеств и событий.
г) модель приложения с ее интерфейсами является прямым и естественным "информационным представлением" предметной области, своего рода проекцией предметной области на информационное пространство.
Парадигма
Название парадигмы — "Программирование в терминах предметной области" наилучшим образом отражает ее суть: мы создаем модель приложения, обладающую свойствами программы, используя для этого смысловые понятия сущностей и связей предметной области в их первозданном виде.
Если следовать этому определению, то методология процесса программирования в самых общих чертах представляется достаточно самоочевидной:
1) Внимательно рассмотрим целевую область на предмет выявления в ней отдельных понятийных сущностей, и для каждой такой сущности создадим отдельный класс. При этом, если у сущности есть сущность-предок, характерные черты которого она наследует, то и класс этой сущности создается наследованием от класса родительской сущности;
2) Для каждой пары логически связанных сущностей определим количественный аспект их взаимодействия, после чего создадим между классами сущностей отношение соответствующего типа.
3) Для каждой сущности определим набор ее характеристик, и для каждой характеристики создадим в классе атрибут соответствующего типа значения.
4) Если некоторая характеристика сущности зависима от других характеристик-аргументов родительской сущности или других сущностей, напрямую связанных с родительской, то соответствующий этой характеристике атрибут необходимо связать отдельной зависимостью с каждым атрибутом-аргументом, и при необходимости назначить исходному атрибуту требуемый функционал — детерминированную процедуру, преобразующую значения-аргументы в результирующее значение.
Создание перечисленных субъектов модели приложения неразрывно связано с созданием дизайнерского интерфейса к этой модели, и фактически производно от него: экземпляр субъекта создается в контексте родительского субъекта в момент размещения его визуального представления на форме представления родительского субъекта. Все эти действия выполняются в визуальном пространстве конструктора модели.
Аналогичным образом, но уже средствами конструктора интерфейсов непосредственно в визуальном пространстве собственно самого пользовательского интерфейса, создается требуемый набор интерфейсных форм — путем последовательного размещения форм представления дочерних субъектов на формах родительских субъектов действующей модели.
Ограничения парадигмы
Каждый инструмент заточен под ту область применения, где он наиболее эффективен. И обязательно найдутся такие области, где его применение невозможно или нецелесообразно.
Данная парадигма рассматривает автоматизируемую предметную область целиком, и чем сложнее и обширнее эта область, тем сильнее проявляют себя преимущества парадигмы. Но вместе с тем ее невозможно использовать для реализации какого-либо отдельного алгоритма.
Целевая предметная область в обязательном порядке должна характеризоваться наличием множества детерминированных состояний (общее условие применения СУБД). То есть, бессмысленно пытаться применить парадигму в целях создания драйвера устройства, например.