#uml #class-diagram
Вопрос:
Если у меня есть два класса и между ними существуют два типа отношений-например, композиция и зависимость, — что нам делать? Добавляем ли мы два символа отношений между классами?
Пример: Предположим, что первый класс есть BookFestival
, а другой класс есть Book
. Book
имеет метод регистрации на фестиваль:
- 1-е отношение: композиция если нет книги, то нет и книжного фестиваля
- 2-е отношение: Зависимость если мы изменим дату проведения фестиваля, это повлияет на класс книги
Ответ №1:
Если бы у вас было 10 различных типов отношений между двумя классами, вы могли бы показать все 10 отношений, если они полезны.
Возьмем, к примеру Book
, и Author
:
- В книге может быть несколько авторов, и автор может написать/внести свой вклад в несколько книг. Это ассоциация «многие ко многим».
- В то же время
Book
может быть проведена операция по добавлениюAuthor
в свой список. Таким образом, существует«use»
зависимость отBook
toAuthor
.
Теоретически мы могли бы указать на эти две взаимосвязи. Однако, когда есть связь, мы предполагаем, что существует зависимость: даже без операции Book
необходимо знать о ней Authors
. На практике мы явно не указываем на такую неявную зависимость.
Возьмем в качестве еще одного примера Employee
и Department
:
- У A
Department
есть несколькоEmployee
, которые выполняют рольmember
департамента. - У
Department
А есть также тотEmployee
, который играет особую рольmanager
.
Мы бы указали на эти два отношения, поскольку оба они соответствуют другому виду отношений, и ни одно из них не подразумевает другое.
Последнее важное замечание: используйте состав редко. В вашем примере BookFestival
книга не сделана из Books
, а книги существуют без BookFestival
нее . Кроме того, книги могут быть представлены на нескольких фестивалях. Это означает, что нет исключительного права собственности на книги по фестивалям и, следовательно, нет композиции. И наоборот, a Book
не состоит из BookFestivals
, и книжный фестиваль посвящен более чем одной книге. Это означает, что нет исключительного права собственности в противоположном направлении, следовательно, нет состава между ними.
Ответ №2:
Чтобы исправить ответ Кристофа:
например, состав и зависимость
В этом случае все просто: зависимость-это самая слабая связь между классами. Все, что сильнее, просто наследует зависимость. Поэтому, если у вас есть составная агрегация, она будет включать зависимость, и вам не нужно будет показывать ее снова. Вы могли бы это сделать, но это было бы просто бессмысленно.