UML用例图有很多值得学习的地方,这里向大家简单介绍一下UML用例图中include与extend的区别,希望本文的介绍对你有所帮助。

本文和大家重点讨论一下UML用例图中include与extend的区别,include是指用例中的包含关系,通常发生在多个用例中,有可以提取出来的公共部分,而extend则恰好相反。下面请看本文详细介绍。

UML用例图中include与extend的区别

最近上论坛,看到在争论UseCase中include与extend的区别。其实这两者是很容易区分的。

include是指用例中的包含关系,通常发生在多个用例中,有可以提取出来的公共部分(就象提取公因式一样),例如UseCaseA中包括了a和b两个流程,而UseCaseC中包含了c和b两个流程。为了提高复用性,可以把b提取出来,形成另一个用例UseCaseB,此时,UseCaseAincludeUseCaseB(表现为一条指向UseCaseB的虚线,箭头在UseCaseB侧),UseCaseC也includeUseCaseB。因而,当有include关系时,被include的用例通常会被两个以上的其他用例include(否则就不需要重用,也就不需要提取出来了),UML用例图如下:

在include关系中,"UseCaseA和UseCaseC知道UseCaseB的存在,而UseCaseB根本不知道有UseCaseA和UseCaseC);

extend则恰好相反。假设UseCaseA的功能描述为"发送一条通知",可是,发送通知的方式可能有许多种,例如通过邮件发送、通过短信发送等。在需求分析阶段,可能无法明确到底有多少种方式,在用例分析阶段,UseCaseA需要留出扩展接口,然后把已知的发送方式作为扩展用例给出,例如UseCaseB是"通过短信发送",而UseCaseC是"通过邮件发送",此时,UseCaseB和UseCaseCextend了UseCaseA,表现为两根虚线,箭头指向UseCaseA,UML用例图如下:

在extend关系中,UseCaseA不知道UseCaseB和UseCaseC的存在,但UseCaseB和UseCaseC却是知道UseCaseA并且知道如何在UseCaseA中作扩展的。

另:在UML用例图中,有时会看到两个用例之间有依赖关系(表现为一条单向或双向的实线),这是错误的,说明用例没有提纯。
 

也许有人会问"如果两个用例之间,一个要调用另一个时,怎么办?"(有可能是混淆了用例和模块的关系),那么,首先要区分概念,用例就是用例,用例不是模块,也不是组件(虽然一个用例能发展成为"一个或多个"模块或组件);其次,从用例分析的角度来看,如果用例A确实要调用到用例B,那么,可以进一步分析:A是调用了B的所有流程呢,还是其中一部分流程?

(1)如果是调用了一部分,此时可以把B中的那部分流程提取出来,形成用例C,然后A和B都includeC;

(2)如果是调用了所有流程,那么,A直接includeB即可;

(3)如果A没有调用B中的任何流程……faint,那还画那条代表依赖的实线干嘛?
 

解析UML用例图中include与extend的区别的更多相关文章

  1. VISO画UML用例图添加Include关系的方法

    VISO画UML用例图添加Include关系的方法 今天用Microsoft Visio 2007画用例图时,发现visio UML用例里面找不到include关系,查到一个可行的解决办法:  1)创 ...

  2. UML用例图中泛化、扩展、包括

    在画用例图的时候,理清用例之间的关系是重点.用例的关系有泛化(generalization).扩展(extend)和包含(include).其中include和extend最易混淆.下面我们结合实例彻 ...

  3. php中include()和require()的区别

    1.引用文件方式 对 include()来说,在include()执行时文件每次都要进行读取和评估:而对于require()来说,文件只处理一次(实际上,文件内容替换 了require()语句.这就意 ...

  4. php 中 include 与 require 的区别

    以下内容转自:https://blog.csdn.net/hsd2012/article/details/51089785 网上太多关于php中include与require区别.其实说的都是经不起验 ...

  5. PHP中include和require的区别

    include和require的区别,其实两者没有太大的区别,如果要包含的文件不存在,include提示notice,然后继续执行下面的语句,require提示致命错误并且退出. 根据测试,win32 ...

  6. visio画UML用例图没有include关系的解决方法

    今天用Microsoft Visio画用例图时,发现visio UML用例里面找不到include关系,即“箭头”+“<>” 这个组件,后来终于发现一个可行的解决办法: 首先:打开Micr ...

  7. PHP中include()与require()的区别说明

    require 的使用方法如 require("MyRequireFile.php"); .这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require ...

  8. PHP中include和require的区别详解

    1.概要 require()语句的性能与include()相类似,都是包括并运行指定文件.不同之处在于:对include()语句来说,在执行文件时每次都要进行读取和评估:而对于require()来说, ...

  9. PHP中include()与require()的区别

    require 的使用方法如 require("MyRequireFile.php"); .这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require ...

随机推荐

  1. IOS假设将一个十六进制的color转换成UIColor,非常有用

    UI给开发的效果图非常多时候标注着十六进制的Color,而程序中用到的往往是UIColor能够用例如以下方法去转换: (UIColor *)RGBColorFromHexString:(NSStrin ...

  2. PHP静态延迟绑定简单演示样例

    没怎么用过这个新特性.事实上也不算新啦,试试吧,如今静态类的继承非常方便了 <?php class A { protected static $def = '123456'; public st ...

  3. Appium AndroidKeyCode

    driver.sendKeyEvent(AndroidKeyCode.BACK); driver.sendKeyEvent(AndroidKeyCode.BACKSPACE); driver.send ...

  4. IDE-IntelliJ IDEA

    IDE-IntelliJ IDEA 主题.字体.编辑区主题.文件编码修改.乱码问题 主题修改 上图标注 1 所示为 IntelliJ IDEA 修改主题的地方,可以通过打开左上角的File -> ...

  5. Kali linux 2016.2(Rolling)中的payloads模块详解

    不多说,直接上干货! 前期博客 Kali linux 2016.2(Rolling)中的Exploits模块详解 payloads模块,也就是shellcode,就是在漏洞利用成功后所要做的事情.在M ...

  6. Elasticsearch之四种查询类型和搜索原理(博主推荐)

    Elasticsearch Client发送搜索请求,某个索引库,一般默认是5个分片(shard). 它返回的时候,由各个分片汇总结果回来. 官网API https://www.elastic.co/ ...

  7. JSP学习(一)

    1.jsp脚本和注释 jsp脚本: 1)<%java代码%> ----- 内部的java代码翻译到service方法的内部 2)<%=java变量或表达式> ----- 会被翻 ...

  8. STM8S103之时钟设置

    最大时钟(指的是system clock):外部晶振24MHz,内部高速RC16MHz 三个时钟源:外部晶振.内部高速RC(上电默认) +内部低速RC 几个时钟:master clock(即sytem ...

  9. HOJ 1867 经理的烦恼 【 树状数组 】

    题意:给出一个区间,求这个区间里面素数的个数 这道题wa了好多次---是因为add操作没有写对 每次更新的时候,应该先判断没有加上y是不是质数,加上了y是不是质数 如果从质数变成不是质数,那么add( ...

  10. java zyUpload 实现多文件上传

    1.html部分 <form enctype="multipart/form-data"> <label>请选择文件</label> <i ...