第一节:初步认识UML
1.UML中的元素
用例、类、接口、组件等
2.UML中的四种关系
关联、依赖、继承、实现
3.UML中的九种图
用例图、类图、对象图、状态图、时序图、协作图、活动图、组件图、配置图UML学习
- Unified Modeling Language(UML),又称统一建模语言
- 支持模型化和软件系统开发的图形化语言
- 描述软件开发的各个阶段
进一步认识UML
- UML是为面向对象开发提供建模的
- 一般是为软件设计提供开发说明的
- UML的目的是为了用简洁的方式说明系统的需求、功能、结构。便于开发人员、用户、维护人员了解软件系统
- UML构建出的是一个模型。就像一座建筑的框架和功能、以及如何去盖这座楼。(设计图?)
- UML是一种语言,具有一些标准。(Rational Rose、EA等专业工具绘制)
- UML的核心就是抽象、分解。将问题分解,抽象为一个个小模块。然后分而治之。
第二节:UML中的常用元素
类:相同属性对象的集合
接口:类或组件提供的,可以完成特定功能的一组操作的集合
用例:系统的一个功能
(用例通常与某个角色相互关联,代表该角色使用此功能)
节点:一个状态或一个动作
(如下图的状态节点以及判定节点等)
组件:可替换的功能块
辅助事物:包
注释
行为事物:四种关系(依赖、关联、继承、实现)的交互
第三节:UML四种关系——依赖
UML中的四种关系
依赖关系(Dependency)
- 表示一个类使用(Use)另一个类,是四种关系中最弱的一种关系
- 依赖关系是单向的(不推荐双向依赖)
- 例如动物依赖水
具体的实现代码有三种形式
(注:被依赖的类作为局部变量而不能作为成员变量,否则转化为关联关系)
- Water是公共的类,Animal可以调用
- Water是Animal的一个方法中的变量
- Water是Animal函数的参数或者返回值
水类
动物类
第四节:UML四种关系——关联
关联关系(Association)
- 表示一个类拥有(has)另一个类,关联相对于依赖来说大大增强
- 分为聚合和组合,例如雁群和大雁(聚合,较弱),大雁和翅膀(组合,较强)
- 关联关系比依赖关系更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的、关联可以单向、双向的
- 具体代码表现为被关联类作为一个全局变量或属性
翅膀类
大雁类(翅膀与大雁间存在组合关系)
雁群类(大雁与雁群间存在聚合关系)
第五节:UML四种关系——泛化
泛化关系(Generalization)
- 是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力
- 继承是类与类或者接口与接口之间最常见的关系
- 是一种父子关系,两个类之间的关系非常强
- 例如鲨鱼继承鱼,麻雀继承鸟
- 代码上表现为继承,在java中使用extends关键字
鱼类
鲨鱼类(通过extends关键字继承Fish类)
数据库访问对象基类
具体数据库访问对象类(继承DaoBase)
父接口
子接口(继承父接口。可以通过接口实现多继承)
第六节:UML四种关系——实现
实现关系(Realization)
- 是一个class类实现interface接口(可以是多个)的功能(是类与接口的关系)
- 是一种最常见的关系,设计时鼓励使用
- 接口是一种功能的抽象。例如有两个接口:飞翔、捕食。一个鸟(class)类可以实现这两个接口,实现以后,就具有这两个接口所拥有的功能
- 在java代码中使用关键字implements表示
飞翔接口
捕食接口
Bird类(继承Fly接口及Prey接口,并实现其方法)
第七节:UML中的九种图——用例图
用例图实现关系(Use Case Diagram)
- 作用是帮助开发团队以一种可视化的方式理解系统的功能需求,捕捉系统的需求,是需求分析阶段必备的工具
- 用例:指一个系统的功能单元
- 用例图由用例和角色两部分构成,主要用来描述“用户、需求、系统功能单元”之间的关系。它展示了一个外部用户能够观察到的系统功能模型图。
如何使用用例图做需求分析
- 确定系统的参与者,也就是业务主角
- 分析参与者都能通过系统做什么
- 将参与者所做的事情,通过用例图体现出来
- 以一个图书馆管理系统为例,基于用例图做一个需求分析
图书管理系统举例
- 图书管理员可以管理读者信息、管理图书的基本信息;还可以查询某位读者的信息、某本图书的借阅情况
- 读者可以通过该系统借书、还书、查询书籍信息、预定图书等
用例图的特点
- 用例是相对独立完整的,一个用例一般不需要其他用例来完成和它进行交互。但是有时候为了体现功能之间的联系,用例之间也会存在两种关系(扩展:extend,包含:include)
用例图中的包含关系(图书信息管理模块包含图书添加和图书删除两个模块)
用例图中的扩展关系(查询完图书信息后还可以进行图书信息导出)
- 用例的执行结果对于参与者来说是可见的,有意义的
- 一个用例必须是由一个参与者发起的,不存在没有角色的用例,用例也不该自动启动
- 用例一定是动宾短语(谁(角色)+做什么(用例))
- 一个用例是一个需求单元、分析单元、设计单元、开发单元、测试单元
第八节:UML中的九种图——类图
类图(Class Diagram)
- 体现类的属性和方法以及类与其他类之间的关系的图
- 类与类之间的关系:依赖、关联、继承、实现
- 类图的作用:是对代码的直接体现
- 如何在实际中使用类图分析系统
图书管理系统举例
- 图书管理员可以管理读者信息、管理图书的基本信息;还可以查询某位读者的信息、某本图书的借阅情况
- 读者可以通过该系统借书、还书、查询书籍信息、预定图书等
第九节:UML中的九种图——对象图
对象图(Object Diagram)
- 表示某一时刻一组对象以及它们之间关系的图。对象图可以看作是类图在系统某一时刻的实例(相当于系统的运行的一个切片或镜像)
- 作用
- 论证类模型的设计:当设计了类模型时,你可以通过对象图来模拟出一个运行时的状态,这样就可以研究在运行时设计的合理性。同时,也可以作为开发人员讨论的一个基础。
- 分析和说明源代码:由于类图只是展示了程序的静态类结构,因此通过类图看懂代码的意图是很困难的。因此在分析源代码时,可以通过对象图来细化分析。而对于开发人员,对于逻辑较复杂的类交互时,可以考虑画出一些对象图来做补充说明。
- 阅读对象图
- 首先找出所有的类,即在“:”之后的名称
- 整理完之后,就可以通过对象的名字来了解其含义
- 按类来归纳属性,然后再通过关联来确定含义
第十节:UML中的九种图——状态图
状态图(Statechart Diagram)
- 描述一个对象在其生存期间的动态行为,表现为一个对象所经历的状态序列,引起状态转移的事件(Event),以及因状态转移而伴随的动作(Action)
- 状态图的元素
- States:对象的生命周期中某个条件或者状况
- Transitions:是两个状态之间的一种关系
- Event:引起状态转移的事件
- Actions:是状态变化过程中执行的操作
- 作用是帮助开发者梳理一个业务中核心对象的发展状况
某电商订单系统状态图
第十一节:UML中的九种图——时序图(序列图)
时序图(Sequence Diagram)
- 描述对象之间交互的时间顺序,也叫序列图
- 时序图的作用:从时间(方法执行先后)角度,描述一个角色额完成一个功能所涉及的对象,调用的所有方法,以及方法调用的顺序,甚至方法调用的细节(方法名,参数,返回值等)
- 时序图的元素:角色(Actor),对象(Object),生命线(Lifeline),激活期(Activation),消息(Message)
简单时序图(只突出大致流程)
标准时序图(包含类信息,调用方法的方法名、参数类型、返回值等。可用于指导开发)
第十二节:UML中的九种图——协作图
协作图(Collaboration Diagram)
- 表示在实现一个功能的过程中,一组对象以及这些对象间的消息传递
- 它和时序图是对应的,时序图侧重于时间顺序,协作图侧重于与对象之间的关系
- 协作图的作用:显示对象及其交互关系的空间组织结构,而非交互的顺序
- 时序图的三要素:
- 角色:功能的发起者
- 对象:类的实例
- 消息流:一个对象向另一个对象发起的操作
第十三节:UML中的九种图——活动图
活动图(Activity Diagram)
- 活动图是描述系统在执行某一用例时的具体步骤,它主要表现的是系统的动作。
- 活动图的作用
- 从活动图中可以看出,系统是如何一步一步的完成用例的,主要用于业务建模阶段
- 活动图描述的是整个系统的事情。可以说活动图是对用例图的一种细化,帮助开发者理解业务领域
- 活动图的元素:活动节点(Activity),转移(Transition),判断节点(Decision),泳道(Swimlane)
- 和状态图的区别,状态图描绘一个对象的状态,重点描述结果,活动图描述状态转换的过程或者说原因
第十四节:UML中的九种图——组件图
组件图(Component Diagram)
- 组件图是用来反映代码的物理结构。从组件图中,可以了解各软件组件(如源代码文件或动态链接库)之间的依赖关系
- 组件图的主要作用
- 显示系统组件间的结构关系
- 提供了将要建立的系统的高层次的架构视图,这将帮助项目管理者建立阶段目标,并决定开发的任务分配
- 组件图的核心元素:组件(Component),依赖关系(Dependency)
第十五节:UML中的九种图——配置图(部署图)
配置图(Deployment Diagram)
- 配置图描述的是系统运行时的结构,展现了硬件的配置以及软件部署到网络结构中的方式
- 配置图也称部署图
- 一个系统模型只有一个部署图,通常用来帮助理解分布式系统
- 部署图的元素
- 处理器(Processor):能够执行软件、具有计算能力的节点、服务器、工作站
- 设备(Device):硬件设备,如打印机、路由器等
- 配置图和组件图的区别:配置图有硬件,以一个服务器为单位;组件图全是软件结构,以一个程序模块为单位
第十六节:UML总体使用总结1
- UML四种关系和九种图的作用
- 关联,依赖,继承,实现
- 用例图(系统的功能),类图(类及类间关系),对象图(类的对象在某时刻的关联关系),状态图(类的对象在整个生命周期的状态),时序图(功能按时间的执行顺序),协作图(功能的空间联系),活动图(描述功能的动作步骤),组件图(系统的软件结构),配置图(部署结构)
- UML九种图的使用场景
- 做什么(用例图),做成什么样的(类图或对象图、状态图),怎么做(时序图、协作图),怎么用(组件图、配置图)
- UML九种图分类
- 1.用例图:从用户角度描述系统功能,并指出各功能的操作者
- 2.静态图(Static Diagram):包括类图、对象图
- 3.行为图:描述系统动态模型和对象的组成的交互关系(状态图和活动图)
- 4.交互图:描述对象之间的交互关系(时序图,协作图)
- 5.实现图:配置图
第十七节:UML总体使用总结2
- UML在设计过程中的使用
- 可行性分析、需求分析阶段(用例图)
- 概要设计(类图,组件图(架构图),对象图,活动图,状态图)
- 详细设计(时序图,协作图,也可以有状态图,对象图等)
- 学习UML的意义
- 架构师、项目经理:指导开发,分配任务,分析系统
- 开发人员:理解设计,开发沟通等
- 测试人员:组织测试,编写用例等
写在最后
本文中的所有图片都是通过Visio及StarUML绘制的。每种绘图软件的元素和关系构件的风格各不相同,绘制出来的UML图也有所差别,希望大家以了解为主,不要深究其差别(给自己没下载到Rational Rose来绘图找理由)。
本文是笔者在学习UML基础过程中的一部分总结,如有缺失,欢迎大家指正。
本文只是对UML统一建模语言的一个入门级别的概述,更多更详细的部分笔者将会后续通过其他博文进行叙述。有好的书籍或资料同样欢迎大家一起交流分享。