UML|UML统一建模语句(摘自《疯狂 Java 讲义》)


UML统一建模语句

    • 用例图
    • 类图
      • 1.关联
      • 2.泛化
      • 3.依赖
    • 组件图
    • 部署图
    • 顺序图
    • 活动图
    • 状态机图

面向对象软件开发需要经过 OOA(面向对象分析) 、OOD(面向对象设计) 和 OOP(面向对象编程)三个阶段,OOA 对目标系统进行分析,建立分析模型,并将之文档化;OOD 用面向对象的思想对 OOA 的结果进行细化,得出设计模型。 OOA 和 OOD 的分析、设计结果需要统一的符号来描述、交流并记录,UML 就是这种用于描述、记录 OOA 和 OOD 结果的符号表示法。
UML2.0 一共包括13种 正式图形:
  • 活动图
  • 类图
  • 通信图
  • 组建图
  • 复合结构图
  • 部署图
  • 交互概观图
  • 对象图
  • 包图
  • 顺序图
  • 状态基图
  • 定时图
  • 用例图
用例图 用例图用于描述系统提供的系列功能,而每个用例则代表系统的一个功能模块。
用例图的主要目的是帮助开发团队以一种可视化的方式理解系统的需求功能,用例图对系统的实现不做任何说明,仅仅是系统功能的描述。
用例图包括:
  • 用例(以一个椭圆表示,用例的名称放在椭圆的中心或椭圆下面)
  • 角色(Actor,也就是与系统交互的其他实体,以一个人形符号表示)
  • 角色和用例之间的关系(以简单的线段来表示)
  • 系统内用例之间的关系
用例图一般表示出用例的组织关系 – 要么是整个系统的全部用例,要么是完成具体功能的一组用例。
UML|UML统一建模语句(摘自《疯狂 Java 讲义》)
文章图片

用例图通常用于表达系统或者系统范畴的高级功能。
使用场景:主要用于需求分析阶段,用于描述系统实现的功能,方便与客户交流,保证系统需求的无二性,用实例图表示系统外观,不要指望用例图和系统的各个类之间有任何联系。不要把用例做得过多,过多的用例将导致难以阅读,难以理解;尽可能多的使用文字说明
类图 类图是最古老、功能最丰富、使用最广泛的UML图。类图表示系统中应该包含哪些实体,各个实体之间如何关联。
类的类图包含三个部分:
  • 类的名称(最上面的部分)
  • 类的属性(中间的部分)
  • 类的方法(最下面的部分)
类之间的关系:
  • 关联(包含聚合、组合)
  • 泛化 (与继承同一个概念)
  • 依赖
1.关联
它体现的是两个雷、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且上方的关系一般是平等的、关联可以是单向、双向的;表现在代码层面,为被关联类B 以类属性的形式出现在关联类 A 中,也可能是 关联类 A 引用了一个类型为被关联类 B 的全局变量;
UML|UML统一建模语句(摘自《疯狂 Java 讲义》)
文章图片

2.泛化
泛化与继承是同一个概念,都是指子类是一种特殊的父类,类与类之间的继承关系是非常普遍的,继承关系使用带空心三角形的实线表示。
UML|UML统一建模语句(摘自《疯狂 Java 讲义》)
文章图片

3.依赖
如果一个类的改动会导致另一个类的改东,则称两个类之间存在依赖。依赖关系使用带剪头的虚线表示,其中剪头指向被依赖的实体。依赖的常见可能原因如下:
  • 改动的类将消息发送给另一个类。
  • 改动的类以另一个类作为数据部分。
  • 改动的类以另一个类作为操作参数。
组件图 对于现代的大型应用程序而言,通常不只是单独一组类所能完成的,通常会由一个或多个可部署的组件组成。
组件图提供系统的物理属兔,它的用途是显示系统中的软件对其他软件组件的依赖关系。组件图可以在一个非常高的层次上显示。
组件图通常包括:
  • 组件
  • 接口
  • Port
UML 使用带UML|UML统一建模语句(摘自《疯狂 Java 讲义》)
文章图片

符号的矩形来表示组件,使用圆圈代表接口,使用位于组件边界上的小矩形代表Port。
组件的接口表示它能对外提供的服务规范,这个接口通常有两种表现形式:
  • 用一条实现连接到组件边界的圆圈表示。
  • 使用位于组件内容的圆圈表示。
UML|UML统一建模语句(摘自《疯狂 Java 讲义》)
文章图片

