拉不拉稀肚拉稀 发表于 2024-6-14 21:15:22

[架构之路-214]- UML-类图图解、详解、布局化、本质化讲解

目录
一、什么是类
1.1 概述
1.2 UML中类的表示
1.3  接口
1.4 抽象类
1.5 模板类
二、什么类图
2.1 概述
2.2 类关系
三、UML类图
3.1 布局关系
3.1.1 完全一体:继续关系 (类与类耦合度最高,类与类之间最强的关系)
3.1.2 组合关系
3.1.3 聚合关系
3.1.4 关联关系
3.2  操纵关系
3.2.1 操纵上的继续关系:实现关系(Implementation)
3.2.2 依赖关系
四 总结
一、什么是类

1.1 概述

类是面向对象语言的程序设计中的概念,是面向对象编程的基础。
类的实质是一种引用数据类型,类似于 byte、short、int(char)、long、float、double 等根本数据类型,不同的是它是一种复杂的数据类型。由于它的本质是数据类型,而不是数据,所以不存在于内存中,不能被直接操纵,只有被实例化为对象时,才会变得可操纵。
布局化面向对象简单数据类型char,short,int,long,float,doublechar,short,int,long,float,double复合数据类型struct ABC   ;//布局体类型class ABC; //类类型组成 布局体成员变量
布局体成员函数(新增加)
类成员变量
类成员函数
数据struct ABC val;//变量定义=》变量 class ABC  val; //实例化-》对象

类是对实际生活中一类具有共同特性的事物的抽象。如果一个程序里提供的数据类型与应用中的概念有直接的对应,这个程序就会更轻易明白,也更轻易修改。一组经过很好选择的用户定义的类会使程序更简洁。此外,它还能使各种形式的代码分析更轻易举行。特别地,它还会使编译器有可能查抄对象的非法使用。 
类的内部封装了属性和方法,用于操纵自身的成员。类是对某种对象的定义,具有举动(behavior),它描述一个对象可以或许做什么以及做的方法(method),它们是可以对这个对象举行操纵的程序和过程。它包含有关对象举动方式的信息,包括它的名称、属性、方法和事件。
类的构成包括成员属性和成员方法(数据成员和成员函数)。数据成员对应类的属性,类的数据成员也是一种数据类型,并不必要分配内存。成员函数则用于操纵类的各项属性,是一个类具有的特有的操纵,比如“门生”可以“上课”,而“水果”则不能。类和外界发生交互的操纵称为接口。
备注:
类有两种组成:成员变量和成员函数,因此类与类之间的关系,也是从这两个角度去看:是在成员函数布局上创建关联? 还是在成员函数上创建关联?

1.2 UML中类的表示

在类的UML图中,使用长方形描述一个类的告急构成,长方形垂直地分为三层,以此放置类的名称、属性和方法。
https://img-blog.csdnimg.cn/20201231135026421.png
 一般类的类名用正常字体粗体表示,如上图抽象类名用斜体字粗体,如User;接口则需在上方加上<< interface >>。
属性和方法都必要标注可见性符号,+代表public,#代表protected,-代表private。
另外,还可以用冒号:表明属性的类型和方法的返回类型,如+$name:string、+getName():string。当然,类型说明并非必须。
https://img-blog.csdnimg.cn/20200118021054193.png
 1. 从上到下分为三部分,分别是类名、属性和操纵。类名是必须有的
​ 2.类如果有属性,则每一个属性必须有一个名字,另外还可以有其他的描述信息,如可见性、数据类型、缺省值等
​ 3.类如果有操纵,则每一个操纵也都有一个名字,其他可选的信息包括可见性、参数的名、参数类型、参数缺省值和操纵的返回值的类型等
1.3  接口

​ 一组操纵的聚集,只有操纵的声明而没有实现。
1.4 抽象类

​ 不能被实例化的类,一般至少包含一个抽象操纵
1.5 模板类

​ 一种参数化的类,在编译时把模板参数绑定到不同的数据类型,从而产生不同的类。
https://img-blog.csdnimg.cn/20200118021110441.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwMzMyMDQ1,size_16,color_FFFFFF,t_70

二、什么类图

2.1 概述

类图以反映一个类与其他类在类的布局(属性、操纵)以及类之间的关系为告急目的,描述了软件系统的布局,是一种静态建模方法。
​ 类图中的“类”与面向对象语言中的“类”的概念是对应的,是对实际世界中的事物的抽象。
类是一种复合数据类型,是一种自定义复合数据类型,既然是数据类型,就意味着会被其他数据类似使用,在UML中,称为类与类的关系。
2.2 类关系

类与类之间的关系告急有六种:
继续、实现、组合、聚合、关联和依赖,
这六种关系的箭头表示如下。
https://img-blog.csdnimg.cn/20201231135536350.png
类的关系的强弱,体如今如下两个大的方面:
(1)通过内存布局体现,由强到弱为:继续-》组合-》聚合-》关联
(2)通过操纵函数体现,由强到弱为:实现-》....................-》依赖

三、UML类图

3.1 布局关系

3.1.1 完全一体:继续关系 (类与类耦合度最高,类与类之间最强的关系)

