uml事务、关系和图
前言
uml结课了,所以在自己对这门课有印象的时候对这门课l做一个简单的总结,方便自己的复习和回顾,如果有那里错误或者不全面的地方,可以留言讨论。
uml基本构造块
UML的基本构造块分为:事物,关系和图。
事务
-
事务分为结构事务、行为事务、分组事务、注释事务。
-
结构事务
-
UML中的名词,它是模型的静态部分,描述概念或物理元素。
包括:
类:具有相同属相和相同操作,相同关系相同语义的对象的描述。
接口:描述元素的外部可见行为,即服务集合的定义说明。
协作:描述了一组事物间的相互作用的集合。
用例:代表了一个系统或系统的一部分行为,是一组动作序列的集合。
主动类:是这样的类,其对象至少拥有一个进程或线程,因此它能启动控制活动。
构件:系统中物理存在,可替换的部件。
节点:运行时存在的物理元素。
-
-
行为事务
-
UML中的动词,它是模型图的动态部分,描述跨越空间和时间的行为。
包括:
交互:实现某功能的一组构件事物之间的消息的集合,涉及消息、动作序列、链接、
状态机:描述事物或交互在生命周期内响应事件所经历的状态序列。
-
-
分组事务
-
分组事物:UML模型图的组织部分,描述事物的组织结构。
包:把元素组织成组的机制。
-
-
注释事务
-
注释事物:UML模型图的解释部分,用来对模型中的元素进行说明,解释。
注解:对元素进行约束或解释的简单符号。
-
-
关系
-
六种关系:泛化关系,关联关系(关联,聚合,组合),依赖关系,实现关系
六种关系的耦合性:泛化=实现>组合>聚合>关联>依赖
-
依赖:表示为一个类A使用另一个类B,这种使用关系是具有偶然性的、临时性的、非常弱的,但是类B的变化会影响到类A,是use a关系。
-
表现在生活中,比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖;表现在代码层面如果类A依赖于类B,那么类B可以是类A的局部变量,或类A方法的参数,或静态方法的调用。
-
图示:虚线加箭头(箭头指向的是被依赖的那一方)
-
举例:
-
说明:动物有几大特征,比如有新陈代谢,能繁殖。而动物要有生命力,需要氧气、水以及食物等。也就是说,动物依赖氧气和水。他们之间是依赖关系(dependency),用虚线加箭头来表示。
-
-
泛化: 泛化即继承关系。泛化是一种特殊/一般关系,特殊元素(子元素)的对象可替代一般元素(父元素)的对象。用这种方法,子元素共享了父元素的结构和行为。是is-a关系,具体表现为类与类的继承,接口与接口的继承。
泛化指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系;在Java中此类关系通过关键字extends明确标识,在设计时一般没有争议性。
- 图示:实线+空心三角
- 举例:
-
实现:是类元之前的语义关系,在该关系中一个类元描述了另一个类元保证实现的契约。实现指的是一个class类实现interface接口(可以是多个)的功能;实现是类与接口之间最常见的关系;在Java中此类关系通过关键字implements明确标识,在设计时一般没有争议性。
- 图示:虚线+空心箭头
- 举例:
-
关联:关联描述了两个或多个类之间的结构性关系。表示类与类之间的联接,它使一个类知道另一个类的属性和方法。关联体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的、关联可以是单向、双向的;表现在代码层面,假如类A关联了类B,则类B是类A的全局变量(注意是全局变量,再看看上面的依赖关系),大多数关联都是单向关联,这比较容易维护,关于关联,在生活中我们常会说,类A持有类B的引用。为被关联类B以类属性的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量。
-
普通关联:
- 图示:实现加箭头(单向关联) 实现(双向关联)
- 举例:
-
聚合: 聚合关系是特殊的关联关系,是一种强的关联关系,他体现的是整体与部分关系,即has-a的关系,但是整体和部分是可以分离的,注意,是可以分离的。他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如计算机CPU、公司与员工的关系等;表现在代码层面,和关联关系是一致的,只能从语义级别来区分。
普通关联关系的两个类处于同一层次上,是平级的,而聚合关系的两个类处于不同的层次,一个是整体,一个是部分。同时,是一种弱的“拥有”关系。体现的是A对象可以包含B对象,但B对象不是A对象的组成部分。具体表现为,如果A由B聚合成,表现为A包含有B的全局对象,但是B对象可以不在A创建的时刻创建,这句话非常有意义,它在代码中通常体现成依赖注入的setter方法,即A对象可以随时创建B对象,再想想这不就体现了整体和部分是可以分离了吗?创建整体的时候可以不创建部分。
- 图示:空心菱形+实线+箭头
- 举例:
-
组合:组合也是关联关系的一种特例,他体现的是一种contains-a(拥有)的关系,这种关系比聚合更强,也称为强聚合;它同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;比如你和你的大脑;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;表现在代码层面上,如果A由B组成,那么A就包含B的全局变量,并在创建A的同时创建B,在代码上我们通常是使用构造函数进行实现,也是依赖注入中构造函数的实现。
- 图示:实心菱形+实线+箭头
- 举例:
-
-
图
-
*UML的九种图+*包图
UML的九种图:用例图,类图,对象图,状态图,活动图,序列图,协作图,构件图,部署图。
-
用例图:用例图描述角色以及角色与用例之间的连接关系。说明使用这个系统的人都有谁,以及这些人使用这个系统能做些什么。
- 用例方法是完全从外部来定义系统功能,它把需求和设计完全的分离开来。我们不用关心系统内部是如何完成各种功能的,系统对于我们来说就是一个黑箱子。
- 用例图(机房收费系统):
-
类图:类图描述系统中的类,以及各个类之间的关系,类图能够让我们在编码前对系统有个全面的认识。类图是一种静态模型,类图代表面向对象系统,类图其他图定义的基础。类图是一个静态图,描述一个系统的静态视图,用于前期部署。
- 类图(机房收费系统):
- 类图(机房收费系统):
-
对象图:对象图表示一组对象及他们之间的联系,它是系统的详细状态在某一时刻的快照,常用于表示复杂类图的一个实例。UML中对象图与类图具有相同的表示形式。对象图与类图类似,它是类图的实例化,显示类的多个实例化,不是实际的类,描述对象间的关系,用来建立系统原型。在UML中,对象图的使用相当有限,主要用于表达数据结构的实例,以及了解系统在某个特定时刻的具体情况。
- 对象图:
- 对象图:
-
状态图:用来描述一个特定对象的所有可能状态以及由于各种事件的发生而引起的状态之间的转移。
-
状态图的图符(状态,转移,起点,终点)
-
状态图(Statechart Diagram)是描述一个实体基于事件反应的动态行为,显示了该实体如何根据当前所处的状态对不同的事件做出反应的。通常我们创建一个UML状态图是为了以下的研究目的:研究类、角色、子系统、或组件的复杂行为。
一般可以用状态机对一个对象的生命周期建模,状态图用于显示状态机(State Machine Diagram),重点在与描述状态图的控制流。
-
状态图:
-
-
活动图:阐明业务用例实现的工作流程。
- 活动图是UML用于对系统的动态行为建模的另一种常用工具,它描述活动的顺序,展现从一个活动到另一个活动的控制流。活动图在本质上是一种流程图。活动图着重表现从一个活动到另一个活动的控制流,是内部处理驱动的流程。
- 活动图:
-
序列图(时序图): ·时序图用来显示参与者执行某项功能时所要经历的时间顺序,时序图是一种交互图,展示对象间的交换顺序。纵向是时间轴,时间沿竖线向下延伸。横向轴代表了在协作中各独立对象的类元角色。类元角色用生命线表示。当对象存在时,角色用一条虚线表示,当对象的过程处于激活状态时,生命线是一个双道线。消息用从一个对象的生命线到另一个对象生命线的箭头表示。箭头以时间顺序在图中从上到下排列。
- 时序图:
- 时序图:
-
协作图:UML协作图是一种交互图,强调的是发送和接收消息的对象之间的组织结构。
- 与序列图不同,UML协作图显示了对象之间的关系。序列图和UML协作图表述的是相似的信息,但表述的方式却不同。UML协作图显示对象之间的关系,它更有利于理解对给定对象的所有影响,也更适合过程设计。UML协作图的格式决定了它们更适合在分析活动中使用。它们特别适合用来描述少量对象之间的简单交互。随着对象和消息数量的增多,理解UML协作图将越来越困难。此外,UML协作图很难显示补充的说明性信息,例如时间、判定点或其他非结构化的信息,而在序列图中这些信息可以方便地添加到注释中。
- 协作图:
-
构件图:主要用于描述各种软件构件之间的依赖关系。构件图是从软件架构的角度来描述一个系统的主要功能,如子系统、类、包、构件等。构件图提供系统物理视图,在一个非常高的层次上显示系统中的构件与构件之间的依赖关系。使用构件最重要的是复用。
- 构件图:
-
部署图:部署图用来建模系统的物理部署,如计算机和设备,及它们之间的关联关系。部署图的使用者为开发人员,系统集成人员和测试人员。
- 部署图:
-
-
包图(不是uml九中图):
-
图是一种维护和描述系统总体结构的模型的重要建模工具,通过对包中各个包以及包之间关系的描述,展现出系统的模块与模块之间的依赖关系。
包图的作用:包图可以描述需求,设计的高阶概况;包图通过合理规划自身功能反应系统的高层架构,在逻辑上将系统进行模块化分解;包图最终是组织源码的方式。
包被描述成文件夹,可以用于UML任何一种的图上。
-
包图:
-