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

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

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

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

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

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

参考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
================================================

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

  1. 猫和老鼠面向对象java语言_面向对象葵花宝典- 完整版.pdf

    构架,均衡,负载,网站,应用,net,存储系统,java,设计模式,互联网 面向对象葵花宝典 /yunhua_lee 面向对象葵花宝典 目录 第一部分:面向对象基础6 1.面向对象概述6 1.1. 程 ...

  2. 【Java设计模式 面向对象设计思想】一 再谈面向对象和封装、抽象、继承、多态四大特性

    回看最初的目标:[Java设计模式 学习目标及大纲]高质量代码的标准及实现路径在这篇Blog里我们明确了什么是高质量的代码:易维护.易读.易扩展.灵活.简洁.可复用.可测试,也知道高质量代码的达成路径 ...

  3. 面向对象编程思想概览(一)类和对象

    一.简介 生活中有许多技巧值得我们在程序设计中模仿和借鉴.采用类的思想可以方便地把具有相同属性和方法归为一类,从而简化编程.本讲利用生活的常见示例,浅显通俗的语言,生动地介绍了面向对象编程中类与对象的 ...

  4. App 后台架构设计方案 设计思想与最佳实践

    CSDN 2016博客之星评选结果公布      [系列直播]零基础学习微信小程序!        "我的2016"主题征文活动     博客的神秘功能 App 后台架构设计方案 ...

  5. 编写程序描述影视歌三栖艺人。需求说明:请使用面向对象的思想,设计自定义类,描述影视歌三梄艺人。...

    编写程序描述影视歌三栖艺人.需求说明:请使用面向对象的思想,设计自定义类,描述影视歌三梄艺人. 实现思路: 1) 分析影视歌三栖艺人的特性:可以演电影,可以演电视剧,可以唱歌 2) 定义多个接口描述特 ...

  6. 面向对象编程思想 - 月亮晶石的日志 - 网易博客

    面向对象是一种新兴的程序设计方法,或者说它是一种新的程序设计范型,其基本思想是使用对象,类,继承,封装,消息等基本概念来进行程序设计.   它是从现实世界中客观存在的事物(即对象)出发来构造软件系统, ...

  7. 用面向对象的思想探讨游戏“魔兽争霸”(1)

    [文章标题]用面向对象的思想探讨游戏"魔兽争霸"(1) [文章作者]曾健生 [作者邮箱]zengjiansheng1@126.com [作者QQ]190678908 [作者博客]h ...

  8. 理解面向对象编程思想

    面向过程 面向过程概念:是一种编程思想,就是分析出解决问题所需要的步骤,然后用方法把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了. 通过下面造车案例了解 面向过程特点:开发周期慢,但是性能 ...

  9. Java学习——面向对象编程思想

    目录 一. 基本概念 二. 面向对象与面向过程的区别 三. 面向对象程序设计的类与对象 3.1 对象 3.2 类 四. 面向对象的四大特征 4.1 抽象 4.2 继承 4.3 封装 4.4 多态 1) ...

  10. java面向对象的设计思想,java设计形式之面向对象的思想(think in OO(Object Oriented))...

    java设计模式之面向对象的思想(think in OO(Object Oriented)) 面向对象的概念: 就是用对象的思维方式,抽象生活中的事物,设计程序,其基本思想是使用对象,类,继承,封装, ...

最新文章

  1. 分布式服务管理框架-Zookeeper节点ACL
  2. 简单介绍Fedora 8飞信安装及解压
  3. mac安装telnet 超简单 复制telnet文件即可
  4. Lua开发学习4-普通循环和迭代器循环
  5. orton效果_如何使图片发光:Orton效果
  6. python代码可以内嵌在asp文件中_在IE中使用Python作为开发脚本(转)
  7. 在Python中使用Seaborn和WordCloud可视化YouTube视频
  8. HyperLogLog 算法原理及其在 Redis 中的实现
  9. 第0章 前言(续1)
  10. 推荐5大开源工具,用于开发Kubernetes项目
  11. LeetCode 633. Sum of Square Numbers
  12. Ubuntu 14.04 更换阿里云源
  13. 搭建Hexo博客并部署到Github
  14. 如何让WebStorm正常显示出中文提示,使得中文能够正常输入,请看这里
  15. Knowledge Distillation论文阅读之:综述文章:Knowledge Distillation
  16. 内外网电脑远程桌面教程(win10)
  17. 保利威视根据vid查询视频信息
  18. 欧几里得几何(1)Alpha
  19. 总结JavaScript的数据类型转换
  20. 类C语言--栈与队列习题:回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算法判定给定的字符向量是否为回文。(提示:将一半字符入栈)

热门文章

  1. OSPF 之 6类LSA详解
  2. 微信小程序ios地图标记点无法点击第二次 markertap
  3. Box Model 盒子模型 贷前数据查询 网贷多头借贷信息查询系统开发手机查询
  4. CodeLite 16.0可以编译通过,但是在编辑器界面会显示找不到标准库头文件
  5. 装系统时的UEFI模式
  6. What the f*ck Python!
  7. Invalid value earliest for configuration auto.commit.interval.ms: Not a number of type INT
  8. Tensorflow-GPU使用时笔记本电脑声音过大的问题
  9. 水星怎么设置网速最快_wifi怎样设置网速最快
  10. NetworkX中文使用手册