Метамоделирование: различия между версиями
Содержимое удалено Содержимое добавлено
Нет описания правки |
Объединены абзацы, заменены кавычки, прочие правки. |
||
Строка 1:
== Аннотация ==
Это небольшая статья, следует признать, носит несколько рекламный характер. Рекламируется «метамоделирование», которое, с одной стороны, есть деятельность человека по созданию ''глубоких'' формальных описаний предметных областей, а с другой стороны, представляет собой новый принцип организации (хранения) данных в компьютерных приложениях.
Метамоделирование, в отличие от многих раскрученных технологий, действительно имеет обоснование (логическое, математическое, общефилософское) быть принятой на вооружение, и поэтому
== История термина ==
Это слово не совсем обычное. Оно активно используется в англоязычных текстах в целой серии значений со множеством смысловых оттенков.
И все эти значения любопытны, так как включают в себя элемент мистической, но бесспорной возможности получить необходимое решение в общем виде, добраться до сути, воплотить идеальные представления об организации данных в нечто материальное и работающее.
15 лет назад смысл этого термина был более прозрачным. Его использовал узкий круг людей, работающих в самых разных областях — самолётостроении, химической промышленности, программировании, управлении и автоматизации бизнеса. Эти люди вдруг осознали, что занимаются одним и тем же видом деятельности — созданием точного формального описания некоторой предметной области. Необходимо было решать насущные проблемы, связанные с преодолением сложности — сложности конструирования и моделирования самолётов, сложности организации данных, сложности управления многоуровневой и активно растущей организацией, сложности классификации и структуризации огромного архива взаимосвязанных фактов.
Описания строились с целью автоматизировать или упростить тот или иной аспект деятельности; навести порядок, структурировать, но сохранить определённый уровень гибкости и расширяемости.
Общее накопившееся желание было сделать это раз и навсегда, чтобы никогда больше не возвращаться к вопросу реорганизации и переделки.
Метамоделирование долгое время имело ряд других имён — семантическое моделирование, описание на основе расширенной схемы, просто описание или формализация предметной области.
== Метамоделирование в примерах ==
Для начала приведём короткие определения.
Строка 33 ⟶ 28 :
графические нотации для описания структуры классов, свойств и связей).
Модели
какие есть свойства и связи между объектами).
Данные — это множество простейших единиц информации, которые касаются не абстрактных,
[[Изображение:Уровни модели данных.jpg]]
Основная цель метамоделирования — описать данные настолько глубоко, чтобы они были ''самодостаточными'' и допускали расширение и модификацию своей структуры. Аналогичным свойством хотелось бы наделить и [[w:Программное обеспечение|софт]], работающий с данными. При метамоделировании это происходит автоматически. Софт, основанный на метамоделировании, гибок, так как он написан не для конкретного случая данных, с конкретной структурой и с фиксированными зависимостями, а ''работает в общем случае''. Информацию о структуре данных он читает из модели и метамодели, и автоматически подстраивается под них.
Приведём пример.
===
Пусть мы описываем [[w:Генеалогическое дерево|генеалогическое дерево]]. Для этого достаточно завести список людей и указать для каждого родителей и годы жизни.
Естественно для этого использовать таблицу:
Строка 58 ⟶ 47 :
{| class="standard"
! Человек || Годы жизни || Мать || Отец || Пол
|-
|}
Чего же более? Простые задачи должны иметь простые решения.
===
Но для увеличения глубины и подробности описания, удобно указать, что у людей есть «пол», равный М или Ж, ввести выводимые отношения «родитель», «дочь», «сын», «бабушка», «племянник»… и указать ограничения на эти отношения. Это удобно потому, что оказывается необходимым при работе с данными, выполнении запросов к данным и поддержки их корректности (консистентности).
Отношение «родитель», направленное от узла <math>X</math> к узлу <math>Y</math> подразумевает, что узел <math>Y</math> связан с <math>X</math> либо отношением «дочь», либо отношением «сын», причём это непосредственно зависит от значения атрибута «пол» узла <math>X</math>. Другим очевидным условием является требование, чтобы один узел был связан не более, чем с двумя другими узлами отношением «родитель», причём атрибут «пол» у этих узлов должен различаться. Ясно также, что один и тот же человек не может быть одновременно для кого-то матерью, а для кого-то отцом.
Таким образом, кроме самих данных о родстве людей можно описать, какие бывают отношения между людьми
Ограничения на данные (условия консистентности данных) включают в себя указание того, какие значения могут принимать атрибуты узлов, какие отношения могут устанавливаться между узлами, каково минимальное и максимальное число отношений
Эту дополнительную информацию в данном случае следует называть '''моделью данных'''. Имея эту информацию и записав её в формальном виде, мы можем осуществить автоматическую проверку наших данных — обнаружить места, где информация не полна (например, отсутствует информация о матери) или некорректна (указано больше двух родителей).
<blockquote>
Примечание. Термин [[w:Метаданные|метаданные]] иногда используют как синоним модели данных. Но правильнее считать, что это разные вещи.
Метаданные — это просто дополнительная информация, например, некоторый заголовок, прикрепляемый к документу, с информацией об источнике данных, авторе, категории документа, времени создания и
</blockquote>
Действительно, проверку условий консистентности данных можно было бы поручить программисту, который бы «захардкодил» все эти условия в программный код приложений. Правда, если условия консистентности изменятся, то программиста придётся снова привлекать к работе. Это неприятно. Но от этой неприятности несложно избавится.
Достаточно разработать язык (нотацию, формат) описания модели данных и разработать такой софт, который бы зачитывал эту модель и брал из неё описание структуры данных и условия консистентности данных. В следующий раз вы сами сможете менять модель данных и софт автоматически «подстроится» под изменившуюся модель.
Автоматизация проверки и поддержки консистентности — это уже кое-что.
Итак, при хранении данных полезно также в некотором формальном виде хранить и описание их модели. Это очевидно
Но оказывается, можно сделать ещё один шаг.
===
Получившаяся модель данных для описания родства людей довольно сложна. Одной табличкой здесь не отделаешься.
Вот попытка описать некоторые куски модели:
Часть данных модели является просто объявлением наличия класса, связи или свойства. Часть данных модели удобно выражается в виде правил.
<!-- Возможно, далее неоконченное предложение -->
<!-- Некоторые -->
Обратите внимание на то, что здесь мы использовали словосочетание
{{рамка}}
Метамодель — это модель данных для описания данных модели данных.
{{акмар}}
<blockquote>
Примечание. Масло масляное, но тут уж ничего не поделаешь. При описании таких тонких материй как метамоделирование, приходится активно работать с языком. Русский язык позволяет делать чудеса — сам он является замечательной метамоделью, которая объединяет множество предметных областей и позволяет записать самые разные знания, накопленные человечеством. Вот бы найти что-нибудь подобное по мощи, но более формальное и интерпретируемое компьютером!
</blockquote>
Приставка
Итак, описание модели, которую мы имеем, состоит из разнородной информации, которую неплохо было бы формализовать.
Надо придумать подходящий формальный язык. Например, можно ввести несколько таблиц: таблицу со списком всех классов, присутствующих в нашей модели, таблицу со списком всех отношений, таблицу с описанием правил. Ещё нужно что-то придумать для описания свойств типа «Число родителей <math>X \leqslant 2</math>».
Возможно, имеет смысл разработать какой-нибудь формальный язык, где всю информацию о модели записать в виде набора инструкций? Например,
<code>new_class "man";
"man" has_relation "parent" # stands for "is parent of"
"man" has_relation "mather" # 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</code>
Здесь сущности <code>man</code>, <code>parent</code>, <code>mother</code>, <code>father</code>, <code>son</code> описываются с помощью специальных слов (служебных термов) <code>new_class</code>, <code>has_relation</code>, <code>has_property</code>. А эти три слова уже никак не описываются. Они и есть составляющие метаметамодели. В использованной нами метаметамодели предполагается, что модель состоит из классов и определённых на них свойствах и отношениях. Метаметамодель задаёт, как устроены данные в самом общем случае. Наличие метамодели позволяет нам оперативно (не переписывая программы и не перестраивая хранилище данных) расширять модель.
Например,
<code>"man" has_relation "friend"
new_class "company"
new_link "works_in" from "man" to "company"</code>
Но можно пойти далее и поднять уровень мета-описания (подняв на соответствующий уровень и софт, работающий с данными), а именно, дать описание служебных термов:
<code>new_class "class"
new_class "property"
new_link "has_relation" from "class" to "relation"
new_link "has_property" from "class" to "property"</code>
Смысл конструкций
<code>new_class X
new_link X from Y to Z</code>
можно зафиксировать и написать софт общего назначения, который изначально умеет интерпретировать эти конструкции. При этом, чтобы заставить софт общего назначения делать конкретные вещи, потребуется его настроить — дать описание модели его действий, указать, какие данные и как он должен интерпретировать.
Это сложный момент.
== Надежды, возлагаемые на метамоделирование ==
«Лучше день потерять, а потом за пять минут долететь» [http://ru.wikiquote.org/wiki/%D0%9A%D1%80%D1%8B%D0%BB%D1%8C%D1%8F%2C_%D0%BD%D0%BE%D0%B3%D0%B8_%D0%B8_%D1%85%D0%B2%D0%BE%D1%81%D1%82%D1%8B_%28%D0%BC%D1%83%D0%BB%D1%8C%D1%82%D1%84%D0%B8%D0%BB%D1%8C%D0%BC%29] — так коротко можно выразить основную надежду, возлагаемую на метамоделирование.
Надежда заключается в том, что метамоделирование позволит нам летать — быстро и в общем случае решать возникающие проблемы и легко расширять систему. Также есть вполне обоснованная надежда, что моделирование позволит
* сделать данные более семантически насыщенными,
* явно выразить (формально описать) скрытую [[w:Семантика|семантику]] структуры данных.
Эти свойства необходимы для расширения возможностей интерпретации данных компьютерными программами.
'''Семантика''' — это волшебное слово, непосредственно связанное с метамоделированием. Оно означает скрытое (в обычных базах данных) смысловое значение данных.
Введя отношения «friend», «sister», «parent»… мы ничего не написали про их смысл. И хоть компьютер стал «понимать», что такие отношения есть, и они устанавливаются между экземплярами класса «man», он всё же знает про них не всё. Возможно, есть ещё кое-что, во что мы хотели бы посвятить компьютер?
Нет, мы не хотим, чтобы компьютер был как человек и разбирался во всех тонкостях человеческих отношений. И нам не нужен искусственный интеллект с мощью естественного интеллекта.
Но кое-чему научить компьютер хочется.
На практике возникают хитрые задачи, где семантика играет ключевую роль: анализ [[w:Кредитная история|кредитной истории]], анализ неисправностей в машине, анализ и классификация текстов на естественном языке, принятие решений по управлению бизнесом — при автоматизации решений этих задач естественным образом всплывает необходимость описывать очень сложные и тонкие вещи. Более того, описав их, нужно суметь построить автоматическую систему, использующую эти данные.
И здесь пригодится гибкость, расширяемость и глубина описания данных, достигаемая при метамоделировании.
== Почему метамоделирование такое популярное? ==
'''Во-первых,''' просто пришло его время.
Особенно хорошо это чувствуют программисты и аналитики. Решая по десять раз одну и ту же проблему, возникающую то в одной, то в другой ситуации, невольно задумаешься — а нельзя ли системно подойти к её решению, чтобы она уже никогда не возникала и не принимала новые но всё же легко узнаваемые формы.
Метамоделирование — это способ обобщения решений и возможностей.
Решая проблему, лучше решить её не в частном, а в общем случае. Трудозатрат будет несколько больше, но в перспективе это окупится с лихвой.
Добавляя в систему какую-то возможность, лучше постараться её обобщить и добавить в систему не специальную единичную фичу, а принципиально расширить класс возможностей. Будьте уверены — они понадобятся в будущем.
Безусловно, увлекаться поиском универсальных и общих решений не нужно. Как и везде, здесь достигается разумный баланс между универсальными сложными и простыми частными решениями.
Раньше, когда задавали вопрос «А нужна ли настолько многоуровневая модель данных?», ответ был неоднозначен. Модель, безусловно, нужна. Но программ, работающих на надлежащем уровне — на уровне метамодели — не было. Софт, теория и технологии метамоделирования не были развиты. Но сегодня ситуация изменилась, и ответ на вопрос однозначен:
'''Во-вторых,''' метамоделирование — это фундаментальный, давно известный принцип, описанный и используемый в философии, математике, естествознании, который просто получил новое имя и обрёл новую жизнь.
Метамоделирование всегда являлось основой всякого рода интеграции и обобщения (даже если этот термин явно не использовался).
Сегодня метамоделирование стало важным шагом при решении задач интеграции бизнеса и данных,
Рассмотрим два важных свойства, относящихся к математике и философии, на которых базируется метамоделирование.
*
*
В переложении на область компьютерных технологий эти свойства следует читать так: софт имеет тщательно проработанную архитектуру и метамодель организации данных и в результате
* все возникающие задачи решаются в рамках этого софта
* созданные вами в рамках этого софта данные и модели прозрачны (являются родными) для софта и могут интерпретироваться.
== Перспективы ==
Выражения «metamodel-driven software» сейчас уже воспринимается как единственный путь достижения нужного уровня
* расширяемости (адаптивности),
* универсальности (общности).
Термин ''метамоделирование'' встречается в сочетании с программами автоматизации бизнеса, компьютерными технологиями и в индустрии.
И приятно, что метамоделирование обещает не только функциональные, но и дешёвые решения.
Строка 282 ⟶ 224 :
Путь внедрения технологий метамоделирования в бизнесе не только обозначен, но и в значительной степени пройден. Остаётся только ждать, когда плод дозреет и будет готов к употреблению.
== См. также ==
* [[w:Модель данных|Модель данных]]
* [[w:Метамоделирование|Метамоделирование]]
Строка 288 ⟶ 231 :
[[Категория:Журнал «Потенциал»]]
== Ссылки ==
* http://metamodel.org
* [http://www.w3.org/2001/sw Проект SemanticWeb]
|