UML:Unified Modeling Language,即统一建模语言,简单地说就是一种有特殊用处的语言。本文是我初步学习UML的学习笔记,对于我们菜鸟码农来说,让我们做设计的可能性不大,但至少能看懂是必要的。

一、所谓模型

1.1 模型是对现实的简化

  模型是提供系统的蓝图,模型可是包括详细计划。也可是是从更高程度考虑系统的总体计划,每个系统可以从不同的方面用不通过的模型来描述。因而每个模型都是在语义上闭合的抽象系统。模型可以是结构性的,强调系统的组织。也可是是行为性的,强调系统的动态方面。

1.2 为什么要建模?

  有人云:建模是为了能够更好地理解正在开发的系统!

  通过建模可以达到如下目的:

  1、模型有助于按照实际情况或按照所需的样式对系统进行可视化;

  2、模型能够规约系统的结构或行为;

  3、模型给出了构造系统的模板;

  4、模型对做出的决策进行文档化;

PS:对于一个复杂的系统,如银行、电信系统建模的重要性就越大。如果不能很好的理解一个复杂系统,盲目开发,失败的可能性很大。

二、小谈UML

2.1 神马是UML?

  统一建模语言(Unified Modeling Language , UML) 是一种绘制软件蓝图的标准语言,可以用UML对软件密集的制品进行可视化、详述、构造和文档化。

2.2 UML的优点

  1、可视化:清晰的模型有利于交流

  2、详述:可以使用UML对分析、设计、实现等决策进行详细描述

  3、构造:把UML描述映射成编程语言

  4、文档化:系统的所有细节都可以是UML进行描述。如:项目计划、发布活动等

2.3 应用领域

  1、企业信息系统

  2、银行与金融服务

  3、电信

  4、国防、航天

  5、科学

  6、基于Web的分布式服务

三、类图—分析业务模型

3.1 类

  类是一组具有相同属性、操作、关系和语义的对象描述,一个类可是实现一个或者多个接口。下图是类在VS里面的图形表示:

  (1)UML预设了四种可见性,分别为公开(public)、私有(private)、保护(protected)、包(package) 减号(-)为私有可见性,加号(+)为公开可见性。可见,上图中的类图所有都为public。

  (2)在UML中抽象类与普通是同一个是图表示,只是名字会变成斜体,如下图所示,调整IsAbstract属性为True后类名变为斜体:

3.2 关系

  关系是事物之间的联系,在面向对象的建模中,有三种重要的关系是依赖、泛化、关联。

  (1)依赖

  依赖是一种使用关系,一个事物使用另一个事物。在图形上,把依赖画成一条有方向的虚线,指向被依赖的事物。如果被使用的类发生变化,那么另一个类的操作必然受影响。依赖关系在.net语言中体现为 局部变量方法的参数或者对静态方法的调用,如工具类,现实生活中人与锤子。

  (2)泛化

  在泛化关系中,子类继承了父类的行为和含义,子类也可以增加新的行为和含义或覆盖父类中的行为和含义。在图形上,在泛化画成一个带有空心三角行指向父类。泛化在.net中就是一个继承的关系。

  (3)关联

  关联是一种结构关系,它指明一个对象与另一个对象间的关系。

  ①相互关联体现的是两个类、或者 类与接口之间语义级别的一种强依赖关系,是一种长期的稳定的关系;表现在代码层面,为被关联类以类属性的形式出现在关联类中,也可能是关联类引用了一个类型为被关联类的全局变量。

  上图中ClassA与ClassB相互关联,在代码中各自有对方类型实例的一个属性。

  ②单向关联表现在代码层面,为被关联类B 以类属性的形式出现在关联类 A中,也可能是关联类A引用了一个类型为被关联类B的全局变量;

  上图中Subject关联Observer,并且是一个一对多的关系,那么在代码中Subject类中会有一个Observer类对象的集合属性。

  下面我们来看看几种特殊的关联关系,他们是:

  ③聚合关系:

  聚合是关联关系的一种特例,他体现的是整体与部分拥有的关系。此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如汽车与发动机;表现在代码层面,和关联关系是一致的,只能从语义级别来区分。

  ④组合关系:

  组合也是关联关系的一种特例,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束。例如:孕妇死了胎儿自然也就死了(有点血腥的例子,抱歉!);表现在代码层面,和关联关系是一致的,只能从语义级别来区分。

3.3 接口

  接口(interface)如同契约,负责的类必须负责实现它的公开操作,以及负责维护它的公开属性。

3.4 综合案例:公司-部门-员工 类图关系

四、用例图—描述系统的行为

  用例图用来表达系统对外提供的服务或功能,适合用来作为需求搜集阶段的工作。

