对于具体编程工作来说,做了某事能得到某样结果,这样期待确定性是正常的。但对于软件设计来说并非如此,因为软件设计是非确定性的,因此,应用启发式方法(试探法)便成了合理的软件设计核心工作。
启发式方法
1、找出现实世界中的对象
步骤:
- 辨识对象及其属性(方法和数据)
- 确定可以对该对象进行的操作
- 确定对象能对其它对象进行的操作
- 确定对象那些部份是公用,那些是私用
- 定义对象的公开接口
这些步骤并不以特定顺序来完成,它们经常被反复执行,迭代是非常重要的。
2、形成一致的抽象
抽象就是在不同的层次处理不同的细节。让你在在关注某一概念的同时可以放心忽略其中一些细节的能力。
以复杂度的观点看,抽象的主要好处就在于它使你能忽略无关的细节。
大多程序员常犯的一个错误就是在较低抽象层次上构建系统,因此系统变得异常复杂。
注:原书有个关于房屋的举例,很生动直观,建议配原书看。
3、封装实现细节
封装填补了抽象留下的空白。
抽象是说“可以让你从高层的细节来看待一个对象”
而封装则说“除此之外,你不能看到对象的任何其它细节层次”
4、当继承能简化设计时就继承
继承是面向对象编程中最强大的工具之一。如果使用得当,它能带来极大的益处,然后如果使用不当,它也有极大的弊端。详见原书6.3中的“继承”
。。。