属性和操作之前可附加一个可见性修饰符。加号(+)表示具有 公共可见性。减号(-)表示私有可见性。#号表示受保护的可见性。省略这些修饰符表示具有package(包)级别的可见性。如果属性或操作具有下划线, 表明它是静态的。在操作中,可同时列出它接受的参数,以及返回类型
1. 关联
A -> B关联表示相识关系,实际表现为类A知道类B的存在,它可以调用类B的公共属性和方法,但没有生命周期的依赖。代码表现为:
Class A
{
Public:
B *b;
};
Class B
{
};
类图为表现为:
# 存在双向关联和自身关联
2. 组合/聚合
组合/聚合是整体与部分的关系。
类A聚合类B,类B可以脱离类A独立存在。代码表现为:
Class A
{
Public:
B b;
};
Class B
{
};
类图表现为:
类A组合类B,类A需要知道类B的生存周期,即类A可能控制类B的生成和释放,或者通过某种方式知道类B的生成和释放。
代码表现与聚合相同,类图表现为:
3. 依赖
类A依赖类B,那么类A可能需要用到类B的一些方法,要完成类A的所有功能,一定要类B的方法的协助才行,不产生属性,一般是类A的头文件中包含类B的头文件,实际表现为类A的一些方法可能需要把类B作为参数使用。代码表现为:
//A.h
#include “B.h”
Class A
{
Void Func(B *b);
};
//B.h
Class B
{
}
类图表现为:
关联是类之间的一种关系,例如老师教学生,老公和老婆,水壶装水等就是一种关系。这种关系是非常明显的,在问题领域中通过分析直接就能得出。
依赖是一种弱关联,只要一个类用到另一个类,但是和另一个类的关系不是太明显的时候(可以说 是“uses”了那个类),就可以把这种关系看成是依赖,依赖也可说是一种偶然的关系,而不是必然的关系,就是“我在某个方法中偶然用到了它,但在现实中 我和它并没多大关系”。例如我和锤子,我和锤子本来是没关系的,但在有一次要钉钉子的时候,我用到了它,这就是一种依赖,依赖锤子完成钉钉子这件事情。
组合是一种整体-部分的关系,在问题域中这种关系很明显,直接分析就可以得出的。例如轮胎是车的一部分,树叶是树的一部分,手脚是身体的一部分这种的关系,非常明显的整体-部分关系。
上述的几种关系(关联、聚合/组合、依赖)在代码中可能以指针、引用、值等的方式在另一个类中出现,不拘于形式,但在逻辑上他们就有以上的区别。
这里还要说明一下,所谓的这些关系只是在某个问题域才有效,离开了这个问题域,可能这些关系就不成立了。
4. 泛化(继承)
继承关系,动物与狮子老虎大象的关系。
代码表现为:
//A.h
#include “B.h”
Class A: public B
{
};
类图表现为: