UML学习之路
Posted Lee频道
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UML学习之路相关的知识,希望对你有一定的参考价值。
写在前面的话:
UML的出现融合了大批人的经验和智慧,他的初衷是为了研究出一套让全人类都能看的懂的建模语言。类比于软件界的五线谱。就算多个国家的人汇聚一起讨论各自不动对方国家的语言,但是看一张UML图可以大致的知道其表达的意思。因此,画UML图要根据规范,而不是自创。
但是,由于UML自身的复杂性和他不断更新的现状,多数人在使用UML时候都是各搞各的,并没有遵守相应的规范。但是,根据他的初衷和防止产生误解,建议大家还是能够使用规范表达,至少在一个团队中能够保持统一,否则会引起严重的误解。
另一个需要注意的是UML还在逐步发展中,时不时会有新的内容出现,但是如果我们的目的不是专业研究UML,只为了更好的分析系统,那UML2的版本基本已经够用。建议如果想要买书详细研究UML1的就不要买了,现在大部分讲的是UML2.3或UML2.4,已经足够我们使用。
对于该文,没有很多详细的案例讲解,更想要说明的是规则。
标注:UML的基础是面向对象。
一 UML组成
UML的组成主要有:事物、图和关系。
事物:是UML的重要组成部分,主要包括构件、行为、分组、注释;
关系:主要有依赖、关联、泛化、实现;
图:主要有静态图、动态图两大类;
构件:构件事物是UML模型的静态部分,描述概念或者物理元素;包括类、接口、协作、用例、组件、节点;
行为:主要包括交互、状态机(描述事物生命周期的状态序列)
分组:由包实现,描述事物的结构组成。
注释:对模型中的元素进行说明、解释;
依赖:A元素的变动会影响B元素,A叫独立元素,B叫依赖元素;
关联:两个对象直接的关系;
泛化:继承的意思;
实现:完成事情;
静态图:对象的状态与时间无关,包括对象图、类图、包图;
动态图:对象的行为变动,包括状态图、活动图、时序图、协作图;
(各种图之间是可以相互独立相互验证的)
二 面向对象
《大象》中有一句话道出了UML的本质:我们站在一个很高的抽象层次,以高度归纳的视角来看这个世界的运作,就会发现,无论世界多么复杂,无论行业和业务,其本质无非是人、事、物和规则组成的。人驱动系统、事体现过程、物记录结果、规则来控制。
面向对象的精髓是抽象,同时也是OOA的难点所在。
一切都是对象、
对象都是独立的、
对象都是原子性、
对象都是可抽象的、
对象都是有层次性的
一个对象因为其目的不同,可以从不同的角度进行抽象;这个就涉及到了属性和对象的区别;当对象应用到具体的场景,就是对对象的实例化。
下图说明了对象抽象:
标注:UML图。
一 用例图
用例图是面向对象分析的骨架。
他包括三个因素:参与者、用例、边界;
以及三个不同时段的用例:业务用例、概念用例、系统用例。
有一种开发模式叫:用例驱动开发;
参与者:如图用火柴人表示,其中参与者并不一定是使用的用户,可以是外部系统、外部机构、外部设备等;
用例:如图用椭圆表示,椭圆中的文字用“动宾”结构的文字命名。用例是一种行为,至少有一个参与者在边界内。边界内的用例最需要注意的是用例的粒度和关系。用例之间的关系只有:继承、包含、扩展,他们之间没有时间关系,没有判断关系。(继承可以发生在参与者和参与者之间,也可在用例用例之间,不能在参与者和用例之间,继承的两者必须是同一物种。扩展可以理解为一种功能的增强或者分支,在大部分情况下,执行者执行主用例,在特殊情况下被执行的用例就成为了扩展用例。继承是继承者有了主用例的特性,扩展是主用例有了扩展用例的特性。包含的主要作用是复用,大的用例中包含了一个较小的用例,且这个小用例可以多次被复用,即主用例是全部,将包含用例单独作为一个用例)。
边界:用例图中一定要确定用例的边界。
业务用例:完全从业务的角度画UML不涉及任何技术层面的解决方案。
概念用例:从业务用例到系统用例的一个过渡,业务用例是完全没有经过分析,直接的业务,而概念用例是经过分析合并以后的用例图。
系统用例:系统用例已经从问题域抵达解决方案域了;如果系统业务简单则可以直接从业务用例到系统用例。
用例驱动开发:当用例到了系统用例的层面,就需要些用例,下图是网上找的用例模板,可以参考。
二 类图
类图主要元素包括:类名、属性、操作、关系、多重性;
类图同用例图一样也分三个层次:概念层类图、说明称类图、实现层类图
1.类名:方框最上面一行是类名。
2.属性和操作:一般产品经理不会涉及到这个,是技术会有涉及。
3.关系:类与类之间的关系,类好比乐高的块,通过关系的链接,搭建成城 堡。常见的关系有如下几种,一般最常用到的是关联和继承;
4.多重性:就是1对多,多对多的关系。表示的是另一个类与该类。
5.概念性类图:从业务的角度出发,发现业务中的对象,可以与客户交流
6.说明层类图:里面包含了各种接口,但不涉及接口的实现;
7.实现层类图:类图可以直接映射到代码,可以视为伪代码。
三 包图
包是一个容器,如同文件夹一样,它将某些信息分类,形成逻辑单元。包可以容纳任何UML元素,将某些有共同信息的分包。
好包的原则:高内聚第耦合、依赖关系不传递、依赖关系单项且不循环;
如下为常用的几个包的版型:
四 状态图
状态图可以反映一个对象在生命周期内状态的变化;一个对象不仅需要分期与其他对象的关系和属性,还需要分析其从出生到灭亡经历了哪些状态,他们之间是怎么转换的,通过什么操作出发的。
其元素主要包括:状态、开始、结束、转换;
1.状态:一个矩形里面写状态的名称;
2.开始:一个实心的圆;
3.结束: 与开始不同, 实心圆外套了一个空心圆;
4.转换:带接头的线,线上写出转换条件的动作;
并不是所有的对象都需要状态图表示,状态图只有在复杂状态来回切换的情况下更能体现他的好处,如果只是一个简单的状态直接的转换,完全灭有必要使用状态图。
五 活动图
活动图的元素:活动(椭圆表示)、对象(矩形表示)、菱形(条件节点)、开始(实心圆)、结束(两个圆)、分支或汇聚(横条或竖条)、
泳道(按照不同的角色划分,活动过程可以分阶段)
有分支必须有汇聚;(汇聚表示所有分支路径都满足后才能继续往下走)
活动图与状态图的区别:
状态一般是针对某一个对象的,比如图书馆的书:新书、架上、
借出、遗失、归档。
活动描述的是多个对象的一连串的流:采购员购书、信息员录入图书信息、借阅处工作人员上架图书、读者借阅图书、读者反馈遗失、档案员归档图书。
个人觉得可以理解为在状态图中状态转化的内容就是活动图中的活动节点。
六 时序图
时序图用来确定对象职责和接口,强调消息事件的发生顺序,更方便于阐述事件流的过程,但是很难表达对象之间的关系。
时序图主要强调的是消息在对象生命线之间的传递和交互
时序图有四个主要元素:对象、生命线、消息、激活;
1.对象:表示参与交互的对象;
2.生命线:对象被激活时候,生命周期线上会出现一条长条,表示对象存在
3.消息:由对象的生命周期线指向另一个或自身的线;有四种消息;
4.销毁:表示生命周期的终结,绘制在生命线上 ,一般只有着重强调的时候才会用到。
一般时序图是程序员GG绘制的,不会给客户使用;如下为时序图例子。
七 协作图
协作图的元素:对象、消息(消息标有序号表示执行顺序)
协作图与时序图基本无差别,两者可以相互互换;
下图为时序图与协作图之间的转换:
以上是UML中常用到的图,至于在实际中的使用,并不是所有图都需要,主要由业务的复杂度决定。
文章基本讲解的是UML的概念东西,至于具体事例,后期慢慢补。
以上是关于UML学习之路的主要内容,如果未能解决你的问题,请参考以下文章