как записаны ассоциация, агрегирование и состав?

Я прочитал некоторые сообщения о различиях между этими 3 отношениями, и я думаю, что понимаю.

Я просто задаюсь вопросом, все они записанные то же при кодировании?

Вопрос 1: все 3 являются просто значением типа объекта в переменной экземпляра?

class A {
    public $b = ''

    public function __construct($object) {
         $this->b = $object // <-- could be a association, aggregation or a composition relation?
    }
}

Вопрос 2: это должна быть переменная экземпляра, или это может быть статическое?

class A {
    public static $b = '' // <-- nothing changed?

    public function __construct($object) {
         $this->b = $object
    }
}

Вопрос 3: существует ли различие в том, где объект создается?

Я склонен думать, что объект состава создается в объекте:

class A {
    public $b = ''

    public function __construct() {
         $this->b = new Object // is created inside the object
    }
}

и агрегирование/ассоциация передается через конструктора или другой метод:

class A {
    public $b = ''

    public function __construct($object) { // passed through a method
         $this->b = $object
    }
}

Вопрос 4: почему/когда это важно для знания. Я должен прокомментировать объект в другом, какое отношение об или Вы делаете это в диаграмме UML?

Кто-то мог пролить свет на эти вопросы?

6
задан Burgi 6 September 2018 в 05:08
поделиться

2 ответа

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

Как упомянул @erisco, особенности взаимоотношений можно рассматривать только в контексте общей модели. Например, мы можем прочитать отношение композиции между заказом на закупку и строкой заказа, подобным этому (например): заказ на закупку содержит одну или несколько строк заказа.

Я обычно интерпретирую три, которые вы даете, следующим образом:

  1. Ассоциация: A знает о B, B имеет самостоятельное значение.
  2. Агрегация: A включает B, B является внешне идентифицируемым и может существовать самостоятельно.
  3. Композиция: A содержит B, B не идентифицируется извне или не имеет значения вне этой композиции.

Тем не менее, я видел, что они означали практически все, что можно вообразить (и очень вероятно, что на SO есть люди, которые не согласятся с моей оценкой!), Так что будьте осторожны при интерпретации чужих диаграмм :-) вышеупомянутые соглашения сослужили мне хорошую службу, но YMMV.

По вопросу 2: статическая ссылка приведет к общей ассоциации между экземплярами, но это всего лишь один из способов ее реализации, который может удивить потребителей.

6
ответ дан 16 December 2019 в 21:36
поделиться

Википедия: Диаграммы классов , вероятно, содержит ваши лучшие определения. Ни в одном из ваших примеров нет различий между ассоциацией, агрегированием или составом. Без какого-либо определения того, что такое A или что такое B, нет определения того, каковы их отношения. То, как получается ссылка на другой объект, не имеет отношения к диаграммам классов.

2
ответ дан 16 December 2019 в 21:36
поделиться
Другие вопросы по тегам:

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