Введение
Возможно, кто-то задаст вопрос, а причем тут математика? Отвечу сразу: все, что здесь изложено, относится непосредственно к математике.
Изучая литературу по теории построения моделей предметной области, я обнаружил серьезный пробел. Авторы статей и книг сразу берут одну из нотаций моделирования: ER-диаграммы, или диаграммы классов, и в быстром темпе начинают их использовать для описания предметной области. При этом описание парадигмы, в которой производится это моделирование остается вообще не раскрытым. А следовательно, не раскрытыми остаются ограничения той или иной нотации. Увы, мы все умеем строить модели, но мало кто умеет объяснить то, что он построил в одной из существующих парадигм. Поэтому я часто слышу дикие с точки зрения любой парадигмы термины: класс типов, типы классов, виды типов и так далее, но ни разу не слышал корректный термин «класс классов». Этот пробел в нашем образовании очень серьезен. И я объясню почему.
Давайте зададим аналитикам простой вопрос.
Те, кто моделировал процессы, наверно, знакомы с нотацией BPMN. Очень часто при моделировании операции по заключению договора я встречаю такой фрагмент диаграммы:
Видно, что в результате заключения договора рождается нечто, что передается в другую операцию. Но что обозначает элемент диаграммы в виде листа с загнутым уголком? Нам надо точно знать, что именно передается из одной операции в другую, иначе трудно будет объяснить другим, что от них требуется. Итак, что создается на выходе из операции «Заключить договор»?
Варианты ответов, которые я слышал, следующие:
- Бумажка с печатью
- Бумажки с печатью
- Класс бумажек с печатью
- Договор
- Договоренность
- Информация о договоренности
- Файл MS Word с названием договор
- Запись в базе данных
- Поток каких-то объектов
Пока я наблюдаю отсутствие согласия между аналитиками на предмет того, что же все-таки передается, и что значат термины «договор», «поток», «договоренность», «информация», «данные». Чтобы ответить на этот вопрос, мне пришлось копать глубоко и в сторону парадигм. Причем, ответ потребовал разбиения вопроса на два. Первый вопрос был: «Как корректно сформулировать вопрос?» А второй был: «Как на него ответить?». Для правильной формулировки нужно было выбрать подходящую парадигму. Эта статья посвящена рассказу о двух парадигмах: Аристотелевской и логической, и почему я выбрал логическую в качестве рабочей. Ответа на поставленный вопрос в этой статье я не дам. Ответ я дам в другой статье.
Как мы строим модель сущего?
Посмотрите на рисунок. На нем схематично изображен процесс построения модели сущего.
- Сначала субъект отделяет себя от сущего, затем он выбирает парадигму для моделирования. Парадигма включает в себя предположения о том, как устроено сущее (например, 4-Д пространство-время, заполненное объектами, или 11-мерное пространство – время, заполненное суперструнами и так далее).
- Будем предполагать, что субъект выбрал 4-Д пространство-время, в которое погружены объекты. Парадигма предполагает рассмотрение сущего с определенной точки зрения. Поскольку на предыдущем этапе отбора мы решили рассматривать объекты в пространстве, то мы теперь только их и видим: (например, сущее – есть информационный объект, или сущее – есть функциональный объект и так далее). Затем в соответствии с выбранной парадигмой (объектная) и точкой зрения на объект (функциональный, информационный…) субъект представляет сущее в виде объекта с нужными свойствами и контекстом, в который помещен объект. Это и есть модель, которую построил субъект внутри себя. Если построенная модель не удовлетворяет задачам описания, субъект начинает сначала – снова выбирает парадигму и повторяет цикл. Цикл повторяется до тех пор, пока построенная модель не удовлетворит потребностей субъекта. Данный процесс изначально противоречив, но ничего лучше европейцы не придумали. Ущербность его в том, что субъект отделяет себя от сущего в самом начале моделирования. Это разделение ведет к рекурсиям и противоречиям. Кроме того, многие, если не сказать подавляющее большинство, считают, что их и только их точка зрения является верной, что не позволяет строить множество моделей, отвечающих на разные вопросы. Но в этой статье мы сделаем вид, что мы не замечаем этих противоречий, предположим, что субъект подобен Создателю, и пойдем дальше.
- Далее модель требуется передать другому субъекту. Для этого субъект использует нотацию для записи модели. Он берет нотацию и применяет ее к построенной модели. Полученное представление модели есть фиксация модели.
Таким образом, мы видим, что парадигма, модель и нотация – это то, что находится в сознании субъекта. Мы видим, что сущее, описание парадигмы, описание нотации и представление модели – это то, что находится вне субъекта.
Если мы делаем ДОПУЩЕНИЕ, что мир ДЕЙСТВИТЕЛЬНО состоит из 4-Д пространства-времени и объектов в нем расположенных, то картинку можно перерисовать так:
Особенности парадигм
Для описания мира мы обычно используем две парадигмы: парадигму Аристотеля и логическую парадигму. Обе они покоятся на предположении о том, что мир предметен и представляет из себя 4-Д пространство-время. Но между парадигмами есть различия, которые я должен подчеркнуть.
- Первое отличие между парадигмами, — это отношение к временнОй координате в 4-Д пространстве-времени. Если Аристотель предполагал, что есть объекты, которые проявляют свои свойства во времени, то логическая парадигма считает время такой же координатой как и другие 3, единственное отличие от которых в том, что мы по какой-то причине устроены так, что двигаться можем по этой координате только в одном направлении. Поэтому риторика тех, кто придерживается логики Аристотеля выглядит так: мы создали часы, чтобы они показывали время. Логическая парадигма утверждает, что часы и есть функция показа времени. То есть часы не показывают время, они и есть функция показа времени. По логике Аристотеля предприятие создано, чтобы что-то производить. В логической парадигме предприятие и есть производство чего-то.
- Второе отличие – Аристотель считал, что объекты созданы не нами, а существуют независимо от нашего сознания. Это позволяло предположить наличие типов объектов, данных нам свыше. Логическая парадигма предполагает, что объекты выделяются из пространства-времени произвольным образом исходя из предпочтений субъекта. Например, воздушный шарик – это объект, или пространство, заполненное газом? Что это — решает субъект. Границы объекта тоже определяет субъект. Никто точно не сможет сказать, где проходит граница между туловищем и рукой.
Хорошо, когда парадигма и нотация согласованы. Тогда возможности парадигмы будут полностью использованы. И тогда становится возможным «мышление при помощи записей». То есть, можно будет рисовать представление модели одновременно с ее созданием. Так мыслят многие, когда, например, пишут статьи, рисуют картины, или чертят чертежи.
С парадигмой Аристотеля согласуется моделирование в виде таблиц. Однако связи между таблицами – это то, что Аристотель не планировал. Поэтому нотация ER-диаграмм, хоть и основана на парадигме Аристотеля, но выходит за ее границы. Нотация диаграмма классов также идет за пределы парадигмы Аристотеля и не согласуется с ней. Она служит для моделирования программного кода. В предметном мире вы не найдете ни наследования, ни инкапсуляции. Все эти термины программирования, а не предметной области. Для описания предметной области диаграммы классов и ER-диаграммы подходят, как сказал Левенчук одной из своих статей, между плохо и очень плохо. Многие не знают этих ограничений, и потому считают, что ограничений нет вообще. Это заблуждение лечится только одним способом – изучением логической парадигмы. Для логической парадигмы используется две нотации, описанные в стандарте ИСО 15926.
Существует спор между инженерами и философами. Инженеры часто упрекают философов, что те, мол, занимаются словоблудием. Философы говорят о том, что если бы не их словоблудие, не было бы инженеров. А математики молчат. Но фокус в том, что математика и философия до 20-го века были слиты вместе. Декарт и Кантор – великие философы – математики. Задача была простая. Мало было придумать парадигму, надо было придумать нотацию для передачи моделей в этой парадигме другим гражданам, а также надо было уметь проверить парадигму на непротиворечивость. Решением этой задачи занималась наемница философии – математика. Но в 20-м веке Рассел предположил, что надо отделить математику от философии. Просто потому что математика давала результаты слишком далекие от нашего эмпирического опыта. И вместо того, чтобы постулировать ограниченность нашего опыта, Рассел поступил в духе антропоцентризма, — он предложил более не думать над смыслом математических открытий. Молодец! Мы пожинаем плоды этого разделения сейчас. Теперь мало, кому известны парадигмы и для чего они существуют. Плодятся множество нотаций, оторванных от парадигм, задача которых удовлетворить потребности здесь и сейчас. А то, что они противоречивы и границы их возможностей не описаны, — это мало кого волнует. Жаль, потому что в результате нотации массово используется для построения моделей предметных областей людьми, которые не знают ограничений этих нотаций. Однако, не все так плохо. Есть те, кому это известно. В книге на странице 36-37 написано:
Программные объекты в некотором смысле соответствуют объектам реального мира, но не являются их точными моделями или копиями. Хотя полученная диаграмма классов проектирования не до конца соответствует модели предметной области, некоторые имена классов и их характеристики совпадают. Объектно-ориентированные проектные решения и языки позволяют уменьшить разрыв между представлением информации в виде программных компонентов и ментальными моделями предметной области. Это улучшает образность представления.
Хорошо, когда создаваемые модели удовлетворяют свойствам: полнота (все, что мы хотели сказать, должно присутствовать в модели), непротиворечивость (одна часть описания должна не противоречить другой части), расширяемость (добавление новых данных не должно приводить к возникновению противоречий). Для того, чтобы модель имела указанные свойства, парадигма построения моделей должна позволять это сделать. Парадигма Аристотеля не удовлетворяет требованию непротиворечивости и расширяемости моделей. Именно поэтому на смену Аристотелевской пришла логическая парадигма, основанная на теории множеств.
Построение одной модели более чем для одного объекта
Построив одну модель для одного объекта, можно попробовать посмотреть, насколько она подходит другому объекту. Или так: можно сразу строить модель с учетом того, что она будет описывать много объектов реального мира. Так мы получаем одну универсальную модель для множества объектов одновременно. Это очень облегчает задачу описания реального мира. Мы находим предметы чем-то похожие друг на друга и описываем их одной моделью. Конечно, некоторые индивидуальные черты придется «дописывать» для каждой модели отдельно, но это мелочи по сравнению с индивидуальным описанием каждого объекта отдельно. Именно так мы поступаем, когда создаем чертеж, на основании которого потом может быть создан один функциональный объект, а может и много! Эти объекты образуют множество, или класс. Про любой объект этого класса можно сказать, что чертеж является его моделью. Аристотель использовал другую риторику. Он говорил, что чертеж — есть описание типа объектов. А объекты — есть экземпляры этого типа.
Как поступает сценарист, пишущий сценарий? Он делает сценарий, а будет ли поставлен по нему спектакль и сколько будет в итоге представлений, — он не знает. Сценарий может быть моделью одного выступления, например, празднования Нового 2015 года. Или он может моделировать множество выступлений, как, например, сценарий балета Щелкунчик. Понятно, что сценарий – один, а выступлений – много. В логической парадигме это описание выглядело бы так: есть множество всех выступлений, подмножество этого множества – есть выступления, сделанные на основе сценария «Балет Щелкунчик».
То же самое в парадигме Аристотеля выглядело бы так. Есть объекты — выступления. Любое выступление – есть экземпляр выступления. Есть объекты другого типа – это выступления, сделанные по одному сценарию «Балет Щелкунчик». Любое выступление по этому сценарию – это экземпляр выступления «Балет Щелкунчик». Одно и то же выступление одновременно является экземпляром выступления и экземпляром выступления «Балет Щелкунчик». При этом Аристотель сейчас должен немного заволноваться, потому что он такого не говорил! У него нет того, что один объект может принадлежать разным типам! Это уже наша интерпретация, основанная на моделировании в виде ER-диаграмм. Это и еще много чего не позволяют построить непротиворечивую модель предметной области на основе парадигмы Аристотеля.
Модель информационных объектов
Таким образом, в логической парадигме объектам одного множества может быть поставлена в соответствие одна модель:
Объекты, которые мы описываем одинаковыми моделями, мы называем похожими и относим их к одному классу. Например, класс насекомых, или класс болтовых соединений. Кроме того, одна модель также может быть представлена множеством информационных объектов. Например, одна модель болтового соединения может иметь множество представлений в виде разных листов ватмана с рисунком на нем, в виде зарисовок в тетрадях и так далее. Понятно, что все эти представления используют одну нотацию, но при этом все они разные:
Во всем множестве представлений нас интересуют лишь те, которые сделаны по определенным правилам. Например, мы не хотим рассматривать чертежи, высеченные из камня. Для этого нам надо ввести дополнительные правила, по которым будут создаваться информационные объекты, которые нас устроят. Эти правила составят модель уже самих информационных объектов. Так получается следующая иерархическая структура:
Множество информационных моделей описывается моделью информационных объектов. Модель эта находится в головах и людей. Эта модель порождается в результате применения специальной парадигмы, которая рассматривает объект предметной области как информационный. Потом после применения нотации модель информационных моделей может быть выражена в виде представлений этой модели.
Таким образом, любой объект может иметь модель и ее представление. В свою очередь представление также может иметь свою модель и так до бесконечности. Эта бесконечность — одно из очень серьезных ограничений логической парадигмы. Разрешать это противоречие я не умею. Но честно признаю, что ограничения логической парадигмы есть, и они в том, что рано или поздно нам придется оборвать цепь моделей и сослаться на здравый смысл.
Договор
Если применить построенную конструкцию к нарисованной в самом начале статьи диаграмме, то у нас возникают вопросы: что такое договоренность? Это реальность, или модель реальности? Что такое договор? Что такое листочки с печатями? Что такое файл в формате MS Word? Что такое запись в БД? И что она фиксирует: договор, договоренность, реальность?
Я нарисовал кусок модели, начиная с договоренности, но не расшифровывал, что такое сама договоренность.
Мы видим, что реальная модель предметной области довольно сложна. При этом мы не нарисовали всех подробностей и не нарисовали всех уровней модели, потому что умение работать с MS Word не предполагает знания формата хранения данных. А знание формата хранения данных не означает знание правил управления печатной головкой. И так далее. Есть физические объекты и субъекты, есть информационные объекты и функциональные, и связаны они порой довольно сложными иерархическими связями. Надо учиться эти связи моделировать и передавать другим в качестве знаний.
Например, 7-ми уровневая сетевая модель OSI – есть иерархическая модель физических и информационных объектов.
В сокращенном варианте приведенная модель выглядит так:
И вот это уже узнаваемая конструкция. В ней исключены сущности, которые можно пропустить с точки зрения моделирования данных. Но теперь, глядя на нее, вы знаете о тех связях, которые их связывают. Порой, чтобы построить корректную модель, необходимо знать много больше, чем нарисовано. И моя статья как раз демонстрирует ход мыслей, которые может делать любой, чтобы не ошибиться. Попробуйте порассуждать над любым вопросом в вашей предметной области. Попробуйте задавать вопросы до тех пор, пока не начнете ясно понимать, что вы видите. Иначе будет так:
То, что мы говорим сокращенные фразы, смысл которых определяется контекстом, — это вынужденная мера для выживания. Мы должны иметь возможность быстро изъясняться: Глянь: голодный волк! вместо: Погляди: объект, принадлежащий множеству волков, одновременно принадлежит классу голодных живых существ! Но, употребляя сокращенные фразы, мы не должны забывать об их полном смысле, и должны уметь этот смысл восстанавливать. Однако, пока происходит обратный процесс: используя сокращенные элементы языка, мы все дальше и дальше удаляемся от понимания того, что скрывается за ними.
Когда я еду в деревню, то готовлюсь к празднику слуха. Разговор деревенских полон смысла, оттенков и музыки. Я вижу, что, произнося слова, деревенский житель не просто жонглирует ментальными конструкциями, как это принято в городской среде, он одновременно переживает и образы, скрытые за словами, и погружен всем своим существом в контекст, в котором живут эти образы. Переживание образов и контекста как основы удерживает целостность конструкций, и не дает повода для возникновения противоречий.
В отличие от деревенского, городской житель, наученный восприятию слов в отрыве от контекста, может использовать стандартные языковые шаблоны. Это приводит к потере сначала контекста, а потом и размытию смысла самих слов. Отрыв слов от контекста не позволяет удержать целостность и непротиворечивость конструкций. В итоге происходит подлог: набор языковых паттернов подменяет знание. Поскольку слушателями такого человека часто являются такие же как и он, — неспособные одновременно удерживать в сознании и смысл и контекст, то этот фокус проходит. Я встречаю мастеров жонглирования словами. Это те, кто умеют менять контекст, и в соответствии с этим менять языковые паттерны: психотерапевты, учителя, мошенники и хорошие политики, хорошие аналитики. А вот плохие учителя, например, не понимают в чем секрет такой гибкости и умеют лишь имитировать действия хороших. Секрет прост – переживание контекста дает возможность сохранять целостность, а умение менять контекст, дает возможность творить.
Вернемся к вопросу, заданному в начале статьи. Я спросил, что моделирует тот элемент с отогнутым уголком? Я оставлю этот вопрос открытым. Попробуйте сами корректно поставить вопрос и подумать над ответом.
Автор: maxstroy