【发布时间】:2014-11-04 22:15:17
【问题描述】:
我开始研究 OOAD,但我很难找到一个 C++ 代码示例来说明如何以编程方式实现 Association、Aggregation 和 Composition。 (到处都有几篇文章,但它们与 C# 或 java 有关)。我确实找到了一两个例子,但它们都与我导师的指示相冲突,我很困惑。
我的理解是:
- 关联: Foo 有一个指向 Bar 对象的指针作为数据成员
- 聚合: Foo 有一个指向 Bar 对象的指针,并且 Bar 的数据被深度复制到该指针中。
- 组合: Foo 有一个 Bar 对象作为数据成员。
这就是我实现它的方式:
class Bar
{
Baz baz;
};
//ASSOCIATION (with Bar)
class Foo
{
Bar* bar;
void setBar(Bar* _bar)
{
bar = _bar;
}
};
//AGGREGATION (with Bar)
class Foo
{
Bar* bar;
void setBar(Bar* _bar)
{
bar = new Bar;
bar->baz = _bar->baz;
}
};
//COMPOSTION (with Bar)
class Foo
{
Bar bar;
Foo(Baz baz)
{
bar.baz = baz;
}
};
这是正确的吗?如果没有,那么应该如何做呢?如果您还可以给我参考书中的代码,将不胜感激(以便我可以与我的导师讨论)
【问题讨论】:
-
programmers.stackexchange.com 更适合回答这个问题。
-
聚合和关联的区别is subtle和它们在c++中的实现方式一般是一样的。
-
我记得我在学校时对同样的术语感到非常困惑。然后,当我进入工作团队时,用于讨论对象关系的唯一术语是 is-a、has-a、继承和组合。也就是说,我知道 UML 有不同的聚合和组合符号,但我从未真正见过有人区分这两者。所以,在你的课程中找到答案,让你得到正确的答案,但不要过分强调。
标签: c++ oop associations aggregation ooad