Различать агрегацию и композиционные отношения с использованием исходного кода - PullRequest
5 голосов
/ 21 июля 2011

Можно ли провести различие между составом и отношением агрегации, прочитав исходный код?

Я попытался найти некоторые шаблоны и перечислил их ниже.

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

СОСТАВ

enter image description here

 public class Engine
{
    . . . 
}

public class Car
{
   Engine e = new Engine();
    .......
}

АГРЕГАЦИЯ

enter image description here

public class Address
{
. . .
}

public class Person
{
   private Address address;
   public Person(Address address)
   {
     this.address = address;
   }
   . . .
}

Я считаю, что эти модели различают

СОСТАВ (является частью)

  1. Определяется как поле класса.

    • Пример: [Engine e] Двигатель определяется как поле e класса Car
  2. Создается и присваивается в классе.

    • Пример: [Engine e = new Engine ();] Двигатель создается в классе

Агрегирование (имеет)

  1. Определено как поле класса

    • Пример:[частный адресaddress;] Address определяется как адрес поля класса Person
  2. не связан с классом

    • Пример: [Address address = newAddress ();] Адрес устанавливается извне Person.
  3. Назначается в конструкторе путем отправки экземпляра в качестве аргумента конструктору.

    • Пример: [Person person = new Person (address);] Экземпляр Address передается в качестве аргумента через конструктор и присваивается в конструкторе класса Person.

Могу ли я учесть эти различия в агрегации и соотношении композиций?

Есть ли еще ограничения, которые используются для дифференциации?

Ответы [ 3 ]

1 голос
/ 21 июля 2011

Вы можете проверить этот похожий вопрос (не мой), ответ, помеченный как "предпочтительный" / "acepted", является моим; -)

Представление агрегации и состава в определении класса?

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

1 голос
/ 21 июля 2011

Не совсем, потому что нет уникального способа реализации каждого вида ассоциации (на самом деле, проблема в том, что у нас есть три вида ассоциаций: «нормальные ассоциации», «агрегаты» и «композиции»).

Если в языке есть указатели, то вы можете попытаться угадать, что если Engine определен в Car как указатель, то программист, написавший этот фрагмент кода, предлагает более мягкие отношения (агрегацию или ассоциацию) между Cars и Engines после удаления Автомобиль не подразумевает потерю объекта Двигатель.

0 голосов
/ 20 августа 2013

Ассоциация

Ассоциация - это связь, в которой все объекты имеют свой жизненный цикл, и у них нет владельца.Давайте возьмем пример Учителя и Студента.Несколько учеников могут связываться с одним учителем, а один ученик может связываться с несколькими учителями, но между объектами нет права собственности, и оба имеют свой жизненный цикл.Оба могут создавать и удалять независимо.

Агрегация

Агрегация - это специализированная форма ассоциации, где все объекты имеют свой собственный жизненный цикл, но есть владение, и дочерний объект можетне принадлежит другому родительскому объекту.Давайте возьмем пример кафедры и преподавателя.Один учитель не может принадлежать нескольким отделам, но если мы удалим преподавателя, объект не будет уничтожен.Мы можем думать об отношениях «имеет-а».

Композиция

Композиция снова является специализированной формой Агрегации, и мы можем назвать это «смертью».Это сильный тип агрегации.Доза дочернего объекта не имеет своего жизненного цикла, и если родительский объект удаляет все дочерние объекты, они также будут удалены.Давайте снова возьмем пример отношений между Домом и комнатами.Дом может содержать несколько комнат, нет независимой жизни комнаты, и любая комната не может принадлежать двум разным домам, если мы удалим дом, комната автоматически удалится.

Итак, Я не думаю, что отношениемежду автомобилем и двигателем должен быть состав , поскольку двигатель мог бы существовать без автомобиля, я думаю, что отношение между автомобилем и двигателем - это агрегирование.

Короче говоря;да, читая код, вы можете определить тип отношений (состав и агрегация; но я не уверен, что ассоциация) в соответствии с определениями, и я думаю, что ваши шаблоны для дифференцирования верны.

...