Метамоделирование

завершено на 75%
Материал из Викиучебника — открытых книг для открытого мира

Журнал Потенциал

Аннотация[править]

Это небольшая статья, следует признать, носит несколько рекламный характер. Рекламируется «метамоделирование», которое, с одной стороны, есть деятельность человека по созданию глубоких формальных описаний предметных областей, а с другой стороны, представляет собой новый принцип организации (хранения) данных в компьютерных приложениях.

Метамоделирование, в отличие от многих раскрученных технологий, действительно имеет обоснование (логическое, математическое, общефилософское) быть принятой на вооружение, и поэтому авторам не так стыдно за этот рекламный текст.

История термина[править]

Это слово не совсем обычное. Оно активно используется в англоязычных текстах в целой серии значений со множеством смысловых оттенков.

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

15 лет назад смысл этого термина был более прозрачным. Его использовал узкий круг людей, работающих в самых разных областях — самолётостроении, химической промышленности, программировании, управлении и автоматизации бизнеса. Эти люди вдруг осознали, что занимаются одним и тем же видом деятельности — созданием точного формального описания некоторой предметной области. Необходимо было решать насущные проблемы, связанные с преодолением сложности — сложности конструирования и моделирования самолётов, сложности организации данных, сложности управления многоуровневой и активно растущей организацией, сложности классификации и структуризации огромного архива взаимосвязанных фактов.

Описания строились с целью автоматизировать или упростить тот или иной аспект деятельности; навести порядок, структурировать, но сохранить определённый уровень гибкости и расширяемости.

Общее накопившееся желание было сделать это раз и навсегда, чтобы никогда больше не возвращаться к вопросу реорганизации и переделки.

Метамоделирование долгое время имело ряд других имён — семантическое моделирование, описание на основе расширенной схемы, просто описание или формализация предметной области.

Метамоделирование в примерах[править]

Для начала приведём короткие определения.

Метамоделирование — это процесс создание метамоделей.

Метамодели — это средства построения моделей (например, формальные языки или графические нотации для описания структуры классов, свойств и связей).

Модели — это описание структуры данных (например, информация о том какие есть свойства и связи между объектами).

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

Основная цель метамоделирования — описать данные настолько глубоко, чтобы они были самодостаточными и допускали расширение и модификацию своей структуры. Аналогичным свойством хотелось бы наделить и софт, работающий с данными. При метамоделировании это происходит автоматически. Софт, основанный на метамоделировании, гибок, так как он написан не для конкретного случая данных, с конкретной структурой и с фиксированными зависимостями, а работает в общем случае. Информацию о структуре данных он читает из модели и метамодели, и автоматически подстраивается под них.

Приведём пример.

Шаг 1: описываем данные[править]

Пусть мы описываем генеалогическое дерево. Для этого достаточно завести список людей и указать для каждого родителей и годы жизни.

Естественно для этого использовать таблицу:

Человек Годы жизни Мать Отец Пол
 

Шаг 2: описываем модель[править]

Но для увеличения глубины и подробности описания, удобно указать, что у людей есть «пол», равный М или Ж, ввести выводимые отношения «родитель», «дочь», «сын», «бабушка», «племянник»… и указать ограничения на эти отношения. Это удобно потому, что оказывается необходимым при работе с данными, выполнении запросов к данным и поддержки их корректности (консистентности).

Отношение «родитель», направленное от узла к узлу подразумевает, что узел связан с либо отношением «дочь», либо отношением «сын», причём это непосредственно зависит от значения атрибута «пол» узла . Другим очевидным условием является требование, чтобы один узел был связан не более, чем с двумя другими узлами отношением «родитель», причём атрибут «пол» у этих узлов должен различаться. Ясно также, что один и тот же человек не может быть одновременно для кого-то матерью, а для кого-то отцом.

Таким образом, кроме самих данных о родстве людей можно описать, какие бывают отношения между людьми и какие на них накладываются ограничения. Нужно определиться, какие отношения непосредственно задаются пользователем, а какие выводятся из них.

Ограничения на данные (условия консистентности данных) включают в себя указание того, какие значения могут принимать атрибуты узлов, какие отношения могут устанавливаться между узлами, каково минимальное и максимальное число отношений определённого типа, в котором может участвовать один узел, а также другие типы условий.

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

Примечание. Термин метаданные иногда используют как синоним модели данных. Но правильнее считать, что это разные вещи.

Метаданные — это просто дополнительная информация, например, некоторый заголовок, прикрепляемый к документу, с информацией об источнике данных, авторе, категории документа, времени создания и тому подобном. Метаданные не содержат информации о структуре данных и ограничениях, накладываемых на данные. Это просто атрибуты, позволяющие идентифицировать и классифицировать блоки данных.

