连载:面向对象葵花宝典:思想、技巧与实践(27) - 动态模型设计

2023-05-16

类模型指导我们如何声明类动态模型指导我们如何实现类


动态模型设计一般都是在类模型设计完成后才开始,因为动态模型设计的时候一般都需要用到类模型中的类。相对类模型来说,动态模型要相对简单一些,主要原因在于动态模型设计的时候没有什么设计原则和设计模式需要应用,只需要对照用例模型,根据用例模型的特点,选取一个合适的动态模型将其表述出来即可。


动态模型在实际开发过程中有非常重要的作用,简单来说,如果没有动态模型,那么你虽然完成了类设计,但还是不能编码,或者只能编写类的声明代码(类属性、方法名称),但不能写类的实现代码(方法里面的实现逻辑,即:每个方法的实现)。动态模型就是用来指导我们如何编写具体的方法的。

 

有的同学可能会有疑问:那些地方要进行动态模型设计呢

还是那句老话,你觉得比较复杂你就设计,简单你就不设计,总之:你需要你就设计

像我在实际开发中,基本上一个中等项目就一两个业务设计动态模型(小项目看到需求就编码了 :) ),其它业务看需求文档就能看出如何编码,这也是有经验和经验不足的差别。


参考UML标准,常见的动态模型如下:

【状态模型】

状态模型主要用于描述对象的生命周期的状态变化。通过状态图,我们可以了解到对象有哪些状态,状态之间如何转换,转换的触发条件等。当我们发现一个对象的状态比较复杂的时候,就需要设计对象的状态模型。

UML中使用状态图来描述状态模型


【活动模型】

活动模型主要用于描述一个工作流程或者计算流程。其关注点是在完成某项工作的过程中,系统中的哪些对象承担了什么样的任务、做了什么处理,以及这些对象之间的先后交互关系。当我们发现一个处理流程比较复杂的时候,就需要设计流程的活动模型。

UML中使用活动图来描述活动模型


序列模型

序列模型主要用于描述对象按照时间顺序组织的消息交互过程,其关键特征是强调按照“时间顺序”来组织对象的交互,所以序列图有时又称为“时序图”或者“顺序图”。序列模型是我们最常用的动态模型,特别适合将用例模型或者SSD转换为系统的动态模型

UML中使用序列图来描述序列模型


【协作模型】

协作模型主要用于描述按照对象之间的关联来组织的消息交互过程,其关键特征是强调“对象关系”来组织对象的交互。协作模型的作用和序列模型一样,只是强调的点不同,大部分的时候我们都是选择“序列模型”,因为序列模型的时间顺序很多时候和用例模型的步骤不谋而合。

UML中使用协助图来描述协作模型


注意:以上模型并不是每个都必须有的,根据实际需要选择即可


建模实践

以上这些模型都可以从用例模型推导出来,活动模型、序列模型、协作模型基本上都是和用例模型一一对应的,或者对应用例中的某个分支。一般情况下不推荐一个模型中包含多个分支,因为这样会导致图比较复杂,而且主题不突出。

 

状态模型和其它模型相比要复杂一些,因为并不能从单个用例或者单个用例分支推导出某个对象的所有状态,而需要综合多个用例模型,从中提取出和某个对象状态相关的内容,再统一设计状态模型。

 

用例模型推导出动态模型是一个“分解和分配”的过程,因为在用例模型中,系统是当做一个“黑盒”来看待的,而在动态模型中,系统不再是一个黑盒,而是分解成了一个一个的类。因此我们需要将原来笼统的划分给系统的功能和职责,进一步分解并分配给不同的类。通俗的讲,动态模型就是说:为了完成系统的XXX功能, 先需要类A做任务1,然后需要类B需要做任务2,再由类C做任务3。。。。。。依次分解下去,最终就能够实现将类串起来,相互配合,最后实现了系统的需求。

 

我们以POS机为例,假设我们基于买单这个用例的正常分支设计“序列模型”,则可以得到如下的“序列模型”:


有了上面这个“序列图”,假设我们要开始写代码,则基本可以按照如下伪码的方式实现(实际的编码肯定不会这么简单,但方法是一样):

