1. UML 概念和定义
UML(Unified Modeling Language)是一种统一建模语言,为面向对象开发系统的产品进行说明、可视化、和编制文档的一种标准语言。
1.1 UML 定义
UML语言是一种典型的面向对象建模语言,其重要内容是各种类型的图形,分别描述软件模型的静态结构,动态行为以及模块组织和管理,在C++中UML主要用来描述软件中类和对象以及它们的静态关系。
1.2 UML 概念
类图(Class Diagram): 类图是面向对象系统建模中最常用和最重要的图,是定义其它图的基础。类图主要是用来显示系统中的类、接口以及它们之间的静态结构和关系的一种静态模型。
类图的3个基本组件:类名、属性、方法
+ :public -:private #: protected
in :输入参数 out: 输出参数 inout: 即可作为输入也可以作为输出
静态成员: 下划线 纯虚函数: 斜体
2. 类关系
2.1 关联(Association)(konws a)
一个对象知道另一个对象的存在,该对象持有另一个对象的指针或者引用。
class X
{
public:
X(Y* _ptrY):ptrY_(_ptrY) {}
void setY(Y *y) { ptrY_ = y;}
void f() { ptrY_->foo();}
private/public:
Y* ptrY_; // X类持有Y的一个指针,可据此调用Y中的成员方法
};
2.2 dependency(依赖)
当类Y与类X彼此独立,而类Y是类X成员函数的一个参数,或者X中成员函数的一个局部变量。
class X
{
...
void f1(Y y) { ...; y.foo(); }
void f2(Y& y) { ...; y.foo(); }
void f3(Y* y) { ...; y->foo(); }
void f4() { ...; Y y; y.foo(); }
void f5() { Y::staticFoo();}
...
}
2.3 Aggregation(聚类)
聚类发生的场景是:一个类是另一个类的集合或者容器,但被包含的类与容器本身并不具备相同的生命期,也就是容器销毁时,其包含的内容未必。关联(association)与聚合(aggregation)的不同之处在于,关联关系不存在一个明确的容器包含另外一个类。比如汽车和轮胎的关系,就是一种聚合关系,汽车包含着轮胎的集合,汽车的销毁,轮胎仍然可以存在。
class Window
{
public:
//...
private:
vectr<Shape*> ptrShapes;
}
2.4 Composition(组合)
组合(composition)是聚合(Aggregation)的增强版。组合和聚合的根本不同在于类与其所持有元素的是否具有相同的生命期,要求必须相同是一种组合关系。
class X
{
...
Y y; // composition, 相同的生命期,
// 如何是引用或者指针类型,则是关联类型,是一种弱联系
Y b[10]; // 0...10, composition
}
class X
{
X() { a = new Y[10]; } // 可能在这个new的对象吧
~X() { delete[] a;}
...
Y *a; // 0...10, composition,X对象析构时,必须对a进行释放
}
2.5 继承(泛化)
类间的继承关系表达的是一种derived class B is a base class A。
2.6 实现
:是一种类与接口的关系,表示类是接口所有特征和行为的实现.
:带三角箭头的虚线,箭头指向接口
紧密关系
泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