1. 简介

UML(Unified Modeling Language)是一种面向对象的建模语言,包含我们所需要的所有图形标识;是一种更直观的图形方式,用符号来表示概念,概念间的关系用连接符合的线来表示

UML的各种图形,分别描述软件模型的静态结构、动态行为、模块组织和管理;本文我们讲解的类图(class diagram),是一种静态结构图(static structrue diagrams),用来描述类和对象、类和对象的内部结构、类和对象的关系

2. 类和对象

2.1 类的表示

我们先来看一个简单的例子,体验一下

class Student {
public:
    Student(string n = "",int a=0) {
        name=n;
        age= a;
    }

    void show() {
        cout << name << ":" << age << endl;
    }

private:
    string name;
    int age;
};

假如我们有上面的一个类,用类图来表示,如下:

Student -name : string -age : int +Student(string n = "", int age = 0) +show() : void

说明:

  • 类的描述包含类的名称、数据成员、函数成员、各成员的控制访问权限
  • 由一个3段的矩形表示,上中下依此为类名、数据成员、函数成员;可以只有类名,如下:
Student
  • 数据成员的表示
    • 语法: [访问控制属性]名称 [重数] [: 类型] [= 默认值] [{约束特征}]
    • 访问控制属性:public、private、protected分布对应UML的"+"、"-"、"#"
    • 名称:数据成员的变量名
    • 重数:属性的重数,具体什么意思没搞懂
    • 默认值:如该数据成员的类型为AreaArea类构造函数为Area(int length, int width),则该数据成员的默认值形式为= (10, 10)
    • 约束特征:该数据成员性质约束的说明,如{只读}表示该数据成员只能被读取

2.2 对象的表示

我们用上面的类Student创建一个对象my_student
对象图效果
说明:

  • 分为两部分,上面部分为对象名,下面部分为数据成员及其值,数据成员及其值是可选的
  • 对象名格式为:对象名 : 类名,下面要加下划线,可以省略对象名或类名

3. 关系的表示

使用带有特定符号的实线段或虚线段表示关系

3.1 依赖关系

表示一个类A使用另一个类B作为函数的成员参数,就要用依赖关系,通常为类之间的调用、友元和类的实例化;B变化会影响A,反之不成立

UML中表示依赖关系使用<<use>>构造型,如下所示:
依赖关系图
表示类A使用了类B

3.2 作用关系—关联

表示一个类的对象和另一个类的对象之间相互作用的关系,UML中用实线来表示两个类(或同一个类)之间的关联
关联关系图
重数A表示:类B的每个对象与类A的多少个对象发生作用,如:重数A = 0..1
重数B表示:类A的每个对象与类B的多少个对象发生作用

重数标记的形式和含义如下表所示:

标记说明
*任何数目的对象(包括0)
1恰好1个对象
n恰好n个对象
0…10个或1个对象(表明关联是可选的)
n…m最少为n个对象, 最多为m个对象(n和m是整数)
2,4离散的结合(如2个或4个)

3.3 包含关系—聚集和组合

聚集表示整体与部分的关系,是一种特殊的关联,聚集分为共享聚集和组成聚集(组合),如下所示:
包含关系图

  • 左图表示共享聚合:类A包含多个类B,但类B还可以被其它类包含,在UML中由空心菱形表示
  • 右图表示组成聚合(组合):类A包含多个类B,且类B只能被类A包含,在UML中由实心菱形表示

3.4 继承关系-泛化

类的继承关系在UML中称为泛化,如下图所示,子类1说明单继承,子类2说明多继承
继承关系图

4. 注释

UML的注释是一种能独立存在的修饰符号,附加在元素或元素集上用来表示说明的图形符号,可以添加说明、评述、注解等信息,如下所示:
注释图
其中虚线连接到UML的其它元素上

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