На этом шаге рассмотрим классы ассоциаций и примечания.
Рассмотрим пример, продемонстрированный на рис. 1.
Рис.1. Ограничения
На нем показана ассоциация "множество-множество" между классами Crop (Растение) и Nutrient (Питание). Это значит, что урожай каждого растения зависит от N видов удобрений, а каждое удобрение может использоваться для выращивания N растений.
Класс NutrienSchedule (РасписаниеПодкормки) на самом деле представляет свойство отношения "множество-множество", экземпляр которого является конкретным отображением урожай-удобрения. Для выражения этого семантического факта от ассоциации Crop-Nutrient (снабженной атрибутами) проведена пунктирная линия к классу NutrienSchedule (атрибут ассоциации). Каждая ассоциация должна иметь по крайней мере один такой атрибут, называемый классом ассоциаций (association class), а имя такой ассоциации должно совпадать с именем класса, используемого в качестве атрибута.
Сама идея снабжать ассоциации атрибутами является обобщением. В частности, в ходе анализа и проектирования существует огромное количество на первый взгляд случайных предположений и решений, собираемых разработчиками.
Впоследствии многие из этих идей теряются из-за отсутствия удобного места для их хранения. Таким образом, полезно дополнить элементы диаграмм примечаниями, описывающими предположения и проектные решения. На рис. 1 показаны два таких примечания. Примечание, сопровождающее класс NutrientSchedule, сообщает нечто об ожидаемой уникальности его экземпляров. Другое примечание, соответствующее классу Nutrient, отражает ожидания разработчиков, которые заключаются в том, что атрибут unitCost (стоимость единицы) будет запрашиваться из базы данных.
Для изображения таких примечаний используются пиктограммы в виде блокнотного листка, которые соединяются с соответствующим элементом с помощью пунктирной линии. В зависимости от используемого программного обеспечения содержание примечаний может быть любым, включая текст, фрагменты кода или ссылки на другие документы. Примечание, относящееся к диаграмме в целом, не соединяется ни с одним ее элементом.
На следующем шаге рассмотрим понятие классификатора.