main(){

    Trade trade = new Trade();                
    Integer tradeId =trade.makeNewTrade();  //创建
    trade.addGoods();                       //增加商品
    trade.cacuMoney();                      //计算总额
    ............//省略一大段代码
    Receipt receipt = new Receipt();        
    receipt.print(trade);                   //打印小票
	...........//省略一大段代码
	trade.finish();                         //结束
}


================================================ 
转载请注明出处:http://blog.csdn.net/yunhua_lee/article/details/24269541
================================================ 


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

连载:面向对象葵花宝典:思想、技巧与实践(27) - 动态模型设计 的相关文章

  • linux同时连接内外网的设置

    因为工作的原因 xff0c 经常会用有线网卡连接服务器进行配置 xff0c 无线网卡上外网 查看当前网关信息 pipci 64 ubuntu ip route show default via 192 168 2 1 dev enp2s0
  • ARM 汇编的立即数

    https blog csdn net a99778800 article details 6759825 ARM 汇编的立即数 大多数的数据处理指令和部分状态寄存器访问指令用到立即数 xff0c 在 ARM 中不是所有数都能用作立即数 x
  • Error: Invalid or corrupt jarfile xxxx-1.0-SNAPSHOT.jar

    解决方法 xff1a 1 请看 xff1a 395条消息 Linux jar报错处理 Exception in thread main java lang No Error Invalid or corrupt jarfile 错误 尝试打
  • IntelliJ IDEA配置maven远程仓库

    最近在搭建springMVC 43 mybatis的框架 xff0c 在添加jar包的时候出问题了 以前都是直接将jar包放到lib里面即可 xff0c 但是看到现在用maven的比较多 xff0c 就去配置maven 然后发现 xff0c
  • DNS & CDN & HTTPDNS 原理简析

    http www jianshu com p a73e963b63b1 DNS amp CDN amp HTTPDNS 原理简析 背景 xff1a 域名系统 DNS Domain Name System 作为域名和 IP 地址相互映射的一个
  • 图像拼接之MATLAB实现

    转自http www cnblogs com naive p 3579610 html 背景介绍 图像拼接是一项应用广泛的图像处理技术 根据特征点的相互匹配 xff0c 可以将多张小视角的图像拼接成为一张大视角的图像 xff0c 在广角照片
  • Centos重新安装 python2.7 和 yum

    由于Centos7自带的python大多是2 7版本 有时想装个python3的版本 于是把本来自带的yum一起给删了 这种情况下就要重装 python2 7 和 yum 一 删除Centos自带的python版本 强制删除已安装pytho
  • golang install 'gopls'

    前两天使用vs code写golang程序时 xff0c 突然提示gopls需要更新 xff0c 没有梯子的我 xff0c 很悲催的发现无法正常后取更新 xff0c 而没有这个工具的话 xff0c vs code的代码补齐和调转等功能完全无
  • 高校博士生待遇汇总

    笔者转载 xff0c 没有核实 xff0c 转自2011年的一份博客 xff0c 有兴趣的看看 xff0c 不喜勿喷 xff01 xff01 xff01 原文出自 xff1a http www 360doc com content 11 0
  • 国内从事计算机视觉(CV)领域的公司

    经常碰到朋友问我国内从事计算机视觉 xff08 CV xff09 领域的公司的发展情况 xff0c 产品情况 xff0c 甚至找工作等问题 xff0c 这里 xff0c 我给出自己收集的国内从事CV相关领域的公司网址及其主要产品 xff0c
  • 四川大学 opencv 人脸识别 手势识别 研究项目

    http v youku com v show id XNDAzMjkxOTAw html from 61 y1 2 1 92 3 3 1 1 1 1 2
  • 计算机领域著名的国际会议

    2013 3 7 理论计算机科学领域最顶级学术会议FOCS和STOC 1 IEEE Symposium on Foundations of Computer Science FOCS http ieee focs org 2 STOC Th
  • 人工智能的四个阶段

    人工智能的四个阶段 参考 人工智能 王万森 提起 人工智能 xff0c 从字面上看很容想到与之相对应的 自然智能 xff0c 自然智能基本的解释就是自然界本身具有的智能 xff0c 而人工智能就是人类所创造出来的智能 xff0c 在这里人类
  • 人工神经网络发展历程

    简要介绍人工神经网络发展五大历程 xff0c 都是具有标志性的 xff1a xff08 1 xff09 MP神经网络模型 xff0c 由此开始 xff0c 可以说神经网络始于 20世纪40年代 xff08 2 xff09 Hebb规则 xf
  • 柯西不等式证明(cauchy不等式)

    泛函分析中柯西不等式证明 xff1a
  • Time of flight cameras(TOF carmeras)

    TOF cameras Time Of flight 新型3D图像传感器 xff0c 该传感器使用红外线或者光脉冲来估计光线从发射到检测到的时间延迟来测量距离
  • 求逆矩阵的方法

    一般求逆矩阵的方法有两种 xff0c 伴随阵法和初等变换法 但是这两种方法都不太适合编程 伴随阵法的计算量大 xff0c 初等变换法又难以编程实现 适合编程的求逆矩阵的方法如下 xff1a 1 对可逆矩阵A进行QR分解 xff1a A 61
  • 柯西列

    柯西列 xff1a 无穷数列 xff0c x1 x2 xn xn 43 1 当n为无穷大时 xff0c xn与xn 43 1的距离无穷小
  • Dynamic Feature Learning for Partial Face Recognition (CVPR 2018)

    破题 xff1a 本文提出的模型是Dynamic Feature Learning xff08 DFL xff09 本人要做的事情是Partial Face Recognition xff08 PFR xff09 摘要 xff1a DFL由
  • 安装Docker Desktop报错WSL 2 installation is incomplete的问题(解决报错)

    我们安装Docker Desktop的时候 他会问我们是否需要使用WSL2 基于Windows的Linux子系统 如果我们不适用 就会使用Hyper v虚拟机运行 不过相比于虚拟机 子系统在性能方面更加出色 在我们选择使用WSL2之后 并且

