На этом шаге рассмотрим отношение между классами - ассоциацию.
Среди указанных типов отношений ассоциация — наиболее абстрактное и наиболее слабое отношение. Идентификация ассоциаций между классами часто проводится на этапе анализа и ранних стадиях проектирования, когда необходимо обнаружить общие зависимости между абстракциями. На последующих этапах проектирования и реализации системы эти слабые ассоциации часто уточняются и воплощаются в виде одного из более конкретных отношений между классами.
Рассмотрим пример. В описании средства передвижения основными абстракциями являются "транспортное средство" (vehicle) и "колеса" (wheels). Как показано на рис. 1, между классом Wheel и классом Vehicle существует простая ассоциация.
Рис.1. Пример ассоциации
По умолчанию эта ассоциация является двусторонней. Экземпляр класса Wheel должен однозначно идентифицировать соответствующий объект класса Vehicle, и наоборот.
Это пример ассоциации "один-множество" (one-to-many). Каждый экземпляр класса Wheel связан с одним экземпляром класса Vehicle, но, в свою очередь, каждый экземпляр класса Vehicle может содержать несколько объектов класса Wheel (на рис. 1 они обозначены звездочкой).
Как следует из примера, ассоциация лишь обозначает семантическую зависимость, но не указывает ее направления (по умолчанию подразумевается двухсторонняя связь) и не объясняет, как классы связаны друг с другом (их семантику можно только подразумевать, указав роли классов в этих отношениях). Однако на этапе анализа проблемы, когда требуется лишь выявить такие зависимости, этой семантики вполне достаточно. Создавая ассоциации, проектировщик фиксирует участников семантических отношений, а также их роли и количество.
В предыдущем примере рассмотрена ассоциация "один-множество", означающая, что каждый экземпляр класса Vehicle может содержать несколько экземпляров класса Wheel или не содержать ни одного (например, лодка, являющаяся транспортным средством, не имеет колес), в то время как каждый экземпляр класса Wheel связан только с одним экземпляром класса Vehicle. Это свойство называется множественностью ассоциации. На практике существует три разновидности множественности:
Взаимно-однозначное отношение обозначает очень узкую ассоциацию. Например, в розничном телемаркетинге существует взаимно-однозначное отношение: каждая продажа соответствует только одной транзакции с данной кредитной карточкой, а каждая транзакция соответствует только одной продаже. Отношения "множество- множество" также распространены довольно широко. Например, каждый покупатель может инициировать транзакцию с разными продавцами, а каждый продавец может взаимодействовать с несколькими покупателями.
На следующем шаге рассмотрим наследование классов.