UML类图

来源:互联网 发布:喜纳昌吉 知乎 编辑:程序博客网 时间:2024/06/06 00:33

UML类图

  • UML类图
    • 简介
    • 类的表示
    • 类之间的几种关系
    • EA

简介

类图(Class Diagram)是面向对象系统建模中最常用和最重要的图,用来显示系统中的类,接口以及他们之间的静态结构和关系的一种静态模型。

类的表示

类图有三个基本组件:类名、属性、方法,一个类在类图中用一个有三个区域的矩形表示,其中第一个区域表示类名,第二个区域表示类中包含的属性,第三个区域包括类的方法。当然,第二个区域和第三个区域并不是必须的。

类之间的几种关系

泛化(Generalization)
泛华表示的是is-a的关系;是一种继承关系,表示一般与特殊。在语言中适用继承得以实现。

表示方法:使用带三角箭头表示,从子类指向父类:

比如“猫”是“动物”的一个子类;继承了“动物”的所有属性和动作。他们之间是一种泛化关系。

实现(Realization)
实现是一个类和接口之间的关系:一个类“实现”了一个接口。

表示方法:使用带三角箭头的虚线箭头表示,从类指向接口。比如,“猫”实现一个接口“产仔”。

关联(Association)
关联是一种拥有关系。即可以是双向的关联,也可以是单向的关联。在代码中的体现为成员变量

表示方法,使用尖的实线箭头表示。指向被关联的类。

比如说猫有一个属性是“窝”,那么“猫”和”窝“就是关联关系;是一个单向的关联。

依赖(Dependency)
依赖是一种使用关系。在代码中体现位类的局部变量、方法的参数等。

表示方法:使用尖的虚线箭头表示。指向被使用的类。

比如说:”猫“洗澡用”水“

聚合(Aggregation)
聚合是关联关系的一种特例,聚合也是一种拥有关系,但是这种拥有关系是可以分离的,他们具有各自的生命周期

代码体现:成员变量

表示方法:带空心菱形的实线,菱形指向整体。

比如:主人拥有猫

组合(Composition)
组合关系也同样是关联关系的一种特例;也称为强聚合。也是整体和部分的关系,但是此时整体和部分是不可以分离的。

代码体现:成员变量

表示方式:带实心菱形箭头的实线,菱形指向整体。

比如:猫拥有心脏。

上问中描述的关系如图所示:
这里写图片描述

EA

绘制上图使用了软件EA,软件还有通过代码生成UML类图和通过UML类图去生成代码的功能。

下面记录一下怎么使用代码生成UML图
1. 新建一个工程,选择类图模式。
这里写图片描述

  1. 选择导入代码
    这里写图片描述

假设我们有头文件代码如下:

class Animal {public:    Animal();    ~Animal();private:    void eat();};class Cat : public Animal{public:    Cat();    ~Cat();};class Human {public:    Human();    ~Human();    Cat cat;};

生成UML类图如下:
这里写图片描述

通过UML图生成代码也示在Code Engineering选项内

这里写图片描述

通过上面的图再生成代码如下:
Human.h

/////////////////////////////////////////////////////////////  Human.h//  Implementation of the Class Human//  Created on:      22-7月-2017 10:43:14//  Original author: xxx///////////////////////////////////////////////////////////#if !defined(EA_D1057E9F_EC82_4d3b_9885_0441EFB30798__INCLUDED_)#define EA_D1057E9F_EC82_4d3b_9885_0441EFB30798__INCLUDED_#include "Cat.h"class Human{public:    Cat cat;    Human();    ~Human();};#endif // !defined(EA_D1057E9F_EC82_4d3b_9885_0441EFB30798__INCLUDED_)

Cat.h

/////////////////////////////////////////////////////////////  Cat.h//  Implementation of the Class Cat//  Created on:      22-7月-2017 10:43:14//  Original author: xxx///////////////////////////////////////////////////////////#if !defined(EA_B6994D59_7541_4bfb_AA0E_C226CB7AEC03__INCLUDED_)#define EA_B6994D59_7541_4bfb_AA0E_C226CB7AEC03__INCLUDED_#include "Animal.h"class Cat : public Animal{public:    Cat();    ~Cat();};#endif // !defined(EA_B6994D59_7541_4bfb_AA0E_C226CB7AEC03__INCLUDED_)

Animal.h

/////////////////////////////////////////////////////////////  Animal.h//  Implementation of the Class Animal//  Created on:      22-7月-2017 10:43:13//  Original author: xxx///////////////////////////////////////////////////////////#if !defined(EA_7C06886E_CCC9_46d3_8A5F_542250D47C7C__INCLUDED_)#define EA_7C06886E_CCC9_46d3_8A5F_542250D47C7C__INCLUDED_class Animal{public:    Animal();    ~Animal();private:    void eat();};#endif // !defined(EA_7C06886E_CCC9_46d3_8A5F_542250D47C7C__INCLUDED_)

同时,他也为所有的类函数生成了cpp,这里不贴出来了。

原创粉丝点击