软件建模概述 & UML模型图

软件建模

什么是软件建模

将想法通过模型可视化地表达出来,方便记忆和进一步分析,方便团队/同事交流,口语交流容易失真。

软件建模体现了软件设计的思想,在需求和实现之间架起了一座桥梁,通过模型指导软件系统的具体实现。

模型并不是软件系统的一个完备表示,而是所研究系统的一种抽象。

抽象
指导
软件系统
软件模型

如何进行软件建模

软件建模原则

1、选择正确的模型,模型要与现实相联系

2、从不同的视角,使用不同的模型去表示一个系统

3、模型是抽象的,是选取系统某个最显著的特征并进行简化表示,因此需要通过不同的视角采用不同模型表示:

  • **外部视角:**对系统上下文或环境进行建模
  • **交互视角:**对系统及其环境或者系统的构件之间的交互进行建模,建立用例模型
  • **结构化视角:**对系统的组织或者系统所处理的数据的结构进行建模,建立静态模型
  • **行为视角:**对系统的动态行为以及系统如何响应事件进行建模,建立动态模型

软件建模方法

在不同的领域和场景下有不同的软件建模方法,其各自的建模思想和采用的建模工具也不尽相同,如:

  • 结构化方法(Structured Method)
  • 面向对象方法(Object Oriented Method)
  • 基于构件方法(Component Based Method)
  • 面向服务方法(Service Oriented Method)
  • 面向切面方法(Aspect Oriented Method)
  • 模型驱动方法(Model Driven Method)
  • 形式化方法(Formal Method)

本章仅介绍最常用,对开发人员普遍适用的面向对象建模。

软件建模工具

随着面向对象技术的不断发展和应用,形成了面向对象的建模标准,即**UML(Unified Modeling Language)**统一建模语言。UML是面向对象开发中一种通用的图形化建模语言,具有如下特点:

  • **面向对象:**支持面向对象的主要概念,提供了一批基本的模型元素的表示图形和方法,能简洁明了地表达面向对象的各种概念
  • **可视化、表示能力强:**通过UML的模型图能够清晰地表示系统的逻辑模型和实现模型,可用于各种复杂系统的建模
  • **独立于过程:**是系统建模语言,独立于开发过程
  • **独立于程序语言:**用UML建立的软件系统模型可以用Java、C++、Smalltalk等任何一种面向对象的程序设计来实现
  • **易于掌握使用:**UML图形结构清晰,建模简洁明了,容易掌握使用

UML内容组成

UML由三部分组成:

  • **事物:**是UML中重要的组成部分,是UML模型中最基本的面向对象的构造块。它们在模型中属于最静态的部分,代表概念上或物理上的元素。
  • **关系:**把事物紧密联系在一起。
  • **图:**是很多有相互相关的事物的组。
UML
事物
关系
静态
用例图
类图
对象图
部署图
动态
顺序图
合作图
状态图
活动图
结构事物
用例
接口
协作
活动类
组件
节点
行为事物
交互
状态机
组织事物
辅助事物
注释
关联
依赖
泛化
实现
1.1.5

9种UML模型图

用途
用例图
Use-Case Diagram
用于描述角色以及角色与用例之间的连接关系(如:泛化、关联和依赖);说明的是谁要使用系统,以及他们
使用该系统可以做些什么,是一种静态模型
类图
Class Diagram
用于描述系统中的类,以及各个类之间的关系(如:泛化、实现、依赖、关联、聚合、组合)。是一种静态模型
对象图
Object Diagram
与类图极为相似,它是类图的实例,对象图显示类的多个对象实例,而不是实际的类,它描述的不是类之间的关系,
而是对象之间的关系,是一种静态模型
状态图
State Diagram
用于描述类的对象所有可能的状态,以及事件发生时状态的转移条件,是对类图行为上的补充,是一种动态模型
活动图
Activity Diagram
用于描述用例要求所进行的活动,以及活动间的约束关系,有利于识别并进行活动,是一种动态模型
顺序图
Sequence Diagram
也叫序列图或时序图,用于描述参与者与系统对象之间有序的交互过程,强调消息是如何在对象之间被发送和
接收的,是一种动态模型
合作图
Communication Diagram
也叫协作图,与顺序图相似。用于描述对象间动态合作关系。可以看成是类图和顺序图的交集,重点描述对象之间
的相互通信关系。如果强调时间和顺序,则使用时序图;如果强调上下级关系,则选择合作图。是一种动态模型
组件图
Component Diagram
也叫构件图,用于描述代码构件的结构以及各种构件之间的依赖关系,是一种静态模型
部署图
Deployment Diagram
用于描述系统的物理部署。例如计算机和设备,以及它们之间是如何连接件的。是一种静态模型

