UML类图及其关系

在UML的类图中对象类通常使用以下形式表示:


class.png

Student类


class Student{
private:
    int age;
    string name;
public:
    void Study(){...}
    void Eat(string food){...}
    void Sleep(){...}
}

属性
基本格式可见性 属性名: 类型 [= 默认值]
可见性: 分为Public(+)Protected(#)Private(-)
默认值可省略
方法
基本格式可见性 方法名(参数 : 参数类型) [: 返回类型]
可见性:与属性定义相同
参数:可选项,多个参数之间通过,进行分隔
返回值:可选项,多个返回类型之间通过,分隔

类之间的关系

类与类之间的关系基本可以归为6类:继承、实现、依赖、关联、聚合、组合

继承关系


class.png

继承


通过使用带三角箭头的实线将两个类连接起来, 由子类指向父类表示继承关系
子类可继承父类的所有方法和属性,并根据需要自由的进行扩展

class Human {
private:
    int age;
    string name;
public:
    Eat(string food){...}
    Sleep(){...}
}

class Student: public Human{
private:
    int age;
    string name;
public:
    void Study(){...}
}


实现关系


interface.png

实现


通过使用带三角箭头的虚线将类与接口/抽象类进行连接,表示类实现了接口/抽象类所定义的方法。

type Studier interface{
    void Study()
}

class Student {
public:
    void Study(){...}
    void Sleep(){...}
    ...
}


依赖关系


dep.png

依赖


依赖关系通过使用带箭头的虚线将两个类进行连接表示。
在代码中,通常使用参数表示依赖关系。

class Food {
    ...
}

class Student{
public:
    void Eat(Food food){...}
    ...
}


关联关系


association.png

关联


关联关系通过使用带箭头的实线将两个类进行连接表示。
关联关系可以是单向关联(单向箭头)或双向关联(双向箭头),在代码中,通常使用成员变量表示关联关系。

class Book{
    ...
}

class Student{
private:
    Book[] books
public:
    void Study(Book[] book){...}
    ...
}


聚合关系


aggregation.png

聚合


聚合关系使用带空心棱形的实线将两个类连接起来,菱形指向整体表示聚合关系。
聚合关系中整体是由多个对象组成的,而每个对象都有各自的生命周期。被聚合类在聚合类外进行创建,聚合类不负责创建,通过对外提供接口,由调用者通过接口传参进行成员的初始化。

class Student {
    ...
}

class Class {
private:
    Student[] students;
public:
    void Class(Student[] students){
        this.students = students;
    }
    ...
}


组合关系


composition.png

组合


组合关系使用带实心棱形的实线将两个类连接起来,菱形指向整体表示组合关系。
两个类之间的关系相较于聚合关系更加紧密,组合类负责被包含类对象的创建和销毁,在代码中通常也表示为类的成员变量。

class Eye{
    ...
}

class Student{
private:
    Eye eyes;
public:
    void Eyes() {
        eyes = new Eye()
    }
    ...
}



6种类关系间的紧密程度由强到弱为:
继承 = 实现 > 组合 > 聚合 > 关联 > 依赖

参考:
https://my.oschina.net/jackieyeah/blog/224265
http://www.uml.org.cn/oobject/201012233.asp

本文使用CC BY-NA-SA 4.0协议许可
本文链接:http://404-notfound.com/UML类图/