【IDEA】idea自带uml类图查看工具说明
创始人
2024-06-02 05:35:41
0次

IDEA uml

在这里插入图片描述
说明:

  • 绿实线箭头:接口继承接口
  • 绿虚线箭头:类实现接口
  • 蓝实线箭头:类继承类

uml 规范

在这里插入图片描述

1.依赖(Dependency)

依赖关系使用虚线加箭头表示,如下图所示:
在这里插入图片描述

学生在学习生活中经常使用电脑,于是对电脑产生了依赖。依赖关系是五种关系中耦合最小的一种关系。类A要完成某个功能引用了类B,则类A依赖类B。依赖在代码中主要体现为类A的某个成员函数的返回值、形参、局部变量或静态方法的调用,则表示类A引用了类B。

以 Student 类和 Computer 类为例,示例代码如下:

class Computer {
public:static void start(){cout<<"电脑正在启动"<

2.关联(Association)

关联关系使用实线加箭头表示,类之间的关系比依赖要强。学生与老师是关联的,学生可以不用电脑,但是学生不能没有老师。如下图所示:
在这里插入图片描述

关联与依赖的对比:

相似之处:
关联暗示了依赖,二者都用来表示无法用聚合和组合表示的关系。

区别:
(1)发生依赖关系的两个类都不会增加属性。其中的一个类作为另一个类的方法的参数或者返回值,或者是某个方法的变量而已。

发生关联关系的两个类,类A成为类B的属性,而属性是一种更为紧密的耦合,更为长久的持有关系。 在代码中的表现如下:

class Teacher;
class Student {
public:Teacher teacher;  //成员变量void study();
}	

(2)从关系的生命周期来看,依赖关系是仅当类的方法被调用时而产生,伴随着方法的结束而结束。关联关系当类实例化的时候产生,当类对象销毁的时候关系结束。相比依赖,关联关系的生存期更长。

关联关系有单向关联、双向关联、自身关联、多维关联等等。其中后三个可以不加箭头。

单向关联:
在这里插入图片描述
双向关联:
在这里插入图片描述

自身关联:
在这里插入图片描述
多维关联:
在这里插入图片描述

3.聚合(Aggregation)

聚合关系使用实线加空心菱形表示。聚合用来表示集体与个体之间的关联关系。

例如班级与学生之间存在聚合关系,类图表示如下:
在这里插入图片描述
聚合关系在代码上与关联关系表现一致,类 Student 将成为类 Classes 的成员变量。代码如下:

class Student;
class Classes {
public:Student* student; Classes(Student* stu):student(stu) {}
};

4.组合(复合,Composition)

复合(又叫复合)关系使用实线加实心菱形表示,用来表示个体与组成部分之间的关联关系。

例如学生与心脏之间存在复合关系,类图表示如下:
在这里插入图片描述

组合关系在代码上与关联关系表现一致,类 Heart 将成为类 Student 的成员变量。代码如下:

class Heart;
class Student {
public:Heart* heart; Student() {heart=new Heart;}~Student() {delete heart;}
};

聚合与组合的对比:

(1)聚合关系没有组合紧密。
学生不会因为班级的解散而无法存在,聚合关系的类具有不同的生命周期;而学生如果没有心脏将无法存活,组合关系的类具有相同的生命周期。

这个从构造函数可以看出。聚合类的构造函数中包含另一个类的实例作为参数,因为构造函数中传递另一个类的实例,因此学生可以脱离班级体独立存在。组合类的构造函数包含另一个类的实例化。因为在构造函数中进行实例化,因此两者紧密耦合在一起,同生同灭,学生不能脱离心脏而存在。

(2)信息的封装性不同。
在聚合关系中,客户端可以同时了解Classes类和Student类,因为他们是独立的。

在组合关系中,客户端只认识 Student 类,根本不知道 Heart 类的存在,因为心脏类被严密地封装在学生类中。

理解聚合与组合的区别,主要在于聚合的成员可独立,组合的成员必须依赖于整体才有意义。

5.泛化(Generalization)

泛化是学术名称,通俗来讲,泛化指的是类与类之间的继承关系和类与接口之间的实现关系。

继承关系使用直线加空心三角形表示。类图结构如下:
在这里插入图片描述

类接口的实现关系使用虚线加空心三角形表示。类图结构如下:
在这里插入图片描述

参考:uml规范

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...