Для создания модели предметной области сначала строится модель наших представлений. Описание наших представлений содержится в метамодели (например, в нотации BPMN). Метамодели, в свою очередь, строятся на основе мета-метамодели. Однако, наши представления имеют очень непростую структуру, которая до сих пор не имеет формального описания. Поэтому построение метамодели и мета-метамодели сильно затруднено. Попытку описать эту структуру предприняли греки, когда придумали основы логики. Способы нашего мышления изучали математики, когда столкнулись с парадоксами, пытаясь построить основы своей науки. Казалось бы, прогресс есть, но по какой-то причине, остановившись на формальном описании инструментов логического вывода, математики не сделали попытку применить полученные наработки к моделированию нашего мира (наверно, потому что для них – это прикладная задача, не вызывающая интереса).
В итоге те принципы, на основе которых создаются нотации и языки моделирования предметных областей, выбираются разработчиками относительно произвольно. Понятно, что созданный таким образом языки моделирования имеют достаточно ограниченную область применения. Эту область должны были бы описать создатели языка, но разработчики, как правило, это требование игнорируют.
Представьте себе, что вы встретили алгоритм решения дифференциальных уравнений. Однако, в алгоритме не исследован вопрос о границах сходимости и скорости этой сходимости. Можете ли вы использовать этот алгоритм на практике? Все зависит от степени вашей ответственности. На практике алгоритм должен иметь описание, которое включает в себя описание границ сходимости и оценку скорости сходимости. Ровно также, создатели языка или нотации должны были бы описать границы применимости нотации и оценить трудоемкость ее применения к решению практических задач. Однако, я не встречаю подобного анализа ни для одной из современных нотаций. Например, когда я говорю, что нотация BPMN не позволяет моделировать сценарии, моделируя лишь типовые сценарии, я тем самым описываю границы применимости данной нотации. Но сами разработчики даже, если бы и хотели, не смогли бы сделать такой анализ. Причина этого в том, что до сих пор нет возможности классифицировать описания предметных областей, причиной чему, в свою очередь, является отсутствие соответствующего классификатора.
Проблема понятна, и созданием такого классификатора занято множество людей, но его все еще нет. В данной статье я расскажу о тех сложностях, с которыми сталкиваются разработчики метамоделей и попытаюсь объяснить, почему (на мой взгляд) задача построения классификатора метамоделей пока не удалась.
Об одной из причин я писал ранее – мы стремимся мифологизировать сущее, одушевляя неодушевленное. И причина этого тоже понятна – язык, на котором мы с вами общаемся, имеет в своей основе мифическое сознание, в котором за все, что происходит в природе, обязательно кто-то отвечает. Река – течет, станок — точит, нож — режет и т.д. Всегда есть наделенное сознанием мифическое существо, которое что-то делает. Например, все мы считаем, что яблоко падает на Землю. Но мало кто знает, что при этом и Земля падает на яблоко. И еще меньше знают, что движение яблока и Земли удовлетворяет принципу наименьшего действия. Почему? Не потому что яблоко способно падать на Землю, и не потому что Земля способна падать на яблоко, а потому что так устроен мир. Вместо того, чтобы сказать, как говорят физики, – движение тел подчиняется принципу наименьшего действия, мы, как в добрые старые времена наделяем яблоко способностью падать. Поэтому язык заставляет нас в любом действии искать актора, совершающего эти действия (вспомните «дорожки» в BPMN) и результат этих действий (вспомните определение процесса). Почему это мешает нам строить модели? Потому что выбор актора произволен. Мы можем считать, что машина едет по дороге, а можем сказать, что катится колесная пара, а мотор лишь помогает ей ехать. Попытка найти актора приводит к тому, что одно и то же знание о предметной области можно смоделировать разными способами, что, в свою очередь, приводит к противоречиям внутри модели.
Другая причина в том, что аналитики мыслят каждый раз в разных мета-метамоделях. Большинство аналитиков мыслят либо в терминах типов и категорий, (инструмент анализа, придуманный Аристотелем 2500 лет назад и немного устаревший на сегодняшний день), либо в терминах реляционной алгебры (что годится для создания баз данных, но совсем не годится для моделирования предметных областей), либо в терминах ООП (что подходит для моделирования кода, написанного для ООП языков, но совсем не предназначено для моделирования предметных областей). Но очень немного аналитиков способно строить модели в терминах теории множеств – инструмента, специально придуманного для моделирования предметных областей.
Аналитики не умеют моделировать 4-х мерное пространство-время, применяя мета-метамодель, основанную на теории множеств. Например, можно услышать, что действие – это нечто, что делает актор. То есть, по мнению аналитиков актор не является частью действия, а находится снаружи. При этом термин «производит» каждый аналитик понимает индивидуально в меру своего личного опыта. Получается, что есть нечто, что не имеет строгого определения — действие, есть субъект – актор и есть семантическая связь между ними – производит. В четырехмерном пространстве-времени действие – это часть пространственно-временного континуума, актор – часть действия (ее участник – «часть»). Поэтому вместо семантической связи «производит» между операцией и актором отношение «целое-часть». Если моделировать четырехмерные объекты довольно сложно, но еще сложнее моделировать вариабельное будущее (проекты), в которых вариаций гораздо больше. Самым сложным объектом моделирования для меня остается сценарий, в котором будущее – вариабельно, прошлое – известно с какой-то точностью, а нынешнее – это ползунок на шкале времени. Но даже этот очень сложный многомерный объект возможно смоделировать на основе теории множеств.
Следующим препятствием на пути создания метамоделей являются представление многих аналитиков о том, что обо всех объектах известно все и сразу. Например, если мы точно знаем, что данное дерево – дуб, это позволяет нам классифицировать дерево один раз и без ошибок. Однако, может статься, что мы ошибаемся и это дерево – клен. Для создания рабочих моделей нам нужен встроенный в метамодель механизм переклассификации объектов.
Есть знания, которые относятся не к объектам, а к классам объектов. Например, мы знаем, что половина кроликов – белые, а половина – серые. Пока в наших метамоделях не содержится способов моделирования этих знаний.
Модели по сути своей субъективны. Например, если с точки зрения продавца была совершена операция продажи, то с точки зрения покупателя это была операция покупки. Часто можно услышать название такой операции: «купля-продажа». Это попытка посмотреть на одну операцию с разных сторон одновременно – как на продажу и как на покупку. Однако, не всегда это возможно, например, когда мы не знаем все возможные точки зрения на рассматриваемый объект. Реальные модели, чтобы удовлетворить требованию расширяемости должны иметь разные представления с разных точек зрения.
Хотя мы не создаем модели для представления разных точек зрения в явном виде, тем не менее, мы создаем модели с учетом разных точек зрения неявно, даже не замечая этого. Например, построив модель внутреннего и внешнего строения человека, мы строим конструкции человека с двух разных точек зрения. На мой взгляд, стоит сделать эту возможность явной, и позволить аналитикам строить разные конструкции одного и того же объекта с разных точек зрения.
Однобокость нашего мышления проявляется в том, что мы хорошо умеем делать анализ и очень плохо — синтез. Например, разобрать объект на части мы можем, но представить Солнечную систему в виде объекта – уже нет. Поэтому часто можно слышать о моделях декомпозиции (декомпозиция процесса, например), но никогда мы не слышим о композиции объектов, например, о композиции процессов.
О каждом ограничении можно рассказать: причины возникновения его, ограничения и ошибки, к которым они приводят, способы их устранения. В итоге можно пройти по всем из них, устранить ограничения и построить метамодель, которая бы позволила создать классификатор метамоделей и их ограничений. Я намерен постепенно пройтись по каждому ограничению и попытаюсь снять их. Если кто-то найдет ограничения, которые я не описал, будьте добры, сообщите. Я с удовольствием с ними поработаю.
ссылка на оригинал статьи https://habrahabr.ru/post/318874/
Добавить комментарий