随机推荐

  • vs2013报错:error MSB8020: The build tools for v141 (Platform Toolset = ‘v141‘) cannot be found.

    vs2013报错 xff1a error MSB8020 The build tools for v141 Platform Toolset 61 v141 cannot be found T 原因 xff1a 该项目使用vs2017创建
  • Debian系统更新apt源

    docker search了一个tomcat的镜像 xff0c 发现是Debian系统 xff0c 里面啥啥命令都没有 xff0c 使用的这个难受啊 xff0c 于是 xff0c 强迫症犯了 xff0c 要安装相应软件 xff0c 在容器里
  • Isaac Gym(一)在Ubuntu20.04.1中安装Isaac Gym

    在Ubuntu20 04 1中安装Isaac Gym 前提1 安装 Conda1 1 下载Anaconda3安装文件1 2 运行1 3 设置路径 2 安装 Isaac Gym2 1 下载Isaac Gym安装文件2 2 解压并删除安装包2
  • 在rviz中出现For frame [laser]: Fixed Frame [laser_link] does not exist

    参考 xff1a 链接 一 激光雷达在rviz中没有显示扫描数据 二 解决方法 topic报frame transform之类错误 xff0c 就有两个办法 xff1a 1 把global fixed frame设成topic自己所在的坐标
  • ubuntu安装nerd font字体

    步骤 1 下载nerd font字体文件到某个文件夹 在网址https www nerdfonts com font downloads xff0c 找到JetBrainsMono xff0c DroidSansMono xff0c Dej
  • OpenStack计费项目CloudKitty的强化及运用

    本文转自Openstack中国社区Openstack计费项目CloudKitty的强化及运用 本文作者 xff1a Li Xiangjun 在OpenStack开发社区向 Big Tent 模式全面转型之际 xff0c 一个新的项目 Clo
  • Winpcap数据包的抓取及还原

    winpcap技术手册 xff0c 除了安装文件里doc文件下有个帮助 xff0c 这里在给一个 xff1a http www ferrisxu com WinPcap html index html 这里我们用pcap next ex 函
  • 柱面坐标变换

    在图像拍摄点固定的情况下 xff0c 对图像做柱面投影变换 xff0c 再进行配准会得到较为理想的效果 如图所示 xff0c 点P在相机所处的坐标系下的坐标为 xff0c 在像素坐标系下表示为P xff08 x xff0c y xff09
  • 几行Python代码教你zip打包

    码农一方面是码代码 xff0c 另一方面是布署服务 xff0c 传到服务器时 xff0c 文件数据较多时 xff0c 直接通过文件传输概率性会丢失文件 xff0c 最好是先压成zip包 xff0c 再传输 但是 xff0c zip包中的文件
  • 推荐一款强大的OCR工具

    大家好 xff0c 我是 jonssonyan xff0c 今天我想向大家介绍一款强大的 OCR 工具 Umi OCR 以下是它的开源地址 Umi OCR GitHub xff1a https github com hiroi sora U
  • ArXiv简介以及论文提交

    arXiv网站简介 arXiv是一个收集物理学 数学 计算机科学 生物学与数理经济学的论文预印本的网站 其中arXiv发音同 archive xff0c 因为 X 代表希腊字母 xff0c 国际音标为 kai 它于1991年8月14日成立
  • Vue中axios请求报错

    问题 xff1a axios请求成功但是还是进入catch 在请求后端接口后 xff0c 发现请求成功了 xff0c 但是却报错了 在经过排查之后 xff0c 发现后端返回的数据结构更改了 xff0c 所以导致成功的代码块内部出现错误 xf
  • lsnrctl command not found

    在linux安装完oracle时 当你遇到lsnrctl command not found等问题都不能用时 会有几种情况 1 首先你先查看下环境变量里面有没有加入oracle的配置 执行 echo ORACLE HOME 没有的话 你执行
  • CNC加工中心程序代码大全,你还不收藏吗?

    数控程序中字母的含义 O xff1a 程序号 xff0c 设定程序号 N xff1a 程序段号 xff0c 设定程序顺序号 G xff1a 准备功能 X Y Z xff1a 尺寸字符 xff0c 轴移动指令 A B C U V W xff1
  • 413 Request Entity Too Large(请求实体太大)

    最近开发时遇到了上传失败的情况 xff0c 提示 xff1a 413 Request Entity Too Large xff08 请求实体太大 xff09 因为上传通过代理服务器Nginx xff0c 因此可以 修改代理服务器Nginx
  • Photos(PHFetchResultChangeDetails)

    Photos PHChange Photos PHObjectChangeDetails Photos PHFetchResultChangeDetails PHFetchResultChangeDetails主要用于记录PHFetchRe
  • 远程桌面连接的时候 屏幕一闪就没了 然后不能连接上

    重启本地两个远程服务组件Remote Desktop Services和Remote Desktop Services usermode Port Redirector 如果还不行 xff0c 按下面的试试 启动注册表编辑器 Regedt3
  • 关于codeforces比赛规则介绍(转载)

    Codeforces 简称 cf 所以谈论cf的时候经常被误会成TX的那款游戏 网址 codeforces com 这是一个俄国的算法竞赛网站 由来自萨拉托夫州立大学 由Mike Mirzayanov领导的一个团队创立和维护 是一个举办比赛
  • 自制书立

    店里卖的书立简直贵的离谱 xff0c 不就是一个直角的铁片吗 xff0c 要那么多钱 索性自己做一个 xff0c 就用最便宜的衣架 xff0c 不到一元钱搞定 xff01 把衣架弯成直角 换个角度 xff0c 再来一张 完事了 xff0c
  • 连载:面向对象葵花宝典:思想、技巧与实践(27) - 动态模型设计

    类模型 指导我们如何声明类 xff0c 动态模型 指导我们如何实现类 xff01 动态模型设计一般都是在类模型设计完成后才开始 xff0c 因为动态模型设计的时候一般都需要用到类模型中的类 相对类模型来说 xff0c 动态模型要相对简单一些