Язык UML в своем нынешнем состоянии определяет нотацию и мета-модель. Нотация представляет собой совокупность графических элементов, которые применяются в моделях; она и есть синтаксис данного языка моделирования. Например, нотация диаграммы классов определяет способ представления таких элементов и понятий, как класс, ассоциация и кратность.
Конечно, при этом возникает вопрос точного определения смысла ассоциации, кратности и даже класса. Общепринятое употребление этих понятий предполагает некоторые неформальные определения, однако многие разработчики испытывают потребность в более строгом определении.
Идея строгой спецификации и языков проектирования наиболее распространена в области формальных методов. В таких методах модели и спецификации представляются с помощью некоторых производных средств исчисления предикатов. Соответствующие определения математически строги и исключают неоднозначность. Однако эти определения нельзя считать универсальными. Даже если вы сможете доказать, что программа соответствует математической спецификации, не существует способа доказать, что эта математическая спецификация действительно удовлетворяет реальным требованиям системы.
Большинство графических языков моделирования являются отнюдь не строгими; их нотация в большей степени апеллирует к интуиции, чем к формальному определению. В целом это не выглядит таким уж большим недостатком. Хотя подобные методы могут быть неформальными, многие разработчики по-прежнему считают их полезными, и это нельзя не принимать во внимание.
Однако методологи ищут способы добиться большей строгости методов, не жертвуя при этом их практической полезностью. Один из способов заключается в определении некоторой метамодели - диаграммы (как правило, диаграммы классов), определяющей понятия языка.
На рис. 1.1 изображена небольшая часть метамодели языка UML, которая показывает отношение между свойствами. (Этот фрагмент приведен с единственной целью - дать лишь общее представление о том, что такое метамодель. Я даже не буду пытаться давать здесь какие-либо дополнительные пояснения.)
Насколько велико влияние метамодели на того, кто применяет соответствующую нотацию при моделировании? Ответ зависит, главным образом, от режима работы с языком. Создателя эскизов обычно это не слишком волнует; проектировщика это должно беспокоить значительно больше. И это жизнено важно для тех, кто использует UML в качестве языка программирования, поскольку метамодель определяет абстрактный синтаксис данного языка.
В настоящее время многие люди, вовлеченные в разработку UML, интересуются в основном метамоделью, в частности потому, что она важна при использовании UML и языка программирования. Вопросы нотации часто стоят на втором месте, что важно помнить, если вы собираетесь поближе познакомиться с документацией по стандарту.
Когда вы глубже погрузитесь в изучение UML, то поймете, что вам требуется значительно больше, чем просто графическая нотация. Вот почему инструменты UML так сложны.
В этой книге я не слишком строг. Я предпочитаю традиционные пути и обращаюсь к вашей интуиции. Это естественно для такой маленькой книжки, написанной автором, склонным, в основном, работать в режиме эскизного моделирования. Приверженцам большей строгости следует обратиться к более обстоятельным трудам.