案例:吉他搜索
Guitar Inventory GuitarSpec
需求变化:增加吉他弦数特性
原始程序需要的变化:
1.修改GuitarSpec,构造,成员,getter
2.修改Guitar,构造,因为改类直接接收吉他特性参数,构造吉对象。
3.修改Inventory,搜索方法,因为该类直接使用吉他特性来进行匹配。
另一种设计:
1.修改Guitar的构造器,让其接收GuitarSpec对象,而不是具体的吉他特性参数。
2.修改Inventory的搜索方法,其中委托GuitarSpec提供的matches()方法进行匹配。

另一种设计程序需要的变化:
1.在GuitarSpec中,增加弦数成员,修改构造,getter,matches()方法。
优点:吉他特性的变化的锚点被集中到了GuitarSpec中,虽然锚点的数量并没有改变,但是我们的程序因为锚点更集中,让我们找到所有的锚点更容易,程序更容易维护。

可以使用锚点这个词语:
增加吉他特性(如弦数)必须找到程序中所有吉他特性产生的锚点,进行改变。这是必要的操作。
原始程序吉他特性的锚点分布在了GuitarSpec,Guitar,Inventory中,当重新设计后,吉他特性的锚点被集中到了GuitarSpec中,范围更小了。锚点数量越多越分散我们的程序就越难以修改。锚点数量越少越集中我们的程序就越容易修改和维护。

第2个优点:吉他特性的比较功能被抽取了出来,更容易复用。

好的设计:
1.集中程序中吉他特性相关的锚点到GuitarSpec类中。锚点数量越少,越集中,找到全部锚点并进行修改的工作就越容易,即程序可维护。
2.抽取matches()方法,并将该方法移动到GuitarSpec类中,而在Inventory类的search方法中使用委托。本质上是1中的具体实现。这样让类间的职责与分工更加明确。matches()方法更易被重用。

伟大软件的三个步骤:
1.确认你的软件做客户要它做的事
2.运用基本的面向对象原则增加软件的灵活性
3.努力实现可维护可重用的设计

业务阶段:

需求:是一个业务目标
用例:是真实环境中用户使用系统实现一个业务目标的详细步骤。
用例焦点:客户的目标
用例关键:系统解决,用系统解决可能存在的妨碍用户实现业务目标的问题。

用例名词:
场景:用例的一个执行路径。(所有的执行路径都需要被测试)
可选路径:可选路径是可能发生的额外情况
分支路径:将会执行多条分支路径中的一个

一个用例三个部分:1.清楚的价值 2.起点与终点 3.外部启动者

需求和用例
1.创建需求列表:用户提出自己原始需求(简陋的,不全面的需求),客户要用系统做的事情。
2.用例:为每个特定的业务目标使用单独的用例,更好的理解这个业务目标。(预料事情会出错,即考虑用户使用系统实现业务目标时可能发生的问题,系统没有考虑到,但如果出现这种问题,会妨碍用户完成业务目标。)
3.改进需求列表:根据用例,用例帮助我们发现一些问题,因此我们需要改进原始的需求列表。
比对需求列表和用例的步骤,如果用例的某个步骤没有找到对应的需求,则我们需要增加新的需求到需求列表中。
4.变化发生,需求列表新增需求:
5.改进用例
6.改进需求列表
...
风险规避:

用例:为了完成一个特定的业务目标的一系列步骤的描述。这些步骤中系统应该做什么。

场景:用例的一个执行路径。(所有的执行路径都需要被测试)
可选路径:可选路径是可能发生的额外情况
分支路径:将会执行多条分支路径中的一个

用例把焦点放在完成一个特定目标上。

用例包含的是系统应该做什么而不是怎么做。
一个用例三个部分:1.清楚的价值 2.起点与终点 3.外部启动者

