当前位置: 首页 > news >正文

用例图【图7】--☆

开始学习UML建模语言,从用例图入手。建模工具选择visio

   用例图描述的是参与者所理解的系统功能,主要元素是用例和参与者,是帮助开发团队以一种可视化的方式理解系统的功能需求。这时处于项目初始,分析用户需求的阶段,不用管怎么实现具体的功能,只要能向客户形象化的表述项目的功能就行。

  用例图有四个部分:用例(Use Case), 参与者(Actor),系统边界,关系。

1)参与者(Actor)

  参与者是与系统交互的人或物。首先当然包括我们的开发系统用户,除此之外,与我们开发的系统有关联的其他系统也算是参与者。

在UML图中我们用一个小人表示。

2)用例(Use Case)

   用例是参与者可以感受到的系统服务或功能单元。我理解的就是用户可以使用我们开发的项目去做的任何事情

任何用例都不能在缺少参与者的情况下独立存在,同样,任何参与者也必须要有与之关联的用例。在UML图中我们用椭圆表示:

3)系统边界

  指系统与系统之间的界限。把系统边界以外的同系统相关联的其他部分称为系统环境。

在UML图中我们用一个矩形表示。

4)关系

  用例图中的关系有4种:关联,泛化,包含和扩展。

  关联:表示参与者和用例之间的交互。为通信途径,任何一方都可发送或可接收消息。

  箭头指向:指向消息接收方。在UML中用直线表示

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

包含关系最典型的应用就是复用。这种情况类似与在过程设计语言中,将程序的某一段算法封装成一个子过程,然后在从主程序中调用这一子过程(这么说好像懂了点)

在UML中,包含关系用带箭头的虚线段加《include》表示,箭头指向被包含的用例。

在VISIO中没有找到include包含关系,解决办法:

1)选择菜单栏中的'UML'-》单击’构造型‘-》新建-》构造型那里输入include-》基类那里选择归纳,点击确定

2)将UML用例下的“扩展”拖到绘图页上-》双击或右键属性-》构造下拉列表中选择include-》确定

  扩展:扩展关系是指用例功能的延伸。与包含关系不同的是,扩展用例是可选的,如果缺少扩展用例。不会影响到基用例的完整性。

  在UML中,扩展关系用带箭头的虚线段加《extend》表示,要注意的是箭头指向基用例。

  泛化:用例的泛化指的是一个父用例可以被特化形成多个子用例,用我们熟悉的语言来说就是继承关系。

  在UML中,泛化关系用空心箭头表示,箭头指向的是父用例。

 

把书上的用例图用VISIO操作一遍:

  1)确定参与者:这里的参与者有业务员和储户。

  2)功能:包括存款和取款两大基本功能,这两个基本功能又包含一些子功能。

步骤:1)打开visio,新建-》软件-》UML模型图。

   2)在模型资源管理器中右键顶层包,新建用例图。

   3)按照上文的方法先把include包含关系创建出来。

   4)添加两个参与者,为业务员和储户,这些都是可以从UML用例中直接拖过去。双击或右键都可以改变属性。

   5)添加系统边界。

   6)根据系统功能添加实例和各个实例之间的关系。(搞不明白的是扩展和包含用例之间拖过来都是空心实现箭头,和书上说的虚线箭头不同,所以就右键改了下线段格式为虚线,不知道这样做行不行⊙﹏⊙)

转载于:https://www.cnblogs.com/Ph-one/p/9982850.html

相关文章:

  • 四则运算表达式分解,前中后缀表达式(栈的应用)
  • 嵌入式 Linux 对内存的直接读写(devmem)
  • C语言三个结束符:EOF ‘\0’ '\n'
  • Ymodem协议(参考STM32)
  • android uboot中的mmc命令
  • stm32最简单的实现BootLoader
  • 变参标准函数的重新封装,如printf
  • 导数与梯度
  • linux /Android 平台下使用 i2c-tools
  • 在android下使用i2c tools
  • ubuntu查看文件和文件夹大小
  • matlab的三维绘图和四维绘图
  • Matlab绘制三维曲面(以二维高斯函数为例)
  • VSCode 预览 .md 文件
  • 右侧添加悬浮打赏功能
  • 自己简单写的 事件订阅机制
  • 30秒的PHP代码片段(1)数组 - Array
  • C# 免费离线人脸识别 2.0 Demo
  • canvas绘制圆角头像
  • CSS 提示工具(Tooltip)
  • css系列之关于字体的事
  • Cumulo 的 ClojureScript 模块已经成型
  • download使用浅析
  • emacs初体验
  • JavaScript异步流程控制的前世今生
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • MySQL的数据类型
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • Redis在Web项目中的应用与实践
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 简单数学运算程序(不定期更新)
  • 理解在java “”i=i++;”所发生的事情
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • FaaS 的简单实践
  • gunicorn工作原理
  • postgresql行列转换函数
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • 回归生活:清理微信公众号
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • #《AI中文版》V3 第 1 章 概述
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (c语言)strcpy函数用法
  • (NSDate) 时间 (time )比较
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (排序详解之 堆排序)
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)Oracle存储过程编写经验和优化措施