UML是什么
统一建模语言(UML)是一种可视化的建模语言,便于不同的人有效地交流设计结果。这篇文章中囊括了UML的入门知识。
谁应该了解UML
作为一枚产品喵,在写需求文档的时候用UML,尤其是用例图,能更好地逼迫自己去考虑更多的用户场景,更清晰地表达需求,从而便于后期的设计和开发工作。
作为一只程序猿,UML 建模是进行 OOAD,学习运用设计模式,精读源代码,敏捷地思考和沟通软件设计方案的一把利剑,也是成为软件架构师的必要条件和技能。
总之,可以把UML看成一种有效的交流沟通的手段,在大型项目中发挥非常大的作用。当然,也有很多项目团队不怎么用UML,因为他们找到了其他的共同的沟通语言,这也是OK的,工具不重要,达到沟通的目的就行。
UML图的组成
类图:类框包含类名、属性名、操作名。类图由类框(三个矩形)和表明类之间如何关联的连线所组成。
对象图:对象是具有具体属性值的一个具体事物。对象的图标也是一个矩形,对象名下面要带下划线。
用例图(use case):从用户的观点对系统行为的一个描述。
状态图:该图能描述一个状态转移到另一个状态,但并不总是线性的。起始状态和终止状态用实心圆和实点圆表示。
顺序图:基于时间的动态交互。(类图和对象图表达的是系统的静态结构)
活动图:用例和对象的行为中的各个活动之间通常具有时间顺序。
协作图:顺序图和协作图都能表示对象之间的交互,它们被合成为交互图。
构件图:现代软件开发是基于构件的。
部署图:基于计算机系统的物理体系结构,描述计算机,展示它们之间的链接,表现通信关系。
各种UML图能让你从多个视角考察同一个系统,从而使其更加清晰。
UML的其他特征
注释(note):带折角的矩形,矩形框里为解释文字,注释和被注释的图元素之间用一条虚线相连。
关键字和构造型:构造型是在现有的元素上添加一个带双尖括号的关键字,该关键字表明了该元素的用法与原来的意图多少有些不同。
面向对象
面向对象的目标是开发出能够反映现实世界某个特定片段的软件,考虑到得属性和行为阅读,建立的模型越符合实际。
什么是对象
对象是一个类的实例;
对象具有自身的结构,它具有属性和行为;
对象的行为包括它所能执行的操作,属性和操作合起来。
类图和对象图
类图给出了一般性的、定义性的信息:一个类的特性以及它的属性,以及和这个类关联的其他的类;对象图则在某个特定的时刻及时给出了一个类的多个具体实例,以及它们如何联系起来的相关信息。
一些面向对象的概念
抽象:什么应该纳入模型,什么应该舍去;
继承:子类——父类——超类;
多态性:在多态的情况下,不同的类中可以有同名的操作,每个类中发生的操作各不相同;
封装:当一个对象执行自己的操作时,它对外界隐藏了操作的细节,从而便于单独修改。同时,一个对象需要接口(类似按钮),以便被用户初始化;
消息传递:对象之间的协作是通过相互发送消息;
关联:对象之间通常以某种方式发生联系;
多重性是对象之间关联的一个重要方面,例如一个老师教多个学生。
聚集:聚集是对象之间的另一种关联,例如一个典型的计算机系统就是由许多不同类型的对象组合而成。
组成:聚集的一种形式,关键特征是部分对象只能存在于组成对象之中(如果衬衫没有价值了,那么领口也不存在了)。
类的可视化表示
带路径名的类
微信是社交软件的一部分,那么这个类的包名在左,类名在右,中间用双冒号隔开,这种类型的类名叫做路径名。
属性
属性是类的一个特性,它描述了类的对象(也是类的实例)所具有的一系列特性值。
在类的图标里,可以指定每个属性值的类型,要指明类型,则在属性值后面加上类型名(包括字符串、浮点数、整数和布尔型,以及其他枚举类型),中间用冒号隔开。
操作
操作是类能够做的事情,或者你(或者另一个类)能对类做的事情。
函数(function):有一种操作叫函数,它在完成后要返回一个返回值。
型构(signature):在操作名后面的括号中可以说明操作所需要的参数和参数的类型。有一种操作叫函数,它在完成操作后要返回一个返回值。上述全部的操作信息被称为操作的型构。
对象间、类间关系
关联
类之间的连接叫做关联,用一条直线来表示,三角箭头表示关联的方向。
-关联上的约束
类之间的连接可以添加约束。
{按顺序} 即是关联的一种约束
表示两个关联之间 {或} 约束
关联类
和类一样,关联也可以有自己的属性和操作。
链
正如对象是类的实例一样,关联也有自己的实例,链是关联的实例。链(link)下面也要加下划线。
限定关联
当关联的多重性是一对多时,就产生了一个特殊问题:查找问题。需要匹配一个ID,才能准确查找。
UML中,ID信息叫做限定符,它的符号是一个小矩形框,把作为一对多多重性的一部分的类连在一起。UML限定符图标,当你使用它时,你限定了一种关联
UML限定符图标,当你使用它时,你限定了一种关联
自身关联
有时,一个类可能与它自己发生关联,这样的关联就叫做自身关联。
继承和泛化
继承也叫泛化。
基类/根类:没有父类的类。
叶类:没有子类的类。
单继承:只有一个父类。
多继承:有多个父类。
继承的表示法是从子类画一条带空心三角形箭头的连线指向父类。
抽象类:
不提供实例对象的类即是抽象类,表明一个类是抽象类的方法是类名用斜体书写。
依赖
一个类使用了另一个类,比如一个类操作的型构中用到了另一个类的定义。
依赖关系用带箭头的虚线表示。
聚集
聚集关系有两种,一种是每一个部分体都属于一个整体;另一种是两个整体共用一个部分体。
关联线上又一个空心菱形箭头,箭头的方向是从部分指向整体。
有时一个聚集体由多种部分体组成,这些部分体之间是或然关系。用虚线连接两个关系线。
组成
组成是强类型的聚集,每个部分体智能属于一个整体。由实心菱形箭头表示。
组成结构图(语境图)
用于展示类的内部结构。
组成结构图用嵌套在一个大的类框中的一个类图来说明一个类的组成类。
接口和实现
实现:一个类和它的接口之间的关系叫做实现。
接口:接口是一个类的操作(不care它的属性)集合,是描述类的部分行为的一组操作,也是一个类提供给另一个类的一组操作。
类和接口之间可以通过实现关系连接,实现关系用带空心三角形箭头的虚线表示,箭头指向接口一端。
接口和端口
用来表示端口的符号是一个小矩形,它展示了类和环境交互的点。
可见性:它说明在给定类的属性和操作(或接口的操作)的情况下,其他类可以方位到属性和操作的范围
公有的层次(+):其他类可以直接方位这个层次中的属性和操作。
受保护的层次(#):只有继承了这些属性和操作的子类可以访问最初类的属性和操作。
私有的层次(-):只有最初的类才能访问这些属性和操作。
作用域:
实例:在实例的作用域下,类的每个实例对象都有自己的属性值和操作。
分类符:在分类符的作用域下,一个类的所有实例只存在一个属性值和操作。具有分类作用域的属性和操作名字都要带下划线。——通常用在一组特定的实例(不包括其他的实例)必须共享某个私有属性值的情况下。
关于用例和用例图
什么是用例
如果说类图是一种能够帮助客户以自己的观点考察系统的好方法,那么一组用例就是从潜在用户的角度出发对如何使用系统的描述。用例说明了对外部参与者有意义的任务的执行场景。
当导出一个用例时,注意发起用例的前置条件和产生影响的后置条件很重要。
附加用例、包含用例、扩展用例
用例可以被复用,复用有两种方式,一种是包含,一种是扩展。
从各个步骤序列中抽取出公共步骤形成一个每个用例都要使用的附加用例,这种用例的复用技术被称为包含用例。
对原用例的扩展技术叫做扩展用例。
用例图
用例模型的表示法
在用例模型中,人形图标代表参与者,椭圆形代表用例,参与者和用例之间的关联线代表两者之间的通信关系。
用例中的场景描述
每个用例图都由自身的文档页,通常文档要包括以下要素:
发起用例的参与者
用例的假设条件
用例的前置条件
场景中的步骤
场景完成后的后置条件
从用例中获益的参与者
用例之间关系的表示
包含关系
要表达用例的包含关系,可以使用类之间依赖关系的表示符号,也就是虚线+箭头。在线上要就爱一个关键字:用双尖括号括起来的"include"。
扩展关系
扩展只能发生在具体的某个点上,这个点叫做扩展点。
泛化关系
类可以继承一个类,用例和参与者也是如此,建模方法相同,都是一条带空心三角形箭头的实线,从子用例(子参与者)指向父用例(父参与者)。
分组关系
最直接的方法就是把相关的用例放在一个包中组织起来,一组用例可以出现在一个文件夹框中。
运用用例模型
理解领域:建立一个能够反映业务的类图。
理解用户:首先将用户分层,然后显示出用户之间的泛化层次。
理解用例:列举这个产品有哪些用例。
状态图(单对象的时间变化)
状态图描述了一个对象所处的可能状态以及状态之间的转换,并给出了状态变化序列的起点和终点。
状态图标
状态图标可以分成上下两个区域,为圆角矩形,上部分显示状态名,下部分显示活动列表。
状态的转移可能作为对触发事件的响应而发生,并且需要一个活动;转移也可能因为状态中的活动的完成而引起:这种方式发生的转移叫做无触发器转移;最后,转移还可能因为一个特定条件(保护条件)的满足而引起。图形用户界面的状态图,加上了屏幕保护状态和一个保护条件
图形用户界面的状态图,加上了屏幕保护状态和一个保护条件
子状态
状态的变化叫子状态,有顺序子状态和并发子状态。上图working的子状态
上图working的子状态
注:H符号用来表示当对象转移出该组成状态后,该组成状态能够记住它的活动子状态。
顺序图
顺序图是表示按照时间顺序发生的对象之间的交互序列。
画顺序图之前可以先画出对象涉及的类图。某产品新用户登陆
某产品新用户登陆
上图是一个实例顺序图,只包含了一个新用户登陆这一个用例下的场景。
还有一种顺序图是一般顺序图,包含一般用户登陆某产品的流程。
协作图
与顺序图类似,也是展示对象之间的交互。协作图是对象图的拓展,表现对象之间的消息传递。在这里就不做介绍了。
活动图
类似状态图,用于简化描述一个过程。
用比状态图椭的圆角矩形表示。某论坛用户发帖的活动图,菱形表示“判定”
泳道
活动图的一个缺点是它的扩展能力不强,而且不能表达图中各个活动分别由谁负责。
活动图中增加角色的可视化维数,将图分割成多个平行的段,这些段被成为泳道。
在开发过程运用UML
开发主要有下列几个阶段:
需求收集;
分析;
设计;
开发;
部署
其中:
理解业务步骤是第一步;
开发初步类图,先筛选名词,并按名词绘制出初步的类图;
对类分组,处理超类(没有实例的类),用抽象类将类图划分成为有意义的组;
形成关联;
形成聚集和组成;
填充重要的类的信息,将类的属性、操作罗列出来;
形成业务过程图(有关联、组成、聚集关系的类图;泳道图)、包图(分类了的用例包)和具体的用例;
细化用例要素,列出系统所包括的构件(屏幕界面);
表示出用例中的构件交互(顺序图),即将单个用例的步骤用顺序图;
设计图形用户界面(GUI),进入开发过程。
文/粽小喵(简书作者)
原文链接:http://www.jianshu.com/p/09df48c7a125
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。 |