一:设计中的挑战
--设计是一个险恶的问题。
--设计是一个了无章法的过程(即使他能得到清爽的结果)。
--设计就是确定取舍和调整顺序的过程。
--设计受到诸多的限制。
--设计是不确定的。
--设计是一个启发式是过程
--设计是自然而然形成的。
二:管理复杂度。
--把任何人在同一时间处理问题的复杂度降到最低。
--不要让偶然的复杂度快速的增长。
三:设计构造快-启发式方法
1:找出现实中的对象:
--辨识对象及属性。
--定义对对象的操作。
--确定每个对象可以对其他对象进行的操作。
--确定对象的哪些部分对其他对象可见。
--定义每个对象的接口。
2:形成一致的抽象:
3:封装实现细节。
4:当继承能简化设计时就继承。
5:信息隐藏。
6:找出容易改变的区域。
7:松耦合,高内聚。
8:构造分成结构。
9:严格描述类契约。
10:分配职责,为测试而设计,避免失误。
11:保持设计的模块化。
四:ADT(abstract data type)抽象数据类型:是指一些数据及对这些数据所进行操作的集合。
--可以隐藏细节。
--改动不会影响整个程序。
--让接口提供更多的信息。
--更容易提高性能。
--让程序的正确性更显而易见。
--程序更具有自我说明性。
--无需再程序内到处传递参数。
五:良好的类接口:创建高质量的类,第一步,也可能是最重要的一步,就是创建一个好的接口。
1:类的接口应该展现一致的抽象层次。
2:一定要理解类要实现的抽象是什么。
3:提供成对的服务。
4:把不相关的信息转移到其他的类中。
5:谨防在修改的时候破坏接口的抽象。
6:不要添加与接口抽象不一致的公共成员。
7:同时考虑抽象性与内聚性。
六:良好的封装:(阻止你看见细节。与抽象是一起的,要么全有,要么全没有。)
--尽可能的限制类和成员的可访问性。
--不要暴漏公开成员函数。
--避免吧私用的实现细节放入到类的接口中。
--不要对类的使用者做出任何的假设。
--要格外的警惕从语义上破坏封装。
--留意过密的耦合关系。
七:子程序
--降低复杂度
--引入中间,易懂的抽象。
--避免代码重复。
--隐藏顺序
--提高可移植性。
--简化复杂的布尔判断。
--改善性能。
--子程序的名字非常的重要
--子程序按照内聚性可以分为许多类。功能性内聚是最佳的一种。
八:防御式编程:保护程序免受遭非法数据的破坏。
--检查所有来源于外部数据的值。
--检查子程序的所有的输入输出值。
--决定如何处理错误的输入值。
九:创建一个类的步骤:
1:创建类的总体设计
2:创建类的子程序。
3:复审并测试整个类。