Я прочитал некоторые сообщения о различиях между этими 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?
Кто-то мог пролить свет на эти вопросы?
Вы правы в том, что они обычно реализуются как ссылки на объекты, которые, конечно, обычно являются просто полями-членами некоторого класса. Это только потому, что это естественно в объектно-ориентированной системе, это может отображаться на другие вещи в разных контекстах, например. внешние ключи в реляционной базе данных.
Как упомянул @erisco, особенности взаимоотношений можно рассматривать только в контексте общей модели. Например, мы можем прочитать отношение композиции между заказом на закупку и строкой заказа, подобным этому (например): заказ на закупку содержит одну или несколько строк заказа.
Я обычно интерпретирую три, которые вы даете, следующим образом:
Тем не менее, я видел, что они означали практически все, что можно вообразить (и очень вероятно, что на SO есть люди, которые не согласятся с моей оценкой!), Так что будьте осторожны при интерпретации чужих диаграмм :-) вышеупомянутые соглашения сослужили мне хорошую службу, но YMMV.
По вопросу 2: статическая ссылка приведет к общей ассоциации между экземплярами, но это всего лишь один из способов ее реализации, который может удивить потребителей.
Википедия: Диаграммы классов , вероятно, содержит ваши лучшие определения. Ни в одном из ваших примеров нет различий между ассоциацией, агрегированием или составом. Без какого-либо определения того, что такое A или что такое B, нет определения того, каковы их отношения. То, как получается ссылка на другой объект, не имеет отношения к диаграммам классов.