4.1 用例与执行者

  实际设计中,常用用例(UseCase)来表达系统需求或者系统对外呈现的行为。用例采用椭圆图示,参与者(Actor)是人型图示。由于它会参与系统的运作,因此它跟用例之间有连接线段。

4.2 包含关系

  包含(include)关系指的是两个用例之间的关系,其中一个用例(称作基本用例,base use case)的行为包含了另一个用例(称作包含用例,include case)的行为。如下图,取款的 时候会包含一个用户验证的用例。

4.3 扩展关系

  扩展(extend)关系将基本用例中一段相对独立并且可选的动作,用扩展(Extension)用例加 以封装,再让它从基用例中声明的扩展点(Extension Point)上进行扩展,从而使基用例行为更简练和目标更集中。如下图,我们在取完款后,可以打印凭条,也可以不用打印凭条。这个功能就可以使用扩展来表示。

五、活动图—流程分析利器之一

  活动图通常用来表达业务流程、工作流或系统流程中一连串的动作。在我的实习前期,就经常用到活动图来绘制需求调研到的业务流程,并将活动图展示给客户以确认需求,客户也能看轻松地看懂。例如,下图是一个简单的登陆流程,登陆失败跳转到登陆页面,登陆成功则跳转到主界面。

PS:每个活动图只能有一个开始节点,但是可以有多个结束节点

  (1)动作

  动作(activity)是最重要的组成元素,它代表一个执行步骤。

  

  (2)控制流

  带箭头的连接线称为控制流(control flow)。当来源动作结束之后,控制流会启动目标动作。

  

  (3)对象节点与对象流

  对象节点(object node)为矩形图示,对象流(object flow)的图示与控制流相同,不过它的其中一个端点必须是对象节点,而另一端必须是其他节点。控制流的两个端点不可以都是对象节点。对象流不同于控制流,对象流可以携带数据或对象。

  

  上图所示,在登陆成功后,我们将用户的Session对象传递到下一个节点,下一个节点可以使用此对象。

  (4)决策与合并

  活动流程中,流程交汇点,称为合并节点(merge node)。一个合并节点会有多条进入线,但是只有一条离开线,合并节点的图示是大的空心菱形,所有进入合并节点的支流都会经历同一条离开线。

  

  决策节点(decision node)与合并节点共用图示,两者都是大的空心菱形。不过,决策节点只有一个进入线,但有多条离开线

  

  (5)分叉和连接

  分叉表示的是一个控制流被两个或多个控制流代替,经过分叉后,这些控制流是并发进行的。

  连接正好与分叉相反,表示两个或多个控制流被一个控制流代替。使用分叉需要使用连接把分叉的流汇聚成一个流。

  (6)发送信号和接受事件

  发送信号操作是一种操作,可以将消息或信号发送给另一个活动。

  接受事件操作是一种要在等到消息或信号后才能继续执行的操作。

  如上图所示,创建发票是一个发送信号,将发票这个消息发给另一个活动:收款。而收款是一个接受事件,它必须等到开完发票才能继续执行后续操作。

六、时序图—流程分析利器之二

  时序图,又称序列图,用来表达系统内部一群对象的交互情况,它是一种行为图。水平方向是对象维,垂直方向是时间维。例如:page与action之间的交互情况可以用时序图来表示,在发送list请求的时候我们需要一个返回结果集。

  (1)生命线

  生命线(lifeline)代表一个参与交互的实例,它的图示是顶端连接矩形的虚线,虚线顶部的矩形可以放置生命线的名称。

  (2)执行发生

  对象在接收到消息之后执行一项活动,执行期间称为执行发生(execution occurrence),它的图示是长条矩形。

  (3)消息

  消息(message)的图示是一条带箭头的线段,横跨在两个生命线上,对象之间通过发送消息来交互。

  (4)终止

  生命线有生有灭,终止(stop)就是用来表达生命线终止的时刻。终止的图示是一个大叉,放置在生命线的虚线底部,代表生命线已经终止。

参考资料

  (1)张传波,《火球——UML大战需求分析》,http://www.amazon.cn/tushu/dp/B0079FMI40  

  (2)周猛,《UML统一建模语言基础》,http://wenku.baidu.com/view/28fe7f65ad02de80d4d840ec.html

作者:周旭龙

出处:http://www.cnblogs.com/edisonchou/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。