UML4+1视图

架构设计4+1视图的作用与关系

用例视图:使用用例图来描述

逻辑视图:描述系统的结构组成,使用类图、对象图

行为视图:用于系统运行时的交互过程,使用时序图、合作图、状态图、活动图

实现视图:也叫开发视图,使用组件图

部署视图:使用部署图

常见UML模型图

UML模型在软件开发流程中的应用

软件开发过程中,不同阶段需要用到不同的UML图,选择使用哪些图,需要深刻理解该图的主要用途,以及它表达的优势。

软件开发流程:

需求分析
概要设计
详细设计
编码阶段
测试

需求分析阶段:

​ 常用模型图:用例图

​ 对外部的参与者(Actor)以及它们所需要的系统功能建模,表示客户的需求

概要设计阶段:

​ 常用模型图:类图、对象图、合作图、状态图、时序图、活动图

​ 描述系统的静态结构,描述系统的动态特征

详细设计阶段:

​ 常用模型图:类图、对象图、合作图、状态图、时序图、活动图

​ 在详细设计阶段,把概要设计的结果扩展成技术解决方案,分析阶段的领域问题被嵌入在这个技术基础结构中

编码阶段:

​ 把设计阶段的类转换成某种面向对象程序设计语言的代码

测试阶段:

​ 常用模型图:类图、组件图、部署图

​ 不同的测试阶段使用不同的UML图,如:单元测试使用类图和类的规格说明;集成测试阶段典型的使用组件图、部署图

静态图

用例图

用例图关键元素

描述用例图首先要确定参与者,即角色(Actors),Actors表示提供或接收系统信息的人或系统,他们是与系统有交互作用的人或事物,代表一个系统的使用者或外部通信的目标。

用例是系统中的一个功能单元,被描述为角色与系统的一次交互。用例需要从角色希望系统提供的功能中提取,而不是以系统自身的角度来提取,满足参与者的需求的用例才是好用例。

用例间的常见关系有包含(Include)、扩展(Extend)、泛化(Generalization)。用例也可以叫Use,表示本用例会用到被包含的其他用例,被包含的用例是可以被重用的;扩展用例是可选的,在特定场景下可以补充基础用例,降低基础用例的复杂性。 泛化体现了父子关系,表明存在派生和继承。

类图

类图中的关系,箭头指向较小的部分

1、实现(Realization):

​ 是一种类与接口的关系,表示类是接口所有特征和行为的视线。例如:借阅者能查找书籍。

2、依赖(Dependency):

​ 是一种使用的关系(非持久,局部变量),有单向依赖和双向依赖。但尽量避免使用双向依赖。

3、泛化(Generalization):

​ 是一种继承关系,指定了子类继承父类的所有特征和行为。

4、关联(Association):

​ 是一种拥有的关系(持久的,全局变量),它使一个类知道另一个类的属性和方法。例如:借阅者的节约记录或预约记录。聚合和组合属于特殊的关联关系。

5、聚合(Aggregation):

​ 是整体与个体的关系,可以理解成把个体聚集在一起。个体可以独立分离,聚合为整体可以有更多功能。

6、组合(Composition):

​ 是整体与局部的关系,整体的对象负责代表局部的对象的生命周期,可以理解成整体是由局部组成的。没有局部就无法组成整体。(强依赖关系,局部是必要的)

动态图

动态图用于描述系统的对象交互、活动流程、状态变迁等行为动态模型,通常在完成静态图建模之后进行相应的动态图建模。

动态模型是描述系统的功能是如何完成的,用时序图、活动图、状态图从不同的角度来描述对象和对象之间的交互。

时序图

