Unified Modeling Language (UML)又称统一建模语言或标准建模语言。
口诀:鸡湿衣冠剧组(继承(泛化),实现,依赖,关联,聚合,组合)
继承:子类和父类的关系,UML中使用空心三角箭头的实线表示,从子类指向父类。
实现:在父类中定义接口,在子类中对接口进行实现。在C++中,接口通过的纯虚函数来实现,C++的多态就是通过虚函数来实现的。
class Animal{
public:
vitual void move();
};
class Bird: public Animal{
void move(){
//鸟的移动方式,飞
}
};
在UML类图设计中,实现用一条带空心三角箭头的虚线表示,从类指向实现的接口。
依赖:类A使用到另一个类B,类B的变化会影响到类A。
表现在代码层面,为类B作为参数被类A在某个method方法中使用。在UML类图设计中,依赖关系用由类A指向类B的带箭头虚线表示。
关联:两个类之间比较强的依赖关系,关联可以是单向的,也可以是双向的。
关联也是一种弱关系,但并不是从属关系,关联的连个的类可以看作是平等的,比如一只大雁和老鹰的关系,就可以看作关联关系。
在UML类图设计中,关联关系用由关联类A指向被关联类B的带箭头实线表示,在关联的两端可以标注关联双方的角色和多重性标记。
通过定义其他类指针类型的成员来实现关联:
class Egle{
class Goose *food;
};
class Goose{
class Egle *predator;
};
聚合关系:聚合是关联关系的一种特例,它体现的是整体与部分的关系,即has-a的关系。
比如一只大雁和雁群,就是一种"聚合"关系。和组合相比,被聚合的对象可以属于多个聚合对象,比如,一只大雁可能属于多个雁群。
在C++语法中,通过类的指针来实现聚合:
class Goose{
};
class Geese{
public:
Goose member[10];
};
组合: 组合也是关联关系的一种特例,它体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合。它同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束,比如人和人的大脑,鸟类和翅膀类就是组合关系,在创建一个鸟类对象时,一定要同时或之后创建一个翅膀类对象,销毁一个鸟类对象时,一定要先同时或之前销毁翅膀对象。
在C++语法中,使用在一个类中包含另外一个类类型的成员来实现组合。
class Wing{
};
class Bird{
Wing wing;
};
在UML类图设计中,组合关系以实心菱形加实线箭头表示。