Действительно, проверку условий консистентности данных можно было бы поручить программисту, который бы «захардкодил» все эти условия в программный код приложений. Правда, если условия консистентности изменятся, то программиста придётся снова привлекать к работе. Это неприятно. Но от этой неприятности несложно избавится.

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

Автоматизация проверки и поддержки консистентности — это уже кое-что.

Итак, при хранении данных полезно также в некотором формальном виде хранить и описание их модели. Это очевидно и обсуждению не подлежит.

Но оказывается, можно сделать ещё один шаг.

Шаг 3: описываем метамодель[править]

Получившаяся модель данных для описания родства людей довольно сложна. Одной табличкой здесь не отделаешься.

Вот попытка описать некоторые куски модели:

  • Есть класс людей.
  • Между людьми есть отношение «родитель».
  • У людей есть свойства «пол», «дата рождения» и «дата смерти».
  • ( есть родитель ) ( имеет пол «Ж») есть мать .
  • ( есть родитель ) ( имеет пол «М») есть сын .
  • Число родителей .

Часть данных модели является просто объявлением наличия класса, связи или свойства. Часть данных модели удобно выражается в виде правил.


Обратите внимание на то, что здесь мы использовали словосочетание «данные модели». Модель хоть и является моделью, но после формальной записи превращается в множество данных, и для этих данных также естественно задать модель. Эта модель и называется метамоделью. Итак

Метамодель — это модель данных для описания данных модели данных.

Примечание. Масло масляное, но тут уж ничего не поделаешь. При описании таких тонких материй как метамоделирование, приходится активно работать с языком. Русский язык позволяет делать чудеса — сам он является замечательной метамоделью, которая объединяет множество предметных областей и позволяет записать самые разные знания, накопленные человечеством. Вот бы найти что-нибудь подобное по мощи, но более формальное и интерпретируемое компьютером!

Приставка мета- практически всегда имеет относительный характер и зависит от угла рассмотрения.

Итак, описание модели состоит из разнородной информации, которую неплохо было бы формализовать.

Надо придумать подходящий формальный язык. Например, можно ввести несколько таблиц: таблицу со списком всех классов, присутствующих в нашей модели, таблицу со списком всех отношений, таблицу с описанием правил. Ещё нужно что-то придумать для описания свойств типа «Число родителей ».

Возможно, имеет смысл разработать какой-нибудь формальный язык, где всю информацию о модели записать в виде набора инструкций? Например,

new_class "man";
"man" has_relation "parent"   # stands for "is parent of"
"man" has_relation "mother"   # stands for "is mother of"
…
"man" has_property "sex"
…
(X parent Y) && (X sex "female")                  => X mother Y
(X parent Y) && (Y sex "male"  )                  => Y son    X
(Z parent X) && (Z parent Y) && (X sex "female")  => X sister Y

Здесь сущности man, parent, mother, father, son описываются с помощью специальных слов (служебных термов) new_class, has_relation, has_property. А эти три слова уже никак не описываются. Они и есть составляющие метаметамодели. В использованной нами метаметамодели предполагается, что модель состоит из классов и определённых на них свойствах и отношениях. Метаметамодель задаёт, как устроены данные в самом общем случае. Наличие метамодели позволяет нам оперативно (не переписывая программы и не перестраивая хранилище данных) расширять модель.

Например,

"man" has_relation "friend"
new_class "company"
new_link "works_in" from "man" to "company"

Но можно пойти далее и поднять уровень мета-описания (подняв на соответствующий уровень и софт, работающий с данными), а именно, дать описание служебных термов:

new_class "class"
new_class "relation"
new_class "property"
new_link "has_relation" from "class" to "relation"
new_link "has_property" from "class" to "property"

Смысл конструкций

new_class X
new_link X from Y to Z

можно зафиксировать и написать софт общего назначения, который изначально умеет интерпретировать эти конструкции. При этом, чтобы заставить софт общего назначения делать конкретные вещи, потребуется его настроить — дать описание модели его действий, указать, какие данные и как он должен интерпретировать.

Это сложный момент.

Надежды, возлагаемые на метамоделирование[править]

«Лучше день потерять, а потом за пять минут долететь» [1] — так коротко можно выразить основную надежду, возлагаемую на метамоделирование.

Надежда заключается в том, что метамоделирование позволит нам летать — быстро и в общем случае решать возникающие проблемы и легко расширять систему. Также есть вполне обоснованная надежда, что моделирование позволит

  • сделать данные более семантически насыщенными,
  • явно выразить (формально описать) скрытую семантику структуры данных.

Эти свойства необходимы для расширения возможностей интерпретации данных компьютерными программами.

Семантика — это волшебное слово, непосредственно связанное с метамоделированием. Оно означает скрытое (в обычных базах данных) смысловое значение данных.

Введя отношения «friend», «sister», «parent»… мы ничего не написали про их смысл. И хоть компьютер стал «понимать», что такие отношения есть, и они устанавливаются между экземплярами класса «man», он всё же знает про них не всё. Возможно, есть ещё кое-что, во что мы хотели бы посвятить компьютер?

Нет, мы не хотим, чтобы компьютер был как человек и разбирался во всех тонкостях человеческих отношений. И нам не нужен искусственный интеллект с мощью естественного интеллекта.

Но кое-чему научить компьютер хочется.

На практике возникают хитрые задачи, где семантика играет ключевую роль: анализ кредитной истории, анализ неисправностей в машине, анализ и классификация текстов на естественном языке, принятие решений по управлению бизнесом — при автоматизации решений этих задач естественным образом всплывает необходимость описывать очень сложные и тонкие вещи. Более того, описав их, нужно суметь построить автоматическую систему, использующую эти данные.

И здесь пригодится гибкость, расширяемость и глубина описания данных, достигаемая при метамоделировании.

Почему метамоделирование такое популярное?[править]

Во-первых, просто пришло его время.

Особенно хорошо это чувствуют программисты и аналитики. Решая по десять раз одну и ту же проблему, возникающую то в одной, то в другой ситуации, невольно задумаешься — а нельзя ли системно подойти к её решению, чтобы она уже никогда не возникала и не принимала новые но всё же легко узнаваемые формы.

Метамоделирование — это способ обобщения решений и возможностей.

Решая проблему, лучше решить её не в частном, а в общем случае. Трудозатрат будет несколько больше, но в перспективе это окупится с лихвой.

Добавляя в систему какую-то возможность, лучше постараться её обобщить и добавить в систему не специальную единичную фичу, а принципиально расширить класс возможностей. Будьте уверены — они понадобятся в будущем.

Безусловно, увлекаться поиском универсальных и общих решений не нужно. Как и везде, здесь достигается разумный баланс между универсальными сложными и простыми частными решениями.

Раньше, когда задавали вопрос «А нужна ли настолько многоуровневая модель данных?», ответ был неоднозначен. Модель, безусловно, нужна. Но программ, работающих на надлежащем уровне — на уровне метамодели — не было. Софт, теория и технологии метамоделирования не были развиты. Но сегодня ситуация изменилась, и ответ на вопрос однозначен:

«Метамоделируйте на здоровье! Вот вам софт, а вот тщательно продуманная парадигма.»

Во-вторых, метамоделирование — это фундаментальный, давно известный принцип, описанный и используемый в философии, математике, естествознании, который просто получил новое имя и обрёл новую жизнь.

Метамоделирование всегда являлось основой всякого рода интеграции и обобщения (даже если этот термин явно не использовался).

Сегодня метамоделирование стало важным шагом при решении задач интеграции бизнеса и данных, создании долгоживущих, сложных, расширяемых систем.

Рассмотрим два важных свойства, относящихся к математике и философии, на которых базируется метамоделирование.

  • Замкнутость. Замкнутость означает, что осуществляя действия в выбранной формальной модели, мы не выйдем за её пределы и нам не встретятся неформализуемые (неописываемые) объекты.
  • Полнота. Полнота выбранной формальной системы означает, что в её рамках можно описать (задать, смоделировать) все объекты из рассматриваемого множества.

В переложении на область компьютерных технологий эти свойства следует читать так: софт имеет тщательно проработанную архитектуру и метамодель организации данных и в результате:

  • все возникающие задачи решаются в рамках этого софта,
  • созданные вами в рамках этого софта данные и модели прозрачны (являются родными) для софта и могут интерпретироваться.

Перспективы[править]

Выражения «metamodel-driven software» сейчас уже воспринимается как единственный путь достижения нужного уровня

  • расширяемости (адаптивности),
  • универсальности (общности).

Термин метамоделирование встречается в сочетании с программами автоматизации бизнеса, компьютерными технологиями и в индустрии. И приятно, что метамоделирование обещает не только функциональные, но и дешёвые решения.

Дорогие и сомнительные удовольствия уже не прельщают современных бизнесменов.

Путь внедрения технологий метамоделирования в бизнесе не только обозначен, но и в значительной степени пройден. Остаётся только ждать, когда плод дозреет и будет готов к употреблению.

См. также[править]

Ссылки[править]