代码大全2(读书笔记8)

来源:互联网 发布:mac桌面的u盘图标 编辑:程序博客网 时间:2024/05/21 06:49

91、不好的关联。比如说A类中的子程序调用了B类中的子程序,然后B类中的子程序又调用A类中的子程序。

   它会让系统难于测试,因为你既无法单独测试A类,也无法单独测试B类,除非另一个类至少已经部分就绪。

92、全局变量的使用不当处

全局数据通常会受困于两类问题:一种是子程序在全局数据之上执行操作,但却不知道还有其他的子程序民在用这些全局数据进行操作;另一种是子程序知道其他的子程序也在用全局数据进行操作,但却无法明确地知道都进行了哪些操作。而类内数据就不会遇到这两种问题,因为只有类内部的少数子程序才能直接访问这些数据。

93、信息隐藏的价值

信息隐藏是少数几个得到公认的、在实践中证明了其自身价值的理论技术,并且已经有很长一段时间了。几年前人们就发现,那些运用了信息隐藏技术的大型项目与没有应用这一技术的项目相比,修改起来大约容易4倍。而且,信息隐藏还是结构化程序设计和面向对象设计的根基之一。

95、设计模式通过提供现成的抽象来减少复杂度

如果你说,“这段代码使用Factory Method来创建派生类的实例,”那么你项目中的其他程序员就会明白,这段代码涉及到了一组组相当丰富的交互关系以及编程协议。在你提及到了Factory Method这个设计模式时,所有相关的信息都被唤醒了。

   Factory Method是一个模式,它允许你在对一个特定基类的任意派生类做实例化的时候无须关注具体派生类的情况,除了在Factory Method内部。你可以在《重构》(Fowler 1999)一书的“用工厂方法取代构造函数”一节里看到关于应用Factory Method的不错的讨论。

   你不需要把你代码中的设计思路逐行地讲解给其他的程序员,他们就可以理解你的代码里的设计思路。

  

 96、设计模式的好处

设计模式通过把设计对话提升到一个更高的层次上来简化交流。除了在管理复杂度方面的益处之外,设计模式还能够让设计者在更高一层的粒度上进行思考与讨论,从而加速设计交流过程。如果你说“我拿不准在这里是用Creator(创建者)还是Factory Method,”你其实已经言简意赅地传递了非常多的设计决策----如果你和你的听众都熟悉这些模式的话。设想一下,如果你还要深入细节地去解释Creator模式和Factory Method模式的代码细节,然后再去对这两者做出比较,那该会多费时!

 

97、构造分层结构

分层结构指的是一种分层的信息结构,其中最通用的或者最抽象的概念表示位于层次关系的最上面,而越来越详细的具有特定意义的概念表示放在更低的层次中。在软件中,在类的层次结构中可以看到分层的组织结构,以及如图5-2中的第四层所表示的,子程序调用也具有分层结构。

分层结构用作管理复杂信息的重要工具已经至少有2000年了。亚里士多德用分层结构来组织动物王国。人类也常常使用大纲来组织复杂的信息(就像这本书一样)。研究人员发现,人类常常把分层结构看作是管理复杂信息的一种很自然的方法。当他们画复杂的对象的时候,比如说是一座房屋,他们总是一层层地去画。首先画出房屋的轮廓,然后画窗口和门,接下来画进一步的细节。而不是一块砖、一片瓦、一块钉地去画。

分层结构是实现软件的首要技术使命的有用工具,因为它使你能够只关注于当前正在关注的那一层细节。其他的细节并没有完全消失,它们只是被放到了另一层次上,这样你就可以在需要的时候去考虑它们,而不是在所有的时间都要考虑所有的细节。

从每个层次来看都不繁杂。

 

98、画一个图

画图是另一各强大的启发式方法。一幅图顶得上一千句话。你肯定想省下这一千句话中的大部分,因为使用一幅画的关键一点就是,图能够在一个更高的抽象层次上表达问题。

 

99、遇到难题时的态度

   最有效的原则之一就是不要卡在单一的方法上。如果用UML画设计图不可行,那么就直接用英语来写。写段简短的测试程序。尝试一种截然不同的方法。想出一种蛮力解决方案。用铅笔画出轮廓和草图来指导思维。如果这些方法都不行,那么就先离开这个问题。可以去散散步,或者想一想其他的事情,然后再回来重新面对这个问题。如果你尽了全力还没能取得突破,那么暂时不要去想它反而会比穷思苦想的效果要好。

  你无须马上解决整个设计难题。一旦被卡住了,那么请记住回过头为时有一处地方需要做决策,但眼下你还没有足够的信息来解决这个问题。为什么要在最后的20%设计环节冥思苦想,如果后来能轻易持找到答案呢?为什么在自己还缺少经验时一定要去做出一些不好的设计\而不等到日后自己经验丰富时再做出更好的决策呢?有些人如果在一个设计循环过后没有把所有的问题都解决,就会感到很不舒服。实际上,如果你尝试了一些设计方案,但没有很好的解决问题的时候,更自然的方式是让那些问题留在未解决的状态,等你拥有更多的信息之后再去做。

 

100、从上到下,从下到上

当你在务选的设计方案之中循环并且尝试一些不同的做法时,你将同时从高层和低层的不同视角去审视问题。你从高层视角中得出的大范围图景会有助于你把相关的底层细节纳入考虑。你从底层视角中所获得的细节也会为你的高层决策奠定基础。这种高低层面之间的互动被认为是一种良性的原动力,它所创建的结构要远远稳定于单纯自上而下或者自下而上创建的结构。