@habrdima

Как реализовать код диаграммы uml с стрелками зависимости и ассоциации?

Не получается найти адекватный пример того как устроен код (желательно пайтон) некоторых стрелок в диаграмме классов uml

1)линия и пунктир с треугольной стрелкой самые понятные, они просто наследуют классы

2)линии с ромбиками понятны отчасти, в свойстве класса создают экземпляр другого класса
например:
class A:
    a = "a"
class B:
    b = "b"
class C:
    a = A()
    def show(self):
        print(self.a.a)
    def setClass(self, c):
        self.c = c()
    def show2(self):
        print(self.c.b)

c = C()
c.setClass(B)
c.show()
c.show2()

по сути класс А это закрашенный ромбик, а класс В это не закрашенный ромбик

3)но другие две стрелки которые называют зависимость и ассоциация мне не получается понять как реализовать в коде
те примеры что видел мало отличаются от ромбиков

можете показать пример кода зависимости и ассоциации?
и если можно показать как реализованы двунаправленные стрелки? их рисуют без стрелок
  • Вопрос задан
  • 109 просмотров
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
линия и пунктир с треугольной стрелкой самые понятные, они просто наследуют классы

Неверно. Сплошная стрелка - да, наследует классы. Пунктир - это реализация интерфейса (в терминах Питона это скорее typing.Protocol). Т.е. при реализации один участник (с меткой interface) описывает методы без их реализации, а второй - их реализует.

линии с ромбиками понятны отчасти, в свойстве класса создают экземпляр другого класса

Это скорее коллекция и элементы. Разница между агрегацией (пустой ромб) и композицией (закрашенный ромб) простая. В случае композиции элемент не имеет смысла вне содержащей его коллекции. Например, чат и сообщения - если сообщение не может быть вне чата, это композиция. А вот, скажем, контакт и группа контактов - агрегация, так как контакт может рассматриваться и иметь смысл вне группы, в которую он входит.
И агрегация, и композиция - это частные случаи ассоциации. В случае ассоциации одному или нескольким экземплярам одного класса сопоставляется один или несколько экземпляров другого класса. Например, у сообщений в любом чате есть автор - это ассоциация один-ко-многим.

Зависимость - это когда один объект использует другой (имеет ссылку на другой), но в то же время их экземпляры не сопоставлены, т.е. связь между ними не имеет особого смысла с точки зрения решаемой задачи.
Пример: окно, где показывается чат, и сам чат. Окно знает, какой чат оно показывает. В то же время одно окно может использоваться для разных чатов в разное время. Аналогично, один чат может показываться в разных окнах. Т.е. связь окно-чат не имеет какого-то особенного смысла. Сравни это со связью сообщение-автор.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы