В чем разница между хранением объекта класса и их агрегированием? - PullRequest
0 голосов
/ 15 декабря 2008

Не могу различить разницу между агрегацией и холдингом. Что это означает, скажем, C ++?
Я полагаю, что когда объект класса A содержит (или создает экземпляры) объекты класса B, он сам использует его для выполнения некоторых функций.
Например:

class A {
 int state;
 public: 
  A(int s): state(s) {}
  int inc() { return state++; }
};
class B {
  int app;
  string s;
public:
  B(): app(0), s("") {}
  B(int A, const string& str): app(A), s(str) {}
  void f(int p);
  ~B() { app = 0; s = ""; }
};
void B::f(int p)
{
   A mA(p);
   app = mA.inc();
}

А агрегация объекта класса А будет такой:

class B{
 A t;
 //...
}

Пожалуйста, дайте мне ссылку на веб-сайт или на место в книге, где я могу найти четкие определения с точки зрения языка ОО, каковы именно все виды отношений между классами.

Ответы [ 3 ]

1 голос
/ 15 декабря 2008

Удержание другого класса означает, что класс связан с другим классом через родительские дочерние отношения. Например, у Пути есть список точек. Путь является родителем списка точек, который является родителем отдельных точек.

Агрегирование означает использование разных классов и размещение их за интерфейсом, чтобы они выглядели как один класс. Например, FileDialog будет иметь несколько классов кнопок, класс ввода текста, класс списка / дерева и так далее. Но для остальной системы у нее просто были методы, которые нужно активировать, возможно назначить имя файла по умолчанию и получить остальные.

Тот факт, что он состоит из всех других классов, не имеет значения для других классов, использующих его в качестве файлового диалога. Однако он работает путем объединения всех классов для выполнения ожидаемого поведения.

1 голос
/ 15 декабря 2008

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

Интересная аналогия - это колчан со стрелами и машина. Колчан - это Агрегация стрел, колчан может существовать без стрелок; Автомобиль - это Композиция (Сумма частей). И давайте не будем спорить, что машина без колеса - это все-таки машина :) 1003 *

Что касается ссылок: http://www.bletchleypark.net/algorithms/software/oop.html

0 голосов
/ 15 декабря 2008

Это очень много о владении и видимости. У этих отношений есть разные названия, но вы должны учитывать следующие два момента:

  • Имеет ли родитель строгую собственность над ребенком, чтобы после смерти родителя ребенок тоже умер?

  • Виден ли ребенок другим сущностям, кроме родителя?

Ответы на эти вопросы помогут вам прояснить эти отношения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...