常用软件开发方法:功能分解。功能分解是一种处理复杂问题的自然方法。一个重要问题是主程序负责的东西太多,可以采用委托的方式解决,另一个问题是无法应对变化。
需求总在变化,我们应该尽量在第一次编写时就努力考虑未来的变化。
模块化有助于应对需求变化,但往往带来了低内聚和高耦合性。
责任转移是更好的应对需求变更的方法,
软件开发过程中的视角:概念,规约(接口),实现。
在概念层次上,对象是一组责任。在规约层次上,对象是一组可以被其他对象或对象自己调用的方法,在实现层次上,对象是代码和数据,以及它们之间的计算交互。
抽象类不只是不能实例化,为我们提供了一种方法,能够给一组相关的类赋予一个名字,使我们能够将一组相关类看成一个概念。
封装的优点:使用更容易,用户不再需要再操心实现问题了;可以在不考虑调用者的情况下修改实现;其他对象对该对象内部是未知的。
封装使得对象对自己行为所负的责任越多,控制程序需要负的责任就越少,封装使对象内部行为的变化对其他对象变得透明,封装有助于防止不良副作用。