【软件设计】UML类图怎么看

前言

无论使用哪种语言,都离不开面向过程与面向对象两个流派,而类图是面向对象程序设计中至关重要的一种软件表达形式,如何看懂类图,并设计好的软件架构,是我们作为软件工程师必不可少的技能之一。

今天小黑把类图学习的一些笔记和心得分享出来,供大家参考。

什么是类

了解类图之前,我们需要简单了解一下类的概念

类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。

在面向过程设计中,数据和算法组织成为程序。而面向对象中,数据+算法的理论基础并没有改变,虽然整个程序框架由一个个类组成,每一个类都是独立的数据+算法集合。类的设计遵循单一职责原则,只负责自己的私有数据,调用自己的方法(算法)。通过类将程序组织分类,各自负责各自的逻辑,让整个程序有序化,组织化。

什么是类图

类图(Class Diagram)使用出现在系统中的不同类来描述系统的静态结构,它用来描述不同的类以及它们之间的关系。

类图在面向对象设计中用于组织不同之间的关系,无论是文本编程还是图形化的程序,面向对象的程序如果脱离类图,都将变的理解吃力。一张明了的类图,可以让你省去阅读程序的诸多烦恼。

近期,小黑仿作AddLabel工具时,如果你只看程序,理清各个类之间的关系和组织逻辑将会耗费大量的时间,而一张类图就可轻易的表述不同类之间的组织关系。

下图是LabVIEW自带的类图关系,当类与类之间使用继承关系时,比较容易理解,而使用组合关系,没有类图辅助,看起来将比较困难
841277-20170316233853916-1578207680.png
下图是绘制的类图,从图中可以比较清晰的明确各个类之间的关系
841277-20170316233855026-1093861208.png

如何看类图

在UML类图中,类使用包含类名、属性和操作且带有分隔线的长方形来表示,使用Label的类图作为例子讲解
841277-20170316233855745-135196035.png
在该类图中,包含有三部分,分别是类名、类的属性、类的操作

第一部分是类的名称

每一个类都有一个名称,在UML类图中作为类与类之间的区别
841277-20170316233856198-481842523.jpg
对应的LabVIEW代码如下图所示
841277-20170316233856604-314744682.png

第二部分为类类的属性

属性是指类的性质,即类的成员变量。一个类可以有任意多个属性,也可以没有属性。类的属性也即作为最小信息单元的数据结构,每一个类都有属于自己的数据结构。

标准的类图属性由以下内容组成

可见性 名称:类型[缺省值]

这里我们表述的Label由text,textcolor,backgroundColor等属性组成
841277-20170316233857338-95900673.png
对应LabVIEW中的数据结构保存于Label.ctl中
841277-20170316233858526-484234343.png

这里需要说明的是,属性名称前的-号代表可见性 “可见性”表示该属性对于类外的元素而言是否可见,包括公有(public)、私有(private)和受保护(protected)三种,在类图中分别用符号+、-和#表示。

在LabVIEW同样具有不同访问属性的设计,其中如Label.ctl上方显示的红色小钥匙代表私有(private)属性
841277-20170316233859010-261968030.png
841277-20170316233859370-857884695.png
使用黄色小钥匙的代表受保护的属性(protected)
841277-20170316233859666-1129397697.png
如果没有钥匙,则代表访问类型为公有(public)
841277-20170316233859932-1904268440.png
LabVIEW的私有属性确保了类中的数据只能被类内部访问,外部需要通过访问器才可以更改类内部的数据
841277-20170316233900448-695907146.png

第三部分为类的方法

类的方法可以通过如下形式表达:

可见性 名称(参数列表) [ : 返回类型]

Label类中由于SetLabelPosition没有返回值,所以省略不写,只表示这是一个公共的方法,并且有传入的Cluster参数
841277-20170316233901057-1351860968.png
类图与LabVIEW对应关系如下图所示:
841277-20170316233902166-1059246354.png

类图的组织关系

在类图中,不同的类之间存在着不同的关系,只有使用合适的表达符号才可以表述不同类之间的关系

继承关系

类与类之间的继承关系,可以表征类的基本特性,类图中,AddWireLabel继承了Actor,所以使用继承的符号来连接两个类图
841277-20170316233902666-1740502907.png

依赖关系

依赖关系指的是一个类在计算的时候用到了另一个类的参数。而这种使用关系是具有偶然性的、、临时性的、非常弱的,但是B类的变化会影响到A;

841277-20170316233903088-103117200.png
## 关联关系
关联(Association)关系是类与类之间最常用的一种关系,它是一种结构化关系,用于表示一类对象与另一类对象之间有联系,如汽车和轮胎、师傅和徒弟、班级和学生等等。
841277-20170316233903541-1694042236.png

关联关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的、关联可以是

  • 双向关联
  • 单向关联
  • 自关联
  • 多重性关联

    聚合关系

    聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享

这里的Label相对于Segment就是一种聚合关系,判断依据就是,Label不仅可以作为Segment的Label,也可以作为其他如矩形,Wire的label
841277-20170316233905151-503058019.png

### 组合关系
组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束

这里线和线段的关系就属于组合关系,判断依据就是,如果没有线,线段就不会存在
841277-20170316233906182-721908017.png

在Viso中,每一种对应关系都给出了曲线应该具有的表示方法(复合就是组合的意思),有兴趣的可以深入了解
841277-20170316233906698-955915462.png

总结

本节作为面向对象基础,向大家介绍了类图的基本识别方法,其他的内容如果感兴趣可以百度或者谷歌相关具体的资料。


后记

小黑最近正在不停的充电中,学习任务比较多,所以没能及时更新相关知识,让大家久等了。后期小黑会给自己制定一些写作计划,保证可以稳定的输出一些文档,期待与大家的互动与交流~





转载于:https://www.cnblogs.com/EltonLiang/p/6562270.html

UML类图是一种常用的软件设计工具,用于表示类的结构和关系。以下是一些常见的UML类图设计规范: 1. 类名:使用大驼峰命名法(PascalCase)命名类名,并尽量使用清晰、具有描述性的词汇来表示类的功能。 2. 属性:在类图中,属性以名称:类型的形式表示。属性名称使用小驼峰命名法(camelCase),并尽量避免使用简写或缩写,以增强可读性。 3. 方法:方法以名称(参数列表):返回类型的形式表示。方法名称同样使用小驼峰命名法,并尽量遵循动词加名词的命名规则,清晰地表达方法的功能。 4. 可见性:在UML类图中,属性和方法可以指定可见性,包括public(+)、private(-)、protected(#)和包级私有(~)。根据设计需求和访问控制原则,为属性和方法指定适当的可见性。 5. 关联关系:在类图中,关联关系通过连接两个类之间的线表示。可以使用无箭头线表示双向关联,箭头指向关联方表示单向关联。 6. 继承关系:继承关系使用带空心三角形的实线表示,箭头指向父类。子类继承了父类的属性和方法。 7. 实现关系:实现关系使用带空心三角形的虚线表示,箭头指向实现的接口。类需要实现接口中定义的所有方法。 8. 类之间的依赖关系:依赖关系使用带箭头的虚线表示,箭头指向被依赖的类。依赖关系表示一个类使用了另一个类作为方法参数、局部变量或返回类型。 9. 类图布局:根据设计需要,可以将相关联的类分组排布在一起,以增强可读性。 这些是常见的UML类图设计规范,具体的设计方式还需根据项目需求和团队约定进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值