UML Unified Modeling Language(统一建模语言)是面向对象开发中一种通用的图形化建模语言,本篇内容对UML基础知识及UML的8类图进行初步的学习。
作用:
加强对问题空间和系统任务的理解、改进各方交流、与需求保持一致 和 支持软件重用 等4个方面变现出比其他系统分析方法更好的能力。
UML的用途非常广泛,可以概括为“描述、可视化、构造、记载”4种基本功能,在业务建模、需求分析、系统设计、实现和测试、数据建模、项目管理等阶段任务中均可根据需要采用。
from:https://blog.csdn.net/erlian1992/article/details/51169640
UML建模是建立软件开发文档的一个有效手段,通过UML可视化地描述系统需求,记载软件构成,能够显著地提高文档的质量和可读性,减少编写文档的工作量。 UML实质上是一种系统分析设计专用语言,通过可视化的图形符号结合文字说明或标记可以帮助业务/系统分析员、软件架构师/设计师、程序员等各种建模者有效地描述复杂软件(或业务)的静态结构和动态行为,包括工作流(数据流和控制流)、功能需求、结构元素及关系、架构组成、设计模式、对象协作、事件响应和状态变化等等。
建模技术
UML提供了多种图形可视化描述模型元素,同一个模型元素可能出现在多个图中对应的图形元素,可从多个视图中考察模型。
组成部分
UML建模技术分为结构建模、动态建模和模型管理3个方面。
- 结构建模:从系统的内部结构和静态角度描述系统
在静态视图、用例视图、实施视图和配置视图中适用,采用了类图、用例图、组件图、配置图等图形。
类图描述系统中各类的内部结构(类的属性和操作)及相互见得关联、聚合、依赖关系,包图用于描述系统的分层结构; - 动态建模:从系统中对象的动态行为和组成对象间的相互作用、消息传递来描述系统。
在状态机视图、活动视图和交互视图中适用,采用状态机图、活动图、顺序图和合作图等图形,例如状态机图用于一个系统或对象从产生到结束或从构造到清楚所处的一系列的不同状态。 - 模型管理:描述如何将模型自身组织到高层单元。
在模型管理视图中适用,采用类图。1
- 结构建模:从系统的内部结构和静态角度描述系统
UML基本块构造
UML有3种基本的构造块:事物、关系和图
from:https://blog.csdn.net/erlian1992/article/details/51169640(1) 事物:构成模型图的一些基本图示符号,表示面向对象的基本概念,是对模型中最具有代表性的成分的抽象,包括结构事物、行为事物、分组事物 和注释事物。
- 结构事物: 类(Class)、接口(Interface)、协作(Collaboration)、用例(UseCase)、主动类(ActiveClass)、组件(Component)、节点(node)
- 行为事物:交互(Interaction)、状态机(Statemachine)
- 分组事物:包(Package)
- 注释事物:注解(Note)
(2) 关系:表示基本图示符号之间的关系
关系用来把事物结合在一起,包括依赖、关联、泛化和实现关系。(3)图:聚集相关的事物及关系的组合,是软件系统在不同角度的投影。
- UML从系统不同角度出发,定义用例图、类图、对象图、状态图、活动图、序列图、协作图、构件图、部署图等9种图。
- UML规则
UML有用于描述如下事物的语义规则
- naming-命名
- scope-范围
- visibility-可见性
- integrity-完整性
- excuse-执行
UML公共机制
UML中有4中贯穿整个语言且一致应用的公共机制
- specification-规格说明
- adornment - 修饰
UML表示法中的每一个元素都有一个基本符号,可以把各种修饰细节加到这个符号上。eg:+代表public、-代表private、#代表protect; - general division-通用划分
A类/对象二分法 eg:用例和用例实例(场景)、构件和构件实例,节点和节点实例
B接口/实现二分法 eg:用例和实现他们的协作,操作和实现它们的方法。
- extension mechanism-扩展机制
对UML图示符号的扩展。包括:构造型、标注值和约束。
UML技术适用须知
- 业务建模:以领域专家为主,需求分析人员是主力,系统分析员、架构师可参与
- 需求模型:以需求分析人员为主,系统分析员是主力,领域专家提供指导,架构师和资深开发人员参与
- 设计模型:高层设计模型以架构师为主,系统分析员从需求方面提供支持,资深开发人员从技术实现方面提供支持。详细设计模型则以资深开发人员为主,架构师提供指导。
- 实现模型:以资深开发人员(设计人员)为主,架构师提供总体指导。
- 数据库模型:以数据库开发人员为主,架构师提供指导,资深开发人员(设计人员)予以配合。
注意问题
UML建模过程中,对软件开发过程,必须是用例驱动,架构为中心,迭代和递增的开发。
一. 用例驱动
- 业务分析时,制作业务用例
- 需求工作流分析中,通过用例简历用户希望系统完成的任务模型。
- 分析设计中,用例在设计模型中实现。需要生成用例说明在设计模型中如何通过对象交互执行用例。
- 实施阶段,设计模型是实施的规约,通过用例来实施。
- 测试期间,用例是确定测试用例和测试过程的基础;
- 项目管理过程,用例被用来作为计划迭代式开发的基础;
- 不属实后,构成用户手册阐述的基本内容。
二. 架构为中心
- 对项目进行并保持理智的控制,应付项目中复杂多变的情况,同时保持系统的完整性;
- 大规模复用的有效基础;
- 作为项目管理的基础。
三. 迭代和递增的开发
- 允许变更需求
- 逐步集成元素
- 及早降低风险
- 有助于组织学习和提高
- 提高复用性
- 生成性能更强壮的产品
- 容许产品进行战术改变
- 迭代流程自身可在进行过程中得到改进和精炼
UML建模技术是一种建模语言,指用模型元素来组建整个系统的模型,模型元素包括系统中的类、类和类之间的关联、类的实例相互配合实现系统的动态行为等
UML建模的9类图
from:https://blog.csdn.net/m0_37327416/article/details/71718227
用例图
用例图 是从外部观察者的角度描述系统的作用,重点是这是个什么样的系统。
用例图基于情景,描述情景中人与系统交互时产生的情况。
eg:病人在医院预约看病缴费的
作用:
- 确定特征(要求)
随着系统的分析和设计的形成,新的用例经常会产生新的需求。 - 与客户沟通
他们的简明易懂使得用例图成为开发人员与客户沟通的好方法。 - 生成测试用例
用例情景的收集可能会为这些场景提供一套测试用例。
类图
类图 通过显示系统的类和他们之间的关系来概述系统。是静态显示出什么交互,但不会发生交互。
UML类符号矩形表示,分为类名、属性、操作。
类图之间的关系有三种
- 关联:两个类的实例之间的关系。一个类必须知道另外一个类才能执行。
- 聚合:一个类属于一个集合的关联。。
- 泛化:一个继承连接,表示一个类是另一个类的超类。泛化有一个纸箱超类的三角形。付款是现金,支票是现金、支票和信用卡的超类。
类图作用:按照类图描述各类之间关系,用于抽象设计
软件包和对象图
为了简化复杂的类图,将类分组成包。一个包是逻辑上相关的UML元素的集合。
对象图 显示实例而不是类,用于解释复杂关系的小件,特别是递归关系。一般是对象图实例化了类图。3
以大学部的类为扩展,使用对象图实例化类图为例,具体思路见下:
序列图
类和对象图示静态模型视图,互动图是动态的,描述对象间如何协作。
eg:以进行酒店预订的序列图为例,启动消息序列的对象是一个预留窗口。
表示酒店发出一个自我呼叫确定房间是否可用。酒店将创建一个预订和确认
序列图作用:
- 序列图是一个交互图,详细介绍了如何执行操作-发送什么消息以及什么时间发送。
- 序列图按时间组织,随着时间的组织,在页面逐渐下滑;
- 根据小于消息序列的时间,从左到右列出操作中涉及的对象。
协作图
协作图也是交互图。它们传达与序列图相同的信息,但更加关注于对象角色,而不是发送消息的时间。在序列图中,对象是角色是顶点,消息是连接链接。
使用与序列图中相同的例子,根据酒店发出一个自我呼叫确定房间是否可用。酒店将创建一个预订和确认为例,协作图如下。
状态图
状态图显示了对象可能状态和导致状态改变的转换
eg:模拟网上银行系统的登陆部分,登陆包括输入有效的社会保险号码和个人身份证号码,然后提交消息进行验证。
登陆分为4个不重叠的状态:获取SSN,获取PIN,验证和拒绝。
状态图将焦点集中在正在进行过程上的对象上。
活动图
活动图集中在单个进程中涉及的活动流,活动图显示了这些活动如何依赖于彼此。
活动图即跨职能流程图,表示多个对象之间的交互活动关系
eg:通过ATM从银行账户提款
活动图的三个课程(人员等)是客户、ATM和银行。
组件和部署图
组件是一个代码模块,组件图是类图的物理类型,部署图显示了软件和硬件的物理配置。
eg:以房地产交易的软件和硬件部署图为例
对UML流程性理解
个人学习UML统一建模语言,提出一点自己的总结及思考,具体见下:
UML是一种建模方法,是一种描述,可视化,构造,记载的项目的方法。
适合于项目的个各层次及各方面,具体在每个在软件开发各个时间段都需要进行使用,快速迭代开发,但是各个时间段有各个时间段的侧重点。
整个流程如下:
在需求分析阶段:主要考虑用例图,将用例图完善;使用活动图描述各个区域内需要如何进行交互;使用部署图大概将需要提供接口及组件进行设计;
在概要设计阶段:划分具体类图、对象图,分析清楚设计对象是什么;其次再根据序列图及协作图分析清楚各个对象之间的交互;
在详细设计阶段:使用状态图描述各个对象状态转换,再使用活动图描述详细各个对象之前的交互,获取具体数据;
最后,在使用部署图将详细组件及组件之间部署实现进行调整,获取统一的组件部署及详细设计内容。