UML类图

UML类图

简介

类图(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,这里不贴出来了。

### UML绘制方法及学习资料 UML是一种静态结构,用于描述系统中的、接口以及它们之间的关系。以下是关于UML的绘制方法、示例和学习资料的相关信息。 #### 一、UML的基本构成 UML、接口、关联关系等元素组成。每个通常以矩形框表示,分为三个部分:名、属性和操作(方法)。的核心在于展示之间的关系,如继承、实现、关联、聚合和组合等[^1]。 ```plaintext +------------------+ | 名 | +------------------+ | 属性1: 型 | | 属性2: 型 | +------------------+ | + 方法1(参数): 返回值型 | | + 方法2(参数): 返回值型 | +------------------+ ``` #### 二、UML的绘制规则 1. **的表示方式** 用矩形框表示,其中包含名、属性和方法。名位于顶部,属性位于中间,方法位于底部。例如: ```plaintext +------------------+ | Person | +------------------+ | - name: String | | - age: int | +------------------+ | + setName(String) | | + getName(): String | +------------------+ ``` 2. **关系的表示方式** - **继承**:使用空心箭头指向父,表示子继承父。 - **实现**:使用空心箭头指向接口,表示实现了该接口。 - **关联**:使用直线连接两个,表示两者之间存在某种关系。 - **聚合**:使用空心菱形连接,表示整体与部分的关系,但部分可以独立存在。 - **组合**:使用实心菱形连接,表示整体与部分的关系,且部分不能独立存在[^3]。 #### 三、UML绘制工具 绘制UML可以使用多种工具,以下是一些常用的在线和离线工具: - **在线工具**:ProcessOn、Lucidchart、Draw.io 等。这些工具支持实时协作,适合团队合作。 - **离线工具**:Visual Paradigm、StarUML、Enterprise Architect 等。这些工具功能强大,适合专业开发人员使用。 #### 四、UML示例 以下是一个简单的UML示例,展示了 `Person` 和 `Student` 之间的继承关系: ```plaintext +------------------+ +------------------+ | Student | | Person | +------------------+ +------------------+ | - studentId: int | | - name: String | +------------------+ | - age: int | | + getStudentId() |<|--|> | + setName(String) | | + setStudentId(int) | | + getName(): String | +------------------+ +------------------+ ``` #### 五、学习资料推荐 1. **书籍**:《UML精粹》(Martin Fowler 著),这是一本经典的UML入门书籍,内容详尽且易于理解。 2. **在线教程**:可以在 ProcessOn 的官方文档中找到详细的绘制指南。 3. **视频课程**:B站或 YouTube 上有许多关于 UML 的免费教程,适合初学者快速上手[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值