UML(Unified Modeling Language),UML规范用来描述建模的概念有,类(对象的)、对象、关联、职责、行为、接口、用例、包、顺序、协作,以及状态。这里对UML做一个简单介绍

前言

UNL虽然有很多功能,但平时有的最多的就是类图,时序图和用例图,那么接下来分别对这三种功能做一个简要概述

类图

在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization), 关联(Association), 聚合(Aggregation), 组合(Composition), 依赖(Dependency)

泛化(Generalization)

【泛化关系】:是一种继承关系, 表示一般与特殊的关系, 它指定了子类如何特化父类的所有特征和行为. 例如:老虎是动物的一种, 即有老虎的特性也有动物的共性

【箭头指向】:带三角箭头的实线,箭头指向父类

实现(Realization)

【实现关系】:是一种类与接口的关系, 表示类是接口所有特征和行为的实现.

【箭头指向】:带三角箭头的虚线,箭头指向接口

关联(Association)

【关联关系】:是一种拥有的关系, 它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子

关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。

【代码体现】:成员变量

【箭头及指向】:带普通箭头的实心线,指向被拥有者



上图中,老师与学生是双向关联,老师有多名学生,学生也可能有多名老师。但学生与某课程间的关系为单向关联,一名学生可能要上多门课程,课程是个抽象的东西他不拥有学生



上图为自身关联

聚合(Aggregation)

【聚合关系】:是整体与部分的关系, 且部分可以离开整体而单独存在. 如车和轮胎是整体和部分的关系, 轮胎离开车仍然可以存在.

聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。

【代码体现】:成员变量

【箭头及指向】:带空心菱形的实心线,菱形指向整体

组合(Composition)

【组合关系】:是整体与部分的关系, 但部分不能离开整体而单独存在. 如公司和部门是整体和部分的关系, 没有公司就不存在部门.

组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期

【代码体现】:成员变量

【箭头及指向】:带实心菱形的实线,菱形指向整体

依赖(Dependency)

【依赖关系】:是一种使用的关系, 即一个类的实现需要另一个类的协助, 所以要尽量不使用双向的互相依赖.

【代码表现】:局部变量、方法的参数或者对静态方法的调用

【箭头及指向】:带箭头的虚线,指向被使用者

各种关系的强弱顺序

泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖

下面这张UML图,比较形象地展示了各种类图关系:

时序图

时序图(Sequence Diagram)是显示对象之间交互的图,这些对象是按时间顺序排列的。顺序图中显示的是参与交互的对象及其对象之间消息交互的顺序。时序图中包括的建模元素主要有:角色(Actor)、对象(Object)、生命线(Lifeline)、控制焦点(Focus of control)、消息(Message)等等

角色(Actor)

系统角色,可以是人、及其甚至其他的系统或者子系统

对象(Object)

对象包括三种命名方式:

第一种方式包括对象名和类名

第二中方式只显示类名不显示对象名,即表示他是一个匿名对象

第三种方式只显示对象名不显示类明

生命线(Lifeline)

生命线在顺序图中表示为从对象图标向下延伸的一条虚线,表示对象存在的时间,如下图

控制焦点(Focus of Control)

控制焦点是顺序图中表示时间段的符号,在这个时间段内对象将执行相应的操作。用小矩形表示。如下图表示

消息(Message)

