UML建模资料已经不少了,有人想用有人不用,有人会用也有人不会用,本文只是做者的一篇UML建模总结,不想去写太细,由于真正的你去用下,去画下就基本都会了。工具毕竟是工具,设计和思想才最重要。数据库
Enterprise Architect(简称EA) 是Sparx Systems 公司推出的UML建模工具。编程
它支持模型驱动的软件开发全生命周期工做。适合项目经理:有效地管理项目、业务分析师:业务需求战略分析、开发人员:创建和开发系统和测试人员:测试和调查使用。服务器
它主要功能包括:UML建模、SysML 建模、BPMN建模、模型仿真、应用程序执行与调试、双向代码工程、需求管理、项目管理、版本管理、测试点管理等等,而且可以生成 PDF格式、 RTF格式和HTML格式的文档报告。框架
注:本文使用Enterprise Architect建模工具进行UML建模介绍,不过度去介绍Enterprise Architect建模工具自己,只借助工具来完成和讲解下UML建模的过程,旨在指导你们进行UML建模的设计。异步
UML(Unified Modeling Language)又称统一建模语言或标准建模语言,它是一个用于沟通、 建模、 指定和定义系统的可视化语言,为软件开发的全部阶段提供模型化和可视化支持。编程语言
UML 图主要分两种:函数
· 结构图:描绘结构元素构成的系统或函数,显示结构或运行时体系结构的静态关系工具
· 行为图:描绘一个系统或业务过程的行为特征,显示动态模型的视图。测试
结构图包括下面的图表类型:spa
图类型 |
详细 |
类图 |
类图捕获系统的逻辑结构、 类和对象描述它存在哪些属性和行为。 |
复合结构图 |
复合结构图反映类、 接口和组件的内部合做 (和它们的属性) 来描述它的功能。 |
组件图 |
组件图说明了软件块、 嵌入的控制器等构成了一个系统,其组织和依赖关系。 |
部署图 |
部署图显示了如何进行系统部署 ; 部署在哪里,也就是说,它执行的体系结构。 |
对象图 |
对象图描绘类的对象实例和它们在一个时间点上之间的关系。 |
包图 |
包图描绘模型元素在包内的组织结构和依赖关系。 |
配置文件图 |
配置文件图是那些 在«配置文件» 包中建立的扩展 UML 元素、 链接器和组件。 |
行为图包括下面的图表类型:
图类型 |
详细 |
活动图 |
活动图建模一个系统的行为。系统的总体流中这些行为是如何相关的。 |
用例图 |
用例图捕获用例以及系统和使用户之间的关系。他们描述了系统的功能要求,使用者做用于系统边界的方法以及系统的反应。 |
状态机图 |
状态机图说明了如何元素能够在状态之间移动、 根据状态转移触发器和制约条件来分类其行为。 |
时态图 |
时态图中定义不一样的对象的行为时间尺度内提供更改状态,以及随着时间的推移进行交互的对象的可视化表示形式。 |
序列图 |
随着时间的推移,序列图做为一系列的有序步骤是行为结构化表示形式。他们用来描绘工做流程、 消息传递和元素通常合做随着时间达到的结果。 |
通讯图 |
通讯图显示了在运行时,元素之间的互动关系,并可视化对象间关系。 |
互动概述图 |
互动概述图用可视化方式说明其余交互图 (时间、 序列、 沟通和互动概述图) 之间的合做,展现控制流的做用。 |
类图捕获系统的逻辑结构、 类和对象描述它存在哪些属性和行为。
类是面向对象系统中最重要的构造块。
类图显示了一组类、接口、协做以及他们之间的关系。在UML中问题域最终要被逐步转化,经过类来建模,经过编程语言构建这些类从而实现系统。类加上他们之间的关系就构成了类图,类图中还能够包含接口、包等元素,也能够包括对象、链等实例。
类包含类名、属性和操做,如定义一个类Contacts,它包含属性num,name,age,note以及操做AddContacts,DelContacts,GetAge,SetAge,在UML类图中该图表示为如图所示:
在UML类图中,类由三部分组成:
一、类名:类的名字,是一个字符串。
二、属性(Attributes):类的成员变量。
UML属性的表示方式为:可见性名称:类型 [ = 缺省值 ]
• “可见性”表示该属性对于类外的元素是否可见,包括公有(public)、私有(private)和受保护(protected),在类图中分别用符号+、-和#表示。
• “名称”表示属性名,用一个字符串表示。
• “类型”表示属性的数据类型,能够是基本数据类型,也能够是用户自定义类型。
• “缺省值”是一个可选项,即属性的初始值。
三、 操做(Operations):类的成员方法。
UML操做的表示方式为:可见性名称(参数列表) [ : 返回类型]
• “可见性”的定义与属性的可见性定义相同。
• “名称”即方法名,用一个字符串表示。
• “参数列表”表示方法的参数,其语法与属性的定义类似,参数个数是任意的,多个参数之间用逗号“,”隔开。
• “返回类型”是一个可选项,表示方法的返回值类型,依赖于具体的编程语言,能够是基本数据类型,也能够是用户自定义类型,还能够是空类型(void),若是是构造方法,则无返回类型。
类之间的关系是类图中比较复杂的内容,有关联、聚合、组合、泛化、依赖。
1、关联
关联(Association)是类与类之间最经常使用的一种结构化关系,用于表示一类对象与另外一类对象之间的联系,一般用在一个类中被实现为一个实例变量。关联能够有单向关联、双向关联 和多重性关联。
1)单向关联
单向关联是单向的,用带箭头的实线表示。如:联系人(Contact)拥有地址(Address),则Contact类与Address类具备单向关联关系,如图所示:
2)双向关联
双向关联是双向的,有实线表示。如:顾客(Customer)买了商品(Product)并拥有商品,反之,卖出的商品总会有某个顾客与之相关联。所以,Customer类和Product类之间具备双向关联关系,如图所示:
3)多重关联
多重关联表示两个关联对象在数量上的对应关系。在类图中,对象之间的多重性能够直接在关联直线上用一个数字或一个数字范围表示。
常见的多重性表示方式以下表所示:
表示方式 |
多重性说明 |
1..1 |
表示另外一个类的一个对象只与该类的一个对象有关系。 |
0..* |
表示另外一个类的一个对象与该类的零个或多个对象有关系。 |
1..* |
表示另外一个类的一个对象与该类的一个或多个对象有关系。 |
0..1 |
表示另外一个类的一个对象没有或只与该类的一个对象有关系。 |
m..n |
表示另外一个类的一个对象与该类最少m,最多n个对象有关系 (m≤n)。 |
简单的多重关联关系示例,如图所示:
2、泛化
泛化(Generalizations) 被用来讲明继承关系。泛化的含义是源类继承了目标类的特性。如:圆形(Circle)将继承形状(Shape)的属性x_position,y_position,radius和操做display()。如图所示:
3、聚合、组合
聚合(Aggregation)表示类之间总体与部分的关系。
组合(Composition)也表示类之间总体和部分的关系,可是在组合关系中总体对象能够控制成员对象的生命周期,一旦总体对象不存在,成员对象也将不存在,成员对象与总体对象之间具备同生共死的关系。
聚合表示为白色菱形箭头(弱聚合)指向目标类或父类。
组合表示为黑色菱形箭头(强聚合)指向目标类或父类。
如:地址本(address book)由许多 联系人(contacts)和联系人组(contact groups)组成。联系人组(contact groups)是一个联系人(contacts)的虚分组, 联系人(contact)能够被包含在不止一个联系人组(contact groups)中。 若是你删除一个地址本(address book),全部的联系人(contacts)和联系人组(contact groups)都会被删除,若是你删除联系人组(contact groups),联系人(contacts)却不会被删除。如图所示:
4、依赖
依赖(Dependency)表示两个元素之间存在某种关系,表示一个事物依赖另外一个事物。类的依赖关系主要体如今一个类的方法使用另外一个类的对象做为参数。
依赖用带箭头的虚线表示,由依赖的一方指向被依赖的一方。
如:驾驶员开车,将Car类型的对象car做为Driver的一个参数传递,以便在drive()方法中可以调用car的move()方法,且驾驶员的drive()方法依赖车的move()方法,所以类Driver依赖类Car,如图所示:
附,EA工具类图元素和链接器注释:
复合结构图反映类、 接口和组件的内部合做 (和它们的属性) 来描述它的功能。
如:暴露接口,包含端口和部件。如图所示:
如:系统安装的关系,如图所示:
附,EA工具复合结构图元素和链接器注释:
组件图说明了软件块、 嵌入的控制器等构成了一个系统,其组织和依赖关系。
如:一个组件与另外一个组件提供接口,如图所示:
附,EA工具组件图元素和链接器注释(重复的不注释了):
部署图显示了如何进行系统部署 ; 部署在哪里,也就是说,它执行的体系结构。
如:简单的服务器部署图,如图所示:
部署图还可使用替代图像元素来表示,如图所示:
再看一图像元素的部署图,如图所示:
对象图描绘类的对象实例和它们在一个时间点上之间的关系。
对象图与类图密切相关,区别是它描述类的对象实例和它们之间在一个点时间上的关系。
对象图对于理解复杂的类图是有用的,经过建立不一样状况下的应用反映类和类关系。
如driver和car的对象图,如图所示:
附:
包图描绘模型元素在包内的组织结构和依赖关系。
包图是在 UML 中用相似于文件夹的符号表示的模型元素的组合。系统中的每一个元素都只能为一个包全部,一个包可嵌套在另外一个包中。使用包图能够将相关元素纳入一个系统。一个包中可包含附属包、图表或单个元素。
包图中的元素能够包含:类,类型,接口,枚举,表等等。如图所示:
配置文件图是那些 在«配置文件» 包中建立的扩展UML元素、链接器和组件。
配置文件提供扩展 UML 的手段。他们基于可应用于UML元素、链接器和它们的组件而附加的构造型和标记值。配置文件是这些扩展的集合,它们在一块儿描述一些特定的建模问题,促进建模构造。
活动图建模一个系统的行为。系统的总体流中这些行为是如何相关的。
活动图描述活动的顺序,展示从一个活动到另外一个活动的控制流。活动图在本质上是一种流程图。活动图着重表现从一个活动到另外一个活动的控制流,是内部处理驱动的流程。
简单活动图:
如:接收订单,如图所示:
如:收发邮件,如图所示:
如:真假判断,如图所示:
如:分叉,如图所示:
复杂活动图:如图所示:
附,活动图元素和链接器注释:
用例图捕获用例以及系统和使用者之间的关系。他们描述了系统的功能要求,使用者做用于系统边界的方法以及系统的反应。用例是一个系统性的工做,这个系统的工做很是明确的去为某个参与者达成一个特定的目标。
主要经过泛化、包含和扩展关系说明下使用。
泛化关系:泛化关系相似于 “继承”或“多态”。 子用例继承父用例,可重载,可有特殊的行为。如图所示:
包含关系:包含关系反映一个用例包括另外一个用例的行为。如:联系人管理包含联系人的增长、删除、更新。如图所示:
扩展关系:扩展关系表示一个用例扩展另外一个用例的行为。如:员工提交请假申请以后,就能够打印请假单了。如图所示:
用例和功能的区别:
一、功能是脱离使用者的愿望而存在的。例如咱们描述一个自行车的功能就是他能骑和载物,并没有谁来使用它。
二、功能是孤立的,在系统中,给一个输入就能获得一个输出。而用例是一个系统性的工做,这个系统的工做很是明确的去为某个参与者达成一个特定的目标。
三、若是非要从功能的角度去解释用例,那么用例能够解释为一系列完成一个特定目标的功能的组合。
泛化、包含和扩展关系的区别:
一、泛化表示子用例间的互斥性。
二、包含表示被包含用例对Actor提供服务的间接性。
三、扩展表示扩展用例的触发不定性。
泛化与包含用例属于无条件发生(确定发生的)的用例,而扩展属于有条件发生(未必发生,发生与否取决于系统状态)的用例。
附,用例图元素和链接器注释:
状态机图说明了如何元素能够在状态之间移动、 根据状态转移触发器和制约条件来分类其行为。主要为利用状态和事件来描述对象自己的行为。
简单状态机图:
描述安装软件的行为,如图所示:
描述图书类的入库、待借、借出的类行为,如图所示:
复杂状态机图,如图所示:
附,状态机图元素和链接器注释:
时态图中定义不一样的对象的行为时间尺度内提供更改状态,以及随着时间的推移进行交互的对象的可视化表示形式。
一条生命线是跨时间,由 x 轴表示标准所需的对象的路径。有两种:值生命线和状态生命线。
状态生命线遵循沿 y 轴的时间轴定义的状态之间的离散状态转移。任何状态转移有时间约束、 持续时间约束和观察的可选属性。
值生命线显示的生命线状态图中,跨平行线表示稳定的状态。跨线之间指示状态转移或状态的变化。
默认示例,如图所示:
附,时态图元素和链接器注释:
随着时间的推移,序列图做为一系列的有序步骤是行为结构化表示形式。他们用来描绘工做流程、 消息传递和元素通常合做随着时间达到的结果。
序列图使用:
一、描述工做流、 消息传递和元素间的通常合做,并随着时间推移而实现某一结果。
二、捕获系统的信息和责任,在分析早期,元素间的消息最终成为类模型的方法调用。
三、为用例方案生成解释性的模型,经过建立带有参与者的序列图以及所涉及的用例元素,你能够创建模型用户和系统承诺完成所需任务的步骤序列。
序列图描述:
一、每一个序列元素按水平排列序列,消息在元素之间来回传递。
二、序列图中的消息能够是几种类型,消息也能够配置为反映操做,以及源和目标元素的属性。
三、参与者元素可用于表示用户启动的事件流。
四、构造型元素,如边界、 控制和实体,能够分别用来讲明屏幕、 控制器和数据库项目。
五、每一个元素都有一条虚线,称为生命线,该元素存在,而且有可能参与相互做用。
简单序列图:
发送短信,如图所示:
几种消息类型,如图所示:
复杂序列图,如图所示:
附,序列图元素和链接器注释:
通讯图显示了在运行时,元素之间的互动关系,并可视化对象间关系。
通讯图是对交互中有意义的对象和对象之间的链建模。
通讯图主要包括:对象、链和消息。消息类型有同步、异步和返回三种,消息编号指示顺序和加工的嵌套。编号方案多是:
1
1.1
1.1.1
1.1.2
简单通讯图,如图所示:
复杂通讯图,如图所示:
交叉概述图用可视化方式说明其余交互图 (时间、 序列、 沟通和互动概述图) 之间的合做,展现控制流的做用。交叉概述图是活动图的变体,大部分符号都同样,使用的是矩形元素而不是活动元素。有两种类型的这些元素:
一、交叉元素显示内联交互图,能够是任何四种类型中的任何一个(序列、时机、通讯或交互概述)
二、交互发生元素是对现有互动图的引用: 用框架直观地表示,框架内容显示图名称。
交叉概述图,如图所示:
总结下几种经常使用的关系:
泛化(Generalization):是一种继承关系,表示通常与特殊的关系,它指定了子类如何特化父类的全部特征和行为。
实现(Realization):是一种类与接口的关系,表示类是接口全部特征和行为的实现。
关联(Association):是一种拥有的关系,它使一个类知道另外一个类的属性和方法。
聚合(Aggregation):是总体与部分的关系,且部分能够离开总体而单独存在。
组合(Composition):是总体与部分的关系,但部分不能离开总体而单独存在。
依赖(Dependency):是一种使用的关系,即一个类的实现须要另外一个类的协助。
最后,附上EA的工程文件,目录结构如图所示: