我常常陷入深思,我的女朋友为什么又生气了?是麻辣烫不好吃,还是韩剧不好看。直到有一天,她和我说,我知道你说xxx是为了我好,也很有道理,但你这样的表达让我瞬间不想理你。我想大家也有类似的经历。很多时候,我们明明出于好心,但由于不会表达,反而适得其反。
学会表达是一件很重要的事情。生活中,良好的表达让亲人、伴侣和朋友间的关系更融洽;工作中,团队内的表达关系着工作效率;展示时的表达影响着项目最终评定,甚至连你毕业时的论文答辩、职级晋升时的考核也考验着你的表达能力。
软件开发亦是如此。大中型软件系统开发工作一般需要大量的软件开发人员统一协作工作,有时开发周期还很长。作为一名合格的程序员,如何理解前辈们设计好的框架和已完成的工作,并让别人快速准确的读懂你写的代码,是一件很重要的事情。因此,本文旨在介绍软件系统的建模和表达方法。
UML(Unified Modeling Language)统一建模语言,又称标准建模语言,是用于软件系统在开发阶段的可视化建模。由于软件系统开发需要经过面向对象分析(OOA)、面向对象设计(OOD)和面向对象编程(OOP)三个阶段,而每个阶段都需要统一的符号设计描述和交流。而UML作为一种通用语言,能有效消除不必要的差异,从而为许多开发人员广泛使用。
本文将介绍UML基本概念、特点、种类和应用。
一、UML基本概念
UML是在软件开发阶段,说明、可视化、建构和书写一个面向对象软件系统的的方法,其目标是以面向对象图的方式来描述任何类型的系统,具有很宽的应用领域。一方面可以对任何具有静态结构和动态行为的系统进行建模,另一方面适用于系统不同开发阶段,利于系统后期的测试和维护。
二、UML特点
1.UML消除了各种建模语言间不必要的差异而具有很强的通用性;
2.UML同样适用于并行、分布式系统的建模和表达。
3.UML是一种建模语言和表达方法,而不是一个开发过程。
三、UML分类
UML在系统开发中有三个主要模型,如图3-1。
1.功能模型:从用户的角度展示系统的功能,如用例图
2.对象模型:采用对象、属性、操作、关联等概念展示系统的结构和基础。
2.1类图:描述系统中类的静态结构的图
2.2包图:对构成系统的模型元素进行分组整理的图
2.3对象图:系统中的多个对象在某一时刻的状态。
2.4构件图:一种描述系统的静态实现的图
2.5部署图:定义系统中软硬件的物理体系结构的图
2.6组合结构图:表示类或者构建内部结构的图
3.动态模型:展现系统的内部行为。
3.1顺序图:对象之间的动态合作关系,强调对象发送消息的顺序,同时显示对象之间的交互
3.2活动图:描述了业务实现用例的工作流程
3.3状态图:是描述状态到状态控制流
3.4时序图:表示生命线状态变化的图
3.5交互概览图:用活动图来表示多个交互之间的控制关系的图
3.6协作图:描述对象之间的协助关系
四、UML应用
根据平时的使用频率,本文着重介绍UML类图。面向对象软件中的基本单元是类,描述类的内部结构和类与类之间的关系,是一种静态结构图。UML类图用三个矩形表示,最上边部分为类的名称,中间部分为类的属性,最下边部分为类的方法,如图4-1。
图4-1
常见类图有以下几种关系:泛化(Generalization),实现(Realization),组合(Composition),聚合(Aggregation),关联(Association),依赖(Dependency)。
关系名称 | 含义 | 举例 | 表示方法 |
泛化 | 即继承,一般与特殊的关系 | 汽车和自行车泛化于交通工具 | 带三角箭头的实线,箭头指向父类。如图4-2。 |
实现 | 即接口,表示类是接口所有特征和行为的实现 | 汽车的前行通过驾驶 | 带三角箭头的虚线,箭头指向父接口。如图4-3。 |
组合 | 整体与部分的关系,但部分不能离开整体而单独存在 | 公司是整体,部门是部分 | 带实心菱形的实线,菱形指向整体。如图4-4。 |
聚合 | 整体与部分的关系,且部分可以离开整体而单独存在 | 汽车是整体,玻璃窗和轮胎是部分 | 带空心菱形的实线,菱形指向整体。如图4-5。 |
关联 | 一种拥有的关系,组合和聚合都属于关联关系 | 汽车拥有前进目的地 | 带普通箭头的实线,指向被拥有者。如图4-6。 |
依赖 | 一种使用的关系,一个类的实现需要另一个类的协助 | 汽车的运动依赖汽油 | 带普通箭头的虚线,箭头指向被依赖者。如图4-7。 |
图4-2
图4-3
图4-4
图4-5
图4-6
图4-7
本文粗浅的介绍了UML的基本概念、分类和简单应用。为了帮助大家深入学习,本文给大家推荐《UML用户指南》(第2版),该书详细介绍了软件系统的基本结构、高级结构、体系结构、基本行为和高级行为的建模方法,适用于进行软件开发、部署和维护人员。关注公共号,后台回复UML即可获取电子版书籍。
申明:本文属于小编平时学习的心得和总结,不当之处欢迎大家批评指正。