消息一般分为同步消息(Synchronous Message),异步消息(Asynchronous Message)和返回消息(Return Message).如下图所示

  • 同步消息=调用消息(Synchronous Message

    消息的发送者把控制传递给消息的接收者,然后停止活动,等待消息的接收者放弃或者返回控制。用来表示同步的意义。
  • 异步消息(Asynchronous Message

    消息发送者通过消息把信号传递给消息的接收者,然后继续自己的活动,不等待接受者返回消息或者控制。异步消息的接收者和发送者是并发工作的。
  • 返回消息(Return Message

    返回消息表示从过程调用返回
  • 自关联消息(Self-Message

    表示方法的自身调用以及一个对象内的一个方法调用另外一个方法

  • Combined Fragments

    表示带有一些特定条件发送的消息



    如上图,就表示,循环(loop)发送GetProperty消息获得属性。在使用Astah画时序图时,选择一个Combined Fragments之后,可以在其对应的属性面板更改对应的发送条件。里面介绍了很多,此处列举一二:

    Alternative fragment(denoted "alt")if…then…else对应

    Option fragment (denoted "opt")Switch对应

    Parallel fragment (denoted "par")表示同时发生

    Loop fragment(denoted "loop")for或者Foreach对应

用例图

用例图主要用来描述“用户、需求、系统功能单元”之间的关系。它展示一个外部用户能够观察到的系统功能模型图。用例图多用于静态建模阶段(主要是业务建模和需求建模),帮助开发团队以一种可视化的方式理解系统的功能需求

参与者(Actor)

在系统外部与系统直接交互的人或事物;需要注意以下两点:

1)参与者是角色而不是具体的人,它代表了参与者在与系统打交道的过程中所扮演的角色。所以在系统的实际运作中,一个实际用户可能对应系统的多个参与者。不同的用户也可以只对应于一个参与者,从而代表同一参与者的不同实例

2)参与者作为外部用户(而不是内部)与系统发生交互作用,是它的主要特征。

在UML中,参与者使用如图所示的一个小人表示

用例(Use Case)

系统外部可见的一个系统功能单元。系统的功能由系统单元所提供,并通过一系列系统单元与一个或多个参与者之间交换的消息所表达。用椭圆表示,椭圆中的文字简述系统的功能

关系(Relationship)



关联(Association)

表示参与者与用例之间的交互,通信途径,任何一方都可发送或接受消息

箭头指向:指向消息接收方



泛化(Inheritance)

在编程中,泛化关系是一种很重要的关系,我们随处可见

泛化关系是一般和特殊关系,就是通常理解的继承关系,子用例和父用例相似,但表现出更特别的行为;子用例将继承父用例的所有结构、行为和关系。子用例可以使用父用例的一段行为,也可以重载它。父用例通常是抽象的

箭头指向(需要特别注意):指向父用例



包含(Include)

包含关系用来把一个较复杂用例所表示功能分解成较小的步骤。包含用例是必须的,如果缺少包含用例,基用例就不完整;包含用例必须被执行。

箭头指向:指向分解出来的功能用例



扩展(Extend)

扩展关系是指用例功能的延伸,相当于为基础用例提供一个附加功能。扩展用例是可选的,如果缺少扩展用例,不会影响到基用例的完整性。

箭头指向(需要特别注意):指向基用例



供一个完整的系统的用例图

移动架构-UML的更多相关文章

  1. 架构-UML类图

    在UML 2.0的13种图形中,类图是使用频率最高的UML图之一.Martin Fowler在其著作<UML Distilled: A Brief Guide to the Standard O ...

  2. 统一建模语言(UML) 版本 2.0

    原文: http://www.ibm.com/developerworks/cn/rational/321_uml/ 简介 参考 UML 基础系列的其他文章和教程 UML基础: 统一建模语言简介 UM ...

  3. UML简单介绍

    UML的全称是统一建模语言:Unified Modeling Language. 是用来为面向对象开发系统的产品进行说明可视化和编制文档的方法. 它是一种标准的图形化建模语言,是面向对象分析与设计的一 ...

  4. 架构探险笔记4-使框架具备AOP特性(上)

    对方法进行性能监控,在方法调用时统计出方法执行时间. 原始做法:在内个方法的开头获取系统时间,然后在方法的结尾获取时间,最后把前后台两次分别获取的系统时间做一个减法,即可获取方法执行所消耗的总时间. ...

  5. UML结构与解析——BUAA OO第四单元作业总结

    UML与解析架构 UML是什么 统一建模语言(英语:Unified Modeling Language,缩写 UML)是非专利的第三代建模和规约语言.UML是一种开放的方法,用于说明.可视化.构建和编 ...

  6. 3000本IT书籍下载地址

    http://www.shouce.ren/post/d/id/112300    黑客攻防实战入门与提高.pdfhttp://www.shouce.ren/post/d/id/112299    黑 ...

  7. 作为一个.net程序猿,需要掌握这些有点前途的人才,一些开发---Shinepans

    1.基础 C#基础                    参考书目:   <c#入门经典>         <ASP.NET揭秘> IIS  HTML              ...

  8. JDK动态代理和CGLIB动态代理编码

    JDK动态代理[接口]: import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import jav ...

  9. iOS 开发之 SDWebImage 底层实现原理分析

    SDWebImage 是一个比较流行的用于网络图片缓存的第三方类库.这个类库提供了一个支持缓存的图片下载器.为了方便操作者调用,它提供了很多 UI 组件的类别,例如:UIImageView.UIBut ...

随机推荐

  1. PHP流程控制之if语句多种嵌套

    王思总同学我们在最开始的故事中讲到了他有两个秘书:一个生活秘书.一个工作秘书. 王思总同学在出行和项目中也是极度有计划性.他给自己的生活秘书和工作秘书分别指派了出差的行程:大理石平台支架 生活上: 先 ...

  2. springboot与jdk1.6结合使用需要注意的地方

    问题描述:官方文档,默认Spring boot 1.3.5 要求 Java7版本,而当前项目要求 Java6,而且在idea工具中创建项目时,如果采用选项“Spring Initializr”来创建工 ...

  3. bzoj2738矩阵乘法

    题意: 给你一个N*N的矩阵,没有修改,每次询问一个子矩形中的第K小数. 题目链接 思路: 当它只有一列时,其实就是区间第K大,也就是整体二分可以解决的. 现在到了二维,只需要将之前的树状数组改成二维 ...

  4. 题解 CF1063B 【Labyrinth】

    题解 CF1063B [Labyrinth] 完了我发现我做CF的题大部分思路都和别人不一样qwq 这道题其实很水,不至于到紫题 我们只要bfs一下,向四个方向剪下枝,就A了(好像还跑的蛮快?) 是一 ...

  5. Js 之常见手势操作插件 Hammer.js

    一.下载 链接:https://pan.baidu.com/s/1UbEtSbT1xcmdzzTCaWmW1A提取码:ldqy 二.案例 三.代码 <!DOCTYPE html> < ...

  6. NOIP提高组历年真题题解

    2018 铺设道路 差分水题,推一下结论就好了. #include<cstdio> #include<algorithm> using namespace std; ],d[] ...

  7. Node.js 文件操作

    1.新建一个文件a.txt,并写入"你好,这是一个新文件.". writeFile 代码 demo1.js var fs = require('fs'); console.log( ...

  8. Java 面向对象(十二)

    泛型 什么是泛型 泛型:广泛通用的类型 一开始还不确定是什么类型,在使用的时候,才能确定是什么类型 (1)在开始定义的时候,留一个插口 (2)在创建对象的时候,再去插入对应的类型 泛型也可以理解为&q ...

  9. H2O框架简介

    H2O框架简介H2O是开源的,分布式的,基于内存的,可扩展的机器学习和预测分析框架,适合在企业环境中构建大规模机器学习模型. H2O核心代码使用Java编写,数据和模型通过分布式 Key/Value ...

  10. Oracle 11c下载 及连接到OracleDB的简单程序

    Oracle官网总是不太贴心.还是网友贴心. https://pan.baidu.com/s/1ZCFLUi4Ti_WUYOFR3gB2dA 是11g版本下载包,下载下来解压就能用了. 安装完毕后,驱 ...