**时序图是强调消息时间顺序的交互图。**描述了不同对象之间协助完成预期行为的动态过程。顺序图具有直观、形象的优点。对呈现、理解不同对象间的交互关系时序具有较大的帮助。

时序图的主要绘图元素

  • 时序图将交互关系表示为一个二维图
  • 纵向是时间轴,时间沿竖线向下延伸
  • 横向代表了在协作中各独立对象的类元角色
  • 类元角色生命线表示
  • 消息用从一个对象的生命线到另一个对象生命线的箭头表示

设计考虑:

​ 为了突出关键设计步骤和设计意图,只关注主要交互流程,忽略无关异常分支

活动图

活动图用于对目标对象计算流程和工作流程建模

  • 一张活动图本质是一个流程图,它显示系统从一个活动到另一个活动的流程迁移
  • 在完成用例建模后,通过活动图表示用例的活动步骤,用于描述用例模型,有助于用例的动态行为建模
  • 也可以用于通用的流程图建模场景

四种基本建模元素

  • 活动Activity:表示一个执行步骤
  • 活动流Activity line:不同活动间的控制流或数据流
  • 控制符Control node:分支控制符decision/merge,并发控制符fork/join
  • 泳道Swimming line:用于表达不同的活动分组

活动图一般有开始和结束标志

泳道图是一种特殊的活动图,侧重“活动”属于哪个“对象”,同一对象的活动写在一条“泳道(Lane)”里面。

状态图

状态图描述了系统元素的状态条件和响应,它反映了类的对象可能具有的状态,以及状态变化的事件。

并不是所有的类都有相应的状态图,状态图仅用于具有下列特点的类:

具有若干个确定的状态,类的行为在这些状态会收到影响变为其他状态,另外也可为系统描述整体状态图。

状态图可用于类、用例或者整个系统。

主要概念:

  • 状态(State):状态描述了一个类对象生命周期中的一个时间段。体现一个类在当前时间所处的状态。
  • 事件(Event):事件是发生在时间和空间上的值得注意的事情,而这个事情可以引发状态变迁。事件可以分为:信号事件、调用事件、改变事件、时间事件等。
  • 转换(Transition):事件发生后类的状态变迁的过程。转换要有引起转换的触发器事件、监护条件、转换的动作和转换的目标状态。

设计考虑:

​ 为了维护状态的原子性,对于预约书借出过程,分解为两步:首先迁移到可借状态,然后再迁移到借出状态。

顺序图、活动图、状态图对比

顺序图、活动图、状态图都是描述事物的动态行为,其区别对比如下:

类别 建模对象 核心建模元素 建模时机 适用场景
顺序图 多个不同对象的交互过程 Role-Message 在类图完成之后进行 描述复杂的多对象间交互。并发、
分支过多的场景会影响可理解性,不宜太复杂
活动图 (特定对象或不同对象的)
不同活动之间的流动
Activity-Control Flow 在用例图或类图完成之后进行 描述涉及到复杂的活动步骤的用例。
特别是并发、分支等场景。
状态图 (特定对象的)不同状态变迁 State-Transition 在用例图或类图完成之后进行 涉及到复杂的状态变化的场景,也适用于
并发场景,如网络连接的会话状态等。

Tips:

  • 顺序图强调多个不同对象之间交互的先后顺序
  • 活动图强调复杂流程中活动单元的分支处理
  • 状态图强调特定对象在不同事件发生后的状态变化

小结

  • 软件建模是构建正确可信软件系统的基础,是对软件系统的抽象,指导软件系统的实现。
  • 软件建模是通过不同的视角,采用不同的模型去抽象描述一个系统(抽象,不是完整性描述),包括 外部视角、交互视角、结构化视角和行为视角
  • UML(Unified Modeling Language)是面向对象开发中一种通用的图形化建模语言,可视化、表达能力强,独立于过程和程序设计语言,易于掌握和使用。
  • UML包括4种事物、4种关系、9种图。各个元素不是孤立的,是相互有机结合来表示一个软件系统。
  • UML的9种模型又可以分为静态图动态图两大类,静态图描述了系统以及各对象的组织形式,动态图描述了系统以及对象之间的交互活动过程。
  • UML模型贯穿在软件开发流程各个环节。

猜你喜欢

转载自blog.csdn.net/q863672107/article/details/126696831