部署图 现代的软件工程早已超出早期的单机程序,整个软件系统可能是跨国家、跨地区的分布式软件,软件的不同部分可能需要部署在不同地方、不同平台之上。部署图用于描述软件系统如何部署到硬件环境中,它的用途是显示软件系统不同的组件将在何处物理运行,以及它们将如何彼此通信。
部署图中的符号包括组件图中所使用的符号元素,另外还增加了节点的概念:节点是各种计算资源的通用名称,主要包括处理器和设备两种类型。UML 中使用三位立方体来表示节点,节点的名称位于立方体的顶部。下图是一个简单的部署图。
UML|UML统一建模语句(摘自《疯狂 Java 讲义》)
文章图片

整个应用分为5个组件:Student、Administrator、应用持久层、Student数据库和 UI 界面组件,部署图准确地表现了各组件之间的依赖关系。
顺序图 顺序图显示具体用例的详细流程,并且显示流程中不同对象之间的调用关系,同时还可以很详细地显示对不同对象的不同调用。顺序图描述了对象之间的交互,重点在于描述消息及其时间顺序。
顺序图有两个维度:
  • 垂直维度(以发生的时间顺序显示消息/调用的序列)
  • 水平维度(显示消息被发送到的对象实例)
顺序图的关键在于对象之间的消息,对象之间的信息传递就是所谓的消息发送,消息通常表现为对象调用另一个对象的方法或方法的返回值,发送者和接收者之间的箭头表示消息。
绘制:
顶部每个框表示每个类的实例(对象),框中的类实例和类名称之间用冒号和空格来分隔,例如 userService:UserService。
如果某个实例向另一个实例发送一个消息,则绘制一条指向接受类实例的带箭头的连线,并把消息/方法的名称放在连线上面。
对于某些特别重要的消息,还可以绘制一条带箭头的指向发起类实例的虚线,将返回值标注在虚线上,绘制带返回值的信息可以使得序列图更易于阅读。
UML|UML统一建模语句(摘自《疯狂 Java 讲义》)
文章图片

消息可以向两个方向扩展,消息穿梭在顺序图中,通常应该把消息发送者和接受者相邻摆放,尽量避免跨越多个对象。对象的激活期不是其存在时间,而是它占据CPU的执行时间,绘制时,激活期要精确。
活动图 活动图和状态机图都被称为演化图,其区别和联系如下:
活动图: 用于描述用例内部的活动和方法的流程,如果除去活动图中的并行活动描述,它就变成流程图。
状态机图:描述某一对象声明周期中需要关注的不同状态,并会详细描述刺激对象状态改变的事件,以及对象状态改变时所采取的动作。
【UML|UML统一建模语句(摘自《疯狂 Java 讲义》)】活动图的5个要素 :
  • 状态:状态是对象响应事件前后的不同面貌,状态是某个时间段对象所保持的稳定态,目前的软件计算都是稳定态的,对象的稳定态是对象的固有特征,一个对象的状态一般是有限的。有限状态的对象是容易计算的,对象的状态越多,对象的状态迁移越复杂,对象状态可以想象成对象演化过程中的快照。
  • 事件:来自对象外界的刺激,通常的形式是消息的传递,只是相对对象而发生了事件。事件是对象状态发生改变的原动力。
  • 动作:动作是对象针对所发生事件所做的处理,实际上通常表现为某个方法被执行。
  • 活动:活动是动作激发的后续系统行为。
  • 条件:条件指事件发生所需要具备的条件。
对于激发对象状态改变的事件,通常有如下两种类型。
  • 内部事件:从系统内部激发的事件,一个对象的方法(动作)调用(通过事件激活)另一个对象的方法(动作)
  • 外部事件:从系统边界外激发的事件,例如用户的鼠标、键盘动作。
活动图主要用于描述过程原理、业务逻辑以及工作流技术。活动图非常类似于传统的流程图,它也使用圆角矩形表示活动,使用带箭头的实体表示事件;区别是活动图支持并发。
UML|UML统一建模语句(摘自《疯狂 Java 讲义》)
文章图片

如果将这个活动图的两支分开,每个分支就是传统的流程图,每个活动依次向下,遇到条件分支使用菱形框来表示条件。与传统的流程图不同的是,活动图可以使用并行分支分出多条并行活动
状态机图 状态机图表示某个对象所处的不同状态和该类的状态转换信息。实际上,通常只对“感兴趣 ”的对象绘制状态机图。也就是说,在系统活动期间具有三个或更多潜在状态的对象才需要考虑使用状态机图进行描述。
状态机图的符号集包括5个基本元素。
  • 初始转台,使用实心圆来绘制。
  • 状态之间的转换,使用具有带箭头的线段来绘制。
  • 状态,使用圆角矩形来绘制。
  • 判断点,使用空心圆来绘制。
  • 一个或者多个终止点,使用内部包含实心圆的圆来绘制。
    UML|UML统一建模语句(摘自《疯狂 Java 讲义》)
    文章图片

    推荐阅读