继续关系也称泛化关系(Generalization),用于描述父类与子类之间的关系。父类又称作基类,子类又称作派生类。
继续关系中,子类继续父类的全部功能,父类所具有的属性、方法,子类应该都有。子类中除了与父类同等的信息以外,还包括额外的信息。
例如:公交车、出租车和小轿车都是汽车,他们都有名称,并且都能在路上行驶。
https://img-blog.csdnimg.cn/20201231135654206.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM2MTcyMg==,size_16,color_FFFFFF,t_70
继续关系:Bus或Taxi完成拥有Car的一切,包括全部的成员属性和成员函数。
与在Bus或Taxi空的类定义上增加一个Car类型的成员变量不同的是,后者称为关联。
继续关系:子类可以直接操纵父类中的成员函数和成员属性的名字。而关联关系必须通过新定义的成员变量名才能访问。如:
Class A
{
        int x;
}
1. 继续关系
Class B: A
{
}
在使用B的实例时,可以直接访问A中的x.
2. 组合关系
Class C
{
        Class A  a;
}
是在使用C的实例时,必要通过新定义的变量访问,如a.x

3.1.2 组合关系

组合关系(Composition):团体与部分的关系,但是团体与部分不可以分开。
组合关系表示类之间团体与部分的关系,团体和部分有同等的生存期。一旦团体对象不存在,部分对象也将不存在,是同生共死的关系。
例如:人由头部和身体组成,两者不可分割,共同存在。
https://img-blog.csdnimg.cn/2020123113585076.png
两个类的耦合程度,组合关系仅次于继续关系。
与继续关系相似,组合关系表示一个类是另一个类布局上(成员变量)的组成部分。
只不过,必要听过新定义变量才能访问。

3.1.3 聚合关系

聚合关系(Aggregation):团体和部分的关系,团体与部分可以分开。
聚合关系也表示类之间团体与部分的关系,成员对象是团体对象的一部分,但是成员对象可以脱离团体对象独立存在。
例如:公交车司机和工衣、工帽是团体与部分的关系,但是可以分开,工衣、工帽可以穿在别的司机身上,公交司机也可以穿别的工衣、工帽。
https://img-blog.csdnimg.cn/20201231140105536.png
 与组合关系一样,组合关系表示一个类是另一个类布局上(成员变量)的组成部分,是团体与部分的关系。
与组合关系不同的是:
组合关系:两个类对应的对象(实例化后的变量,内存空间)的生命周期是相同的。体如今代码上,是通过成员变量的创建了部分与团体的关系。
聚合关系:两个类对应的对象(实例化后的变量,内存空间)的生命周期可以不同,体如今代码上,是通过引用或指针创建了部分与团体的关系。

3.1.4 关联关系

关联关系(Association):表示一个类的成员属性中保存了对另一个类的一个实例(或多个实例)的引用。即两个类的实例,在布局上并没有部分与团体这种强关系,仅仅表示布局上(不是成员函数、成员操纵上)有某种内在的接洽而已。
关联关系是类与类之间最常用的一种关系,表示一类对象与另一类对象之间有接洽。
组合、聚合也属于关联关系,是一种强关联关系,是一种特殊的关联关系:部分与团体的关系,只是关联关系的类间关系比其他两种要弱。
关联关系有四种:双向关联、单向关联、自关联、多重数关联。
例如:汽车和司机,一辆汽车对应特定的司机,一个司机也可以开多辆车。
https://img-blog.csdnimg.cn/20201231140405575.png
在多重性关系中,可以直接在关联直线上增加一个数字,表示与之对应的另一个类的对象的个数。
1..1:仅一个
0..*:零个或多个
1..*:一个或多个
0..1:没有或只有一个
m..n:最少m、最多n个 (m<=n)

3.2  操纵关系

3.2.1 操纵上的继续关系:实现关系(Implementation)

告急用来规定接口和实现类的关系。
接口(包括抽象类)是方法的聚集,在实现关系中,类实现了接口,类中的方法实现了接口声明的全部方法。
例如:汽车和轮船都是交通工具,而交通工具只是一个可移动工具的抽象概念,船和车实现了具体移动的功能。
https://img-blog.csdnimg.cn/20201231135808812.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM2MTcyMg==,size_16,color_FFFFFF,t_70
 实现关系本质上是一种继续关系,因此图形表示与继续是相似的,只不过,只有成员函数,没有成员变量,因此用了虚线表示。

3.2.2 依赖关系

依赖关系(Dependence):假设A类的变革引起了B类的变革,则说名B类依赖于A类。
大多数环境下,依赖关系体如今某个类的方法使用另一个类的对象作为参数。
并没有体如今对象的内存布局(成员属性,成员变量)上有某种关系。
依赖关系是一种“使用”关系,特定事物的改变有可能会影响到使用该事物的其他事物,在必要表示一个事物使用另一个事物时使用依赖关系。
例如:汽车依赖汽油,如果没有汽油,汽车将无法行驶。
https://img-blog.csdnimg.cn/2020123114060824.png
备注:
平凡的关联关系本质也是一种依赖关系,依赖关系本质上也是一种关联关系,因此他们的图形是相似的。


[*]平凡的关联关系:内存布局上、成员变量上的依赖关系,通过成员变量关联,即在内存布局上举行关联,因此用的是实线。
[*]依赖关系:成员函数上的依赖关系,通过成员函数举行关联,因此,用的是虚线。

四 总结

这六种类关系中,组合、聚合和关联的代码布局一样,可以从关系的强弱来明白,各类关系从强到弱依次是:继续→实现→组合→聚合→关联→依赖。如下是完整的一张UML关系图。
https://img-blog.csdnimg.cn/20201231140635472.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzM2MTcyMg==,size_16,color_FFFFFF,t_70



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: [架构之路-214]- UML-类图图解、详解、布局化、本质化讲解