виде пунктирной стрелки с треугольником на конце, направленной от реализующей
сущности к реализуемой.
Перечисленные типы отношений являются основными, различные их вариации и
дополнительные отношения детально рассматриваются в последующих главах.
О важности правильных обозначений
Нельзя не отметить тщательность выбора графической нотации в UML.
Если основные принципы поняты, то обозначения оказываются вполне
естественными. Рассмотрим, например, нотацию отношений. Два типа
линий подчеркивают степень определенности семантики, привносимой
отношением в модель. Ассоциация и обобщение имеют четко
определенную семантику, по которой можно прямо генерировать код,
поэтому и линии сплошные. Зависимость и
реализация более
расплывчаты — линии используются пунктирные. Далее, направления
стрелок тоже выбраны не случайным, а единственно правильным
образом. Независимая сущность может и не знать, что ее использует
другая сущность, а вот зависимая сущность не может не знать, от чего
она зависит. Эта аналогия уместна и для обобщения и реализации.
Например, описывая
наследование (которое часто реализуется
указателем в наследующем классе на наследуемый класс) в
большинстве языков программирования имя наследуемого класса
появляется в заголовке наследующего, и направление указателя
становится явно видным. То же относится и к дополнительным
элементам стрелок: обобщение и реализация имеют много общего,
поэтому и наконечники стрелок у них одинаковые.
При рассмотрении
последующих (более детальных и содержательных)
примеров нотации читателю было бы полезно задавать себе вопрос:
"почему выбрано такое обозначение?" до тех пор, пока сам собой не
появится ответ: "а как же иначе!".
1.5. Диаграммы
Предыдущий параграф преследует примерно те же цели, какие имеет описание
лексики в обычном языке программирования. А именно, мы обрисовали (еще не
полностью, но уже достаточно) множество слов UML (лексем, графических
примитивов — называйте как хотите — фиксированного термина нет). Пора
переходить к синтаксису, а именно к описанию того, как из слов конструируются
предложения.
На первый взгляд, все очень просто: берутся сущности и, если нужно, указываются
отношения между ними. В результате получается модель, то есть граф (с
разнородными вершинами и ребрами), нагруженный дополнительной
информацией. Но при более внимательном рассмотрении обнаруживаются
проблемы. Мы хотим затратить некоторые усилия на обсуждение этих проблем,
иначе целый ряд особенностей UML может показаться висящим в воздухе, хотя на
самом деле, эти особенности и есть продуманное решение замалчиваемых обычно
проблем.
Рассмотрим следующую аналогию с естественным языком. Каждая тройка
сущность — отношение — сущность в модели вполне может рассматриваться как
простое утверждение: 2<5, ртуть тяжелее железа, Ф.А. Новиков является
сотрудником Политехнического университета (все это примеры отношений). Пока