1.为什么要用UML
写软件就和盖房子一样,建造的房子结构越复杂,设计师和施工人员之间的交流就越重要,这个时候就体现出设计图图的重要性,设计人员和施工人员通过设计图进行沟通,同理,我们的系统越复杂,参与编写与配置软件的人员之间的交流也就越重要,所以在过去的几年里UML就成为设计师和程序员之间的 建筑蓝图 ,UML提供了分析师,设计师和程序员之间在设计软件时的通用语言。
UML:Unified Modeling Language(统一建模语言),使用UML进行建模的作用:
1)更好的理解问题
2)及早发现错误或者被遗漏的点
3)组员之间的沟通更加方便
4)面向对象软件开发建模,可以更好的描述显示编程的情景
5)对于复杂的系统,如果概要模型做得好,整个系统的模型也会非常的清晰
2.UML介绍
Unified Modeling Language (UML)又称统一建模语言或标准建模语言,是始于1997年一个OMG标准,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到构造和配置。 面向对象的分析与设计(OOA&D,OOAD)方法的发展在80年代末至90年代中出现了一个高潮,UML是这个高潮的产物。它不仅统一了Booch、Rumbaugh和Jacobson的表示方法,而且对其作了进一步的发展,并最终统一为大众所接受的标准建模语言。
UML 规格定义了两大类UML图:结构图( structure diagrams )和行为图(behavior diagrams)
结构图( structure diagrams ):结构图从不同的抽象和实现程度上描述了一个系统和系统构建的静态结构,并且描述了他们直接是如何关联到一起的。
行为图(behavior diagrams):行为图展示了一个系统中的对象的动态行为,它描述了一个系统中的对象如何随着时间变化而变化。
领域模型也叫概念模型,是对现实世界概念类的描述,并非软件对象描述,领域模型不是数据模型。在uml中领域模型被描述为一组没有操作的类图,具体说不是Java里面的软件对象或者具有职责行为的对象。他可以展现领域对象或概念类,概念类之间关联,概念类的属性。
三个要素,类名,属性 ,关联。
任何属性都不表示外键,应该直接使用关联关联到外键所在类。
3.分类
1)类图
泛化:继承关系的一种,子类继承父类的所有行为和属性,子类可以新增新的功能或者重写父类功能。使用带空心三角箭头的实线标示。
箭头指向父类
实现:实现是接口和类的关系,是指类实现了接口中定义的接口,uml中用带空心三角箭头的虚线
箭头指向接口类
关联:在建模过程中必然存在类之间的关系,使类可以感知其他了ode行为和属性,分为单向关联和双向关联
双向关联:被关联的两个类可以感知对方存在
如图在线每端放置一个角色和多重值,对于Route来说我们应该看在bike端的角色和多重值,对于Route来说每个骑行路线对应0个或者多个自行车,0个是因为可能先制定了骑行路线但是还没有找到自行车,多个是因为可以有多个人骑行同一个路线。对于bike来说我们应该看route端的角色和多重值,对于一个bike来说每个自行车对于0个或者多个骑行路线,0个是因为虽然有一个自行车但是我可以不骑行,不指定骑行路线那,多个是因为我一个自行车可以指定多个骑行路线。
上面多重值为0…*,其实还有其他多重值如下表:
表示 | 含义 |
---|---|
0..1 | 0个或1个 |
—- | —- |
1 | 只能1个 |
—- | —- |
0..* | 0个或多个 |
—- | —- |
* | 0个或多个 |
—- | —- |
1..* | 1个或多个 |
—- | —- |
3 | 只能3个 |
—- | —- |
0..5 | 0到5个 |
—- | —- |
5..15 | 5到15个 |
单向关联:一个单向的关联,表示为一条带有指向已知类的开放箭头(不关闭的箭头或三角形,用于标志继承)的实线。如同标准关联,单向关联包括一个角色名和一个多重值描述,但是与标准的双向关联不同的时,单向关联只包含已知类的角色名和多重值描述。
组合关系:组合关系用一条带实心菱形箭头直线表示,如下图表示A组成B,或者B由A组成;是一种强依赖的特殊聚合关系,如果整体不存在了,则部分也不存在了;例如, 公司不存在了,部门也将不存在了;
聚合关系:聚合关系用一条带空心菱形箭头的直线表示,如下图表示A聚合到B上,或者说B由A组成;聚合关系用于表示实体对象之间的关系,表示整体由部分构成的语义;例如一个部门由多个员工组成;与组合关系不同的是,整体和部分不是强依赖的,即使整体不存在了,部分仍然存在;例如, 部门撤销了,人员不会消失,他们依然存在;
依赖关系:依赖关系是用一套带箭头的虚线表示的;如下图表示A依赖于B;他描述一个对象在运行期间会用到另一个对象的关系;是一种临时性的关系,通常在运行期间产生,并且随着运行时的变化; 依赖关系也可能发生变化;依赖也有方向,双向依赖是一种非常糟糕的结构,我们总是应该保持单向依赖,杜绝双向依赖的产生;
注:在最终代码中,依赖关系体现为类构造方法及类方法的传入参数,箭头的指向为调用关系;依赖关系除了临时知道对方外,还是“使用”对方的方法和属性;
2)时序图
时序图(Sequence Diagram)是显示对象之间交互的图,这些对象是按时间顺序排列的。顺序图中显示的是参与交互的对象及其对象之间消息交互的顺序。时序图中包括的建模元素主要有:对象(Actor)、生命线(Lifeline)、控制焦点(Focus of control)、消息(Message)等等。
时序图元素:
角色: 系统角色,可以是人、及其甚至其他的系统或者子系统。
对象:有三种命名方式 1.包括对象名和类名 ;2,。只显示类名不显示对象名,即表示他是一个匿名对象;3.只显示对象名不显示类名。
生命线:
控制焦点: 控制焦点是时序图中表示时间段的符号,在这个时间段内对象将执行相应的操作,用小矩形表示
消息:分为同步消息(Synchronous Message),异步消息(Asynchronous Message)和返回消息(Return Message).如下图所示:
同步消息=调用消息(Synchronous Message):消息的发送者把控制传递给消息的接收者,然后停止活动,等待消息的接收者放弃或者返回控制。用来表示同步的意义。
异步消息(Asynchronous Message): 消息发送者通过消息把信号传递给消息的接收者,然后继续自己的活动,不等待接受者返回消息或者控制。异步消息的接收者和发送者是并发工作的。
返回消息(Return Message): 返回消息表示从过程调用返回
自关联消息:表示方法的自身调用以及一个对象内的一个方法调用另外一个方法。
实例:
场景:完成课程创建功能,主要流程有:
1、请求添加课程页面,填写课程表单,点击【create】按钮
2、添加课程信息到数据库
3、向课程对象追加主题信息
4、为课程指派教师
5、完成课程创建功能
时序图实例分析
1、序号1.0-1.3 完成页面的初始化
2、序号1.4-1.5 课程管理员填充课程表单
3、序号1.6-1.7 课程管理员点击【Create】按钮,并响应点击事件
4、序号1.8 Service层创建课程
5、序号1.9-1.10 添加课程到数据库,并返回课程编号CourseId
6、序号1.11-1.12 添加课程主题到数据库,并返回主题编号topicId
7、序号1.13 给课程指派教师
8、序号1.14 向界面抛创建课程成功与否的消息
时序图(Sequence Diagram)是显示对象之间交互的图,这些对象是按时间顺序排列的。顺序图中显示的是参与交互的对象及其对象之间消息交互的顺序。时序图中包括的建模元素主要有:对象(Actor)、生命线(Lifeline)、控制焦点(Focus of control)、消息(Message)等等。最后,以课程创建功能演示一时序图实例。
原文地址:https://www.cnblogs.com/xiaoxiaoliu/p/10329629.html