OOAD利器之UML基础的更多相关文章

  1. Java高并发编程基础三大利器之CountDownLatch

    引言 上一篇文章我们介绍了AQS的信号量Semaphore<Java高并发编程基础三大利器之Semaphore>,接下来应该轮到CountDownLatch了. 什么是CountDownL ...

  2. 大数据并行计算利器之MPI/OpenMP

    大数据集群计算利器之MPI/OpenMP ---以连通域标记算法并行化为例 1 背景 图像连通域标记算法是从一幅栅格图像(通常为二值图像)中,将互相邻接(4邻接或8邻接)的具有非背景值的像素集合提取出 ...

  3. 后台任务利器之Hangfire

    后台任务利器之Hangfire 一.简述 Hangfire作为一款高人气且容易上手的分布式后台执行服务,支持多种数据库.在.net core的环境中,由Core自带的DI管理着生命周期,免去了在NF4 ...

  4. .NET Core开源组件:后台任务利器之Hangfire 转载 https://www.cnblogs.com/chenug/p/6655636.html

    .NET Core开源组件:后台任务利器之Hangfire   一.简述 Hangfire作为一款高人气且容易上手的分布式后台执行服务,支持多种数据库.在.net core的环境中,由Core自带的D ...

  5. Win下必备利器之Cmder

    诚言,对于开发码字者,Mac和Linux果断要比Windows更贴心;但只要折腾下,Windows下也是有不少利器的.之前就有在Windows下效率必备软件一文中对此做了下记载:其虽没oh-my-zs ...

  6. UML基础与Rose建模实训教程

    目  录 第1章  初识UML. 1 1.1 初识UML用例图... 1 1.2 初识UML类图... 3 第2章  Rational Rose工具... 6 2.1 安装与配置Rational Ro ...

  7. C#编程利器之二:结构与枚举(Structure and enumeration)【转】

    C#编程利器之二:结构与枚举(Structure and enumeration) 在上一篇文章中,介绍了类如何封装程序中的对象.而实际中,出了类可以封装对象外,结构和枚举也可以封装一些对象,本文将着 ...

  8. UML基础概念(转)

    UML基础概念 UML概述 uml简介 uml(unified Modeling Language )为面向对象软件设计提供统一的.标准的.可视化的建模语言.适用于描述以用例为驱动,以体系结构为中心的 ...

  9. php调试利器之phpdbg

    信海龙的博客 php调试利器之phpdbg 简介 PHPDBG是一个PHP的SAPI模块,可以在不用修改代码和不影响性能的情况下控制PHP的运行环境. PHPDBG的目标是成为一个轻量级.强大.易用的 ...

随机推荐

  1. ssh反向连接和简单实现

    转自:http://blog.chinaunix.net/uid-20109107-id-2954579.html SSH反向连接的使用 1.什么是反向连接?反向连接是指主机A(受控端)主动连接主机B ...

  2. XmlValidationHelper XSD、Schema(XmlSchemaSet)、XmlReader(XmlValidationSettings)、XmlDocument、XDocument Validate

    namespace Test { using Microshaoft; using System; using System.Xml; using System.Xml.Linq; class Pro ...

  3. 【积累篇:他山之石,把玉攻】Mime 类型列表

    按照内容类型排列的 Mime 类型列表 类型/子类型 扩展名 application/envoy evy application/fractals fif application/futurespla ...

  4. Spring MVC初次相见

    1.什么是SpringMvc Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring 框架提供了构建 Web 应用程序的全功能 M ...

  5. 追踪记录每笔业务操作数据改变的利器——SQLCDC

    对于大部分企业应用来用,有一个基本的功能必不可少,那就是Audit Trail或者Audit Log,中文翻译为追踪检查.审核检查或者审核记录.我们采用Audit Trail记录每一笔业务操作的基本信 ...

  6. 【大数据技巧】日均2TB日志数据在线快速处理之法

    [大数据技巧]日均2TB日志数据在线快速处理之法 http://click.aliyun.com/m/8958/

  7. [转]在Eclipse中使用JUnit4进行单元测试(初级篇)

    首先,我们来一个傻瓜式速成教程,不要问为什么,Follow Me,先来体验一下单元测试的快感! 首先新建一个项目叫JUnit_Test,我们编写一个Calculator类,这是一个能够简单实现加减乘除 ...

  8. iOS路径沙盒文件管理(转载)

    iOS路径沙盒文件管理,看到博主总结的很好,转载过来,原文:http://www.aichengxu.com/view/35264 一.iOS中的沙盒机制 iOS应用程序只能对自己创建的文件系统读取文 ...

  9. 【刷题笔记】火车购票-----java方案

    问题描述请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配. 假设一节车厢有20排.每一排5个座位.为方便起见,我们用1到100来给所有的座位编号,第一排是1到5号,第二排是6到10号 ...

  10. 16-1-26---图解HTTP(01)

    图解HTTP1.4.2确保可靠性的HTTP协议    按层次分,TCP位于传输层,提供可靠的字节流服务    所谓字节流服务,指为了方便传输,将大块数据分割成以报文为单位的数据包进行管理,而可靠的传输 ...