第二章:用隐喻更充分的理解软件开发
1、当将软件的构建过程比作房屋的构建过程时,可以发现,仔细的准备是必要的,发生变动时最贵的成本是人的时间,而大型项目和小型项目之间也有差异。
2、软件开发实践中,每位工程师都有许多工具,但不存在任何一个能适用于所有工作的工具,因地制宜德尔选择正确工具是成为能有效编程的程序员的关机。
抽象数据类型ADT :一组数据 和 对其的操作
类可以看成是 ADT + 继承 +多态
良好的类接口,类接口可以看成类共有子程序所构成的集合
类接口应该表现一致的抽象层次。
尽可能让接口可编程,而不是表达语义。将接口中逻辑部分转换为编辑器能实施的部分,如使用assert等。
一般来说应该尽量减少类和类之间相互合作的范围
减少实例化对象的数量
减少实例对象调用不同子程序的数量
高质量的子程序
变量名最好在9~15个字母之间
子程序名(方法名)则视命名是否清晰易懂而定
子程序的行数不要超过200行(不算注释与空行),否则可读性会下降
不要把子程序的参数用与计算处理,要用局部变量在子程序内处理
为子程序传递参数是多个变量还是一个对象,应该根据子程序参数的抽象层次上考虑。
防御式编程
子程序应该不应传入错误数据而被破坏
来写自己的断言,(在生产阶段关闭断言)
用断言来处理绝不应该发生的情况,而用错误处理代码来处理预期可能发生的状况。
隔离程序使其包容由错误产生的损害,让软件的某些部分处理“不干净的数据”,而让另一部分处理“干净的数据”,比如类的公用方法可以处理不干净的数据,而在调用私有方法时则认为数据都是干净的。在得到外部数据时可以得到清理,有时候多层清理也是应当的。