《设计模式解析》读书笔记-第一章

传统的软件分析方法:功能分解。分析人员将问题分解成了多个功能 ” 功能分解 “ 这种方法就称为步骤(这些步骤就构成了这个问题)。

功能分解方法的缺点:1.它通常会导致让一个主程序负责控制子程序,这是将功能分解为多个子功能的自然结果。但是,主程序所承受的任务太多了:要确保一切正确工作,还要协调各函数并控制它们的先后顺序。

          2.功能分解方法的另一个问题在于,它在为未来可能出现的变化未雨绸缪方面,在对代码合适的改进方面,都无能为力。函数要关注的细节是否太多了,比如要实现的逻辑、要交互的东西、要使用的数据?和人一样,如果程序试图同时关注过多的东西,一但有变化出现,就只能坐等BUG。虽然无法预测会发生什么变化,但是通常可以预期哪里更会发生变化。

使用功能分解时,需求变更会对软件开发和维护工作产生极大影响。这时候,主要的精力都放在函数上了(注意力放错地方),而对一组函数或者数据的修改会影响到其他的函数和数据,并依此类推地影响到其他必须修改的函数。只关注函数,将导致一连串变化,而且难以避免。

面向对象的巨大优点之一,就是可以封装这些变化区域,从而容易地将代码与变化产生的影响隔离开来。

面向对象

在概念层次上,对象是一组责任。

在规约层次上,对象是其他对象或对象自己调用的方法

在实现层次上,对象是代码和数据以及他们间的计算交互

在概念层次上定义抽象类会更有帮助。在概念层次,抽象类就是(实现抽象类所代表的概念的)其他类的占位符。 也就是说,抽象类为我们提供了一种方法,能够给一组相关的类赋予一个名字。这使我们能够将这一组相关类看成一个概念。抽象类定义了如何在概念层次上解决问题,还提供了与任何派生对象通信的规约。每个派生类都按需要提供特定的实现。

接口(Interface)编程的时候,如果需要几个类共享公共基类中没有的一些特性,而且希望确保每个类自己实现这些特性(因为所有成员都是抽
象的),就应该使接口。

原文地址:https://www.cnblogs.com/encode/p/4373102.html