Head.First.Object-Oriented.Design.and.Analysis《深入浅出面向对象的分析与设计》读书笔记(三)...

  

引言

     

      今天我们说一下需求变更,也就是需求变化了。。。。。。。。。。。。。。。。。。

  这恐怕是我们最头疼的了。

  

正文

     

      接着上回说,因为开发了一个狗门,使得我们可以舒服一阵子了。这时候,电话来了。一个客户打来电话说:“你们的狗门工作的很好,很不错,只是我们想要有一点变化。我们需要一直听小狗是否叫了,是否需要出去。可是有时候我们会听不见,小狗就会尿在家里。能否让门在小狗叫的时候自动打开呢?而不需要我们的参与呢?”


  

  

  肯定有人会说,我们已经让狗门工作的很好,而且客户也说很不错。为什么就是因为他们有了新的想法,我们就需要对门进行修改呢?

  用户永远是对的。The Customer is always right.

  在需求发生变化的时候,你必须要修改软件,使得它可以像客户期望的一样运行。在客户有新想法的时候,就是你改变系统满足新需求的时候。

  无论你的软件设计的多么好,随着时间的推移,系统需要升级和变化。你会发现新的问题,编程语言将会进化,或者是你的客户会提出新需求来让你满足他。

  

  


      针对用户的新需求,我们需要对上次得出的use case做一点修改。需要添加一个叫声识别装置,当听到狗叫的时候,发送开门的命令来打开门。

      新的use case单

      1、小狗叫了,他想出去

      2、声音识别器“听到”声音(可选路径:用户听到狗叫的声音)

      3、识别器发送开门的命令给门(可选路径:用户按下遥控器的按钮)

      4、狗门打开

      5、小狗出去

      6、在外面玩

        6.1 狗门自动关闭

        6.2 小狗又叫了,想要回来

        6.3 声音识别器“听到”声音(可选路径:用户听到狗叫的声音)

        6.4 识别器发送开门的命令给门(可选路径:用户按下遥控器的按钮)

        6.5 狗门再次打开

      7、小狗回来了

      8、门自动关闭

     

      每一次修改use case都要验证用户的需求是否被满足,也就是要检查需求是否在use case中得到满足。

      这次用户的requirements有了新的东西

      1、狗门的高度至少要12英寸

      2、使用遥控器就可以打开、关闭狗门

      3、门要在打开之后,可以自动关闭

      4、在狗叫的时候,识别器应该可以识别

      5、在狗叫的时候,识别器应该可以打开门

      我们来添加一个recognizer的类

 

ExpandedBlockStart.gif 代码
<!--<br/ /> <br/ /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ /> http://www.CodeHighlighter.com/<br/ /> <br/ /> --> using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;

namespace  BeautyCode.Common.ConApp.Head.First.OO.Design
{
    
public   class  BarkRecognizer
    {
        
private  DogDoor _door;
        
public  BarkRecognizer(DogDoor door)
        {
            _door 
=  door;
        }
        
public   void  Recognize( string  bark)
        {
            Console.WriteLine(
" Bark Recognizer: heard a  " + bark );
            _door.Open();
        }
    }
}

 

      调用代码就变成了

 

ExpandedBlockStart.gif 代码
<!--<br/ /> <br/ /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ /> http://www.CodeHighlighter.com/<br/ /> <br/ /> -->           Head.First.OO.Design.DogDoor door  =   new  Head.First.OO.Design.DogDoor();
            Head.First.OO.Design.BarkRecognizer recognizer 
=   new  Head.First.OO.Design.BarkRecognizer(door);
            recognizer.Recognize(
" bark " );

 

      对了,我们差点忘记了。还要求门再打开之后要自动关闭。

      我们可以将remote类的代码copy一份,放在recognizer中。等等,copy,一出现copy我们就需要好好的思量了。为什么要copy,这样的话,就会给下次的修改造成很大的麻烦,要找到所有的副本,进行修改,少了一个地方都会报错。

      那我们在哪里关闭门呢?关闭门应该是属于门的一部分,是门的职责,不应该受到外部的影响。为什么我们不让门自己关闭呢?这不就是自动关闭了吗?

      下面是修改了的DogDoor类,在open方法的后面加上自动close,删除其他类中的关闭门的操作。

ExpandedBlockStart.gif 代码
<!--<br/ /> <br/ /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ /> http://www.CodeHighlighter.com/<br/ /> <br/ /> --> using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;