深入浅出面向对象分析与设计读书笔记一&吉他搜索案例&吉他特性锚点集中&委托&重用&业务阶段&需求列表&用例的更多相关文章

  1. 《UML和模式应用》读书笔记(一)面向对象分析和设计简单示例

    在开始进行对象分析和设计之前,先通过“扔骰子”这个软件(游戏者扔两个骰子,如果总是是7,则赢,否则输),来简单分析下这个过程. 1:用例 需求分析,可能包括人们如何应用的场景或情节,这些都可以被编写成 ...

  2. UML和模式应用学习笔记-1(面向对象分析和设计)

    UML和模式应用学习笔记-1(面向对象分析和设计) 而只是对情节的记录:此处的用例场景为:游戏者请求掷骰子.系统展示结果:如果骰子的总点数是7,则游戏者赢得游戏,否则为输 (2)定义领域模型:在领域模 ...

  3. 《JavaScript面向对象编程指南》读书笔记②

    概述 <JavaScript面向对象编程指南>读书笔记① 这里只记录一下我看JavaScript面向对象编程指南记录下的一些东西.那些简单的知识我没有记录,我只记录几个容易遗漏的或者精彩的 ...

  4. 解析UML的面向对象分析与设计

    经常听到有朋友抱怨,说学了UML不知该怎么用,或者画了UML却觉得没什么作用.其实,就UML本身来说,它只是一种交流工具,它作为一种标准化交流符号,在OOA&D过程中开发人员间甚至开发人员与客 ...

  5. Mysql实战45讲 04讲深入浅出索引(上)读书笔记 极客时间

    极客时间 Mysql实战45讲 04讲深入浅出索引 极客时间(上)读书笔记  笔记体悟 1.索引的作用:提高数据查询效率2.常见索引模型:哈希表.有序数组.搜索树3.哈希表:键 - 值(key - v ...

  6. .NET应用架构设计—面向对象分析与设计四色原型模式(彩色建模、领域无关模型)(概念版)

    阅读目录: 1.背景介绍 2.问自己,UML对你来说有意义吗?它帮助过你对系统进行分析.建模吗? 3.一直以来其实我们被一个缝隙隔开了,使我们对OOAD遥不可及 4.四色原型模式填补这个历史缝隙,让我 ...

  7. .net架构设计读书笔记--第三章 第9节 域模型实现(ImplementingDomain Model)

        我们长时间争论什么方案是实现域业务领域层架构的最佳方法.最后,我们用一个在线商店案例来说明,其中忽略了许多之前遇到的一些场景.在线商店对很多人来说更容易理解. 一.在线商店项目简介 1. 用例 ...

  8. 面向对象分析与设计—OOD部分

    第三部分 面向对象设计 3.1 面向对象设计(OOD)的定义? 在面向对象分析阶段,已经针对用户需求建立起用面向对象概念描述的系统分析模型.在设计阶段,要考虑为实现系统而采用的计算机设备.操作系统.网 ...

  9. 面向对象分析与设计—OOA部分

    第二部分 面向对象分析 2.1 面向对象分析(OOA)的定义? OOA——面向对象的分析,就是运用面向对象方法进行系统分析,对问题域(问题所涉及的范围)和系统责任(所开发的系统应具备的职能)进行分析与 ...

随机推荐

  1. 升级GCC 6.2编译LLVM的问题

    [ 55%] Built target RTInterception.x86_64 [ 55%] Building ASM object projects/compiler-rt/lib/saniti ...

  2. LightOJ - 1274 Beating the Dataset —— 期望

    题目链接:https://vjudge.net/problem/LightOJ-1274 1274 - Beating the Dataset    PDF (English) Statistics ...

  3. joomla搬家之后打不开 首页404错误

    joomla 安装好之后, 网站打不开,首页404错误,后台能够正常访问,数据库连接正常.应该是 nginx配置的问题.该如何修改配置呢?随便一个链接点进去都是404,找不到页面,URL的形式如下: ...

  4. JS如何定义方法及调用 精选

    简单搜索了下,遇到点问题1,经常在JS中看到如var foo = function(){}的形式foo是方法名还是对象名,如果想调用此方法,是用foo(),foo.function(),还是该如何正确 ...

  5. 勤于思考:IE10不支持检测IE6的代码

    这句话 var isIE6 = isIE && ([/MSIE (\d)\.0/i.exec(navigator.userAgent)][0][1] == 6); 在IE6~9都没问题 ...

  6. codewar代码练习1——8级晋升7级

    最近发现一个不错的代码练习网站codewar(http://www.codewars.com).注册了一个账号,花了几天的茶余饭后时间做题,把等级从8级升到了7级.本文的目的主要介绍使用感受及相应题目 ...

  7. BZOJ_3550_[ONTAK2010]Vacation&&BZOJ_1283:_序列_网络流解线性规划

    BZOJ_3550_[ONTAK2010]Vacation&&BZOJ_1283:_序列_网络流解线性规划 Description 给出一个长度为 的正整数序列Ci,求一个子序列,使得 ...

  8. 几个重要的 ASM Disk Groups 参数

    几个重要的Disk group 属性: 1. ACCESS_CONTROL.ENABLED该属性用来控制某个disk group 上ASM FILE Access Control. 该参数有2个值:t ...

  9. bzoj 1202 [HNOI2005]狡猾的商人——带偏移量的并查集

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1202 带偏移量的并查集. 注意先 find() 再调用 dis !!! 自己的对拍太水了. ...

  10. xml解析中的sax解析

    title: xml解析中的sax解析 tags: grammar_cjkRuby: true --- SAXPasser 类: parser(File file, DefaultHandler ha ...