http://www.uml.org.cn/oobject/201104212.asp
1:关联,一个类C3中,类C4作为属性
Class C3{
C4 c4=new C4();
}
单向关联
2:依赖:一个类C5的方法fun中,类C6作为参数或者属性
Class C5{
public C6 c6;
void fun(C6 c6){
}
}
单向依赖
3.组合/聚合-属性对象-composite/aggreate
(1)组合-自己是实心的,去组合它,把它当做自己的属性对象,只是被组合的类不会单独存在(自己构造函数中使用)
class C7
{
public:
C8 theC8;
};
class C8
{
};
可以看到,代码和聚合是一样的。具体如何区别,可能就只能用语义来区分了。
2)聚合-自己空心的,去聚合它,把它当做自己的属性对象,被聚合的类可以单独存在(自己构造函数中不使用)
当类之间有整体-部分关系的时候,我们就可以使用组合或者聚合。
聚合:表示C9聚合C10,但是C10可以离开C9而独立存在(独立存在的意思是在某个应用的问题域中这个类的存在有意义。这句话怎么解,请看下面组合里的解释)。
代码如下:
class C9
{
public:
C10 theC10;
};
class C10
{
};
//总结聚合和组合:
问题域的语义上:组合中被组合类单独存在没有意义; 聚合中被聚合类在可以有单独存在的意义。
生命期上:组合中必须要负责被组合类的生命期; 聚合中可不负责被聚合类的声明期,可以由外部程序来创建和消亡(可用赋值)。
4.泛化和实现 derived/implement
(1)继承(Derived)-子对象指向父对象
(2)接口实现(implement)
- 实现关系指定两个实体之间的一个合约。换言之,一个实体定义一个 合约 ,而另一个实体保证履行该 合约 。