namespace  BeautyCode.Common.ConApp.Head.First.OO.Design
{
    
public   class  DogDoor
    {
        
private   bool  _open;
        
public  DogDoor()
        {
            _open 
=   false ;
        }
        
public   void  Open()
        {
            Console.WriteLine(
" the dog door opens " );
            
this ._open  =   true ;

            System.Threading.Thread.Sleep(
5000 );
            Close();
        }
        
public   void  Close()
        {
            Console.WriteLine(
" the dog door closes " );
            
this ._open  =   false ;
        }
        
public   bool  IsOpen()
        {
            
return  _open;
        }
    }
}

 

结论

     

      1、你的需求会不断变化

      2、应对的方式就是封装变化

      encapsulate the varies. 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
强烈推荐 “《深入浅出面向对象分析设计》对OOA&D这个主题的探讨令人耳目一新。 本书与众不同之处在于它将焦点摆在学习上,本书的诸位作者让从业人员对OOA&D的内涵不再感到遥不可及,而且它在实际工作中确实有用。”               ——Iva Jacobson Ivar Jacobson Consulting UML之父 “隐匿在诙谐图片与逗趣文字背后的是对OOA&D这个主题认真、睿智且极具匠心的阐述。阅读本书,感觉就像站在专家的肩膀上环顾四方,聆听他一步步、细心倾诉那些重要的议题,并且告诉我为什么。”             ——Edward Sciore 波士顿学院计算机科学系副教授 “刚读完这本书,我就深深地爱上它了!我最喜欢的一件事就是本书把焦 点放在我们实践OOA&D的原因上一写出伟大的软件!”                         ——Kyle Brown IBM杰出工程师你是否早已对市面上那些只有在成为专家以后读起来才有感觉的OOA&D书籍感到厌倦?你可能早就听说过OOA&D书籍能帮助你写出伟大的软件一让老板高兴、客户满意的软件。 《深入浅出面向对象分析设计》将告诉你如何分析设计以及撰写真正面向对象的软件:容易重利用、好维护、可扩展的软件;不再使你心碎的软件;让你增添新功能而不会破坏旧机制的软件。在本书中,你将学到:   使用诸如封装(encapsulation)与委派(delegation)的OO原则建立灵活的应用程序。   使用开闭原则(Open—C10 sed Principle)与单一责任原则(Single—Responsibility Principle)提升程序的重利用性。   学习如何将OO原则、设计模式及各种开发方法通通整合到OOA&D项目的生命周期里。   运用UML、用例及用例图来确保所有利害关系人都能清楚地进行沟通,协助你交付正确的软件,达到每个人的要求。   通过一连串的脑力开发,《深入浅出面向对象分析设计》压缩了学习与获取复杂信息所需的时间。可以预料,这将是一段充满乐趣的学习之旅。相信在读完本书之时,你肯定能够写出伟大的软件。
强烈推荐 “《深入浅出面向对象分析设计》对OOA&D这个主题的探讨令人耳目一新。 本书与众不同之处在于它将焦点摆在学习上,本书的诸位作者让从业人员对OOA&D的内涵不再感到遥不可及,而且它在实际工作中确实有用。”               ——Iva Jacobson Ivar Jacobson Consulting UML之父 “隐匿在诙谐图片与逗趣文字背后的是对OOA&D这个主题认真、睿智且极具匠心的阐述。阅读本书,感觉就像站在专家的肩膀上环顾四方,聆听他一步步、细心倾诉那些重要的议题,并且告诉我为什么。”             ——Edward Sciore 波士顿学院计算机科学系副教授 “刚读完这本书,我就深深地爱上它了!我最喜欢的一件事就是本书把焦 点放在我们实践OOA&D的原因上一写出伟大的软件!”                         ——Kyle Brown IBM杰出工程师你是否早已对市面上那些只有在成为专家以后读起来才有感觉的OOA&D书籍感到厌倦?你可能早就听说过OOA&D书籍能帮助你写出伟大的软件一让老板高兴、客户满意的软件。 《深入浅出面向对象分析设计》将告诉你如何分析设计以及撰写真正面向对象的软件:容易重利用、好维护、可扩展的软件;不再使你心碎的软件;让你增添新功能而不会破坏旧机制的软件。在本书中,你将学到:   使用诸如封装(encapsulation)与委派(delegation)的OO原则建立灵活的应用程序。   使用开闭原则(Open—C10 sed Principle)与单一责任原则(Single—Responsibility Principle)提升程序的重利用性。   学习如何将OO原则、设计模式及各种开发方法通通整合到OOA&D项目的生命周期里。   运用UML、用例及用例图来确保所有利害关系人都能清楚地进行沟通,协助你交付正确的软件,达到每个人的要求。   通过一连串的脑力开发,《深入浅出面向对象分析设计》压缩了学习与获取复杂信息所需的时间。可以预料,这将是一段充满乐趣的学习之旅。相信在读完本书之时,你肯定能够写出伟大的软件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值