代码大全》笔记 06 - 可以工作的类
豆瓣:https://book.douban.com/subject/1477390/
《Code Complete》2d ed,CC2
-
软件开发技术的发展,先是直接基于语句来思考编程问题,然后发展到基于子程序来思考,到现在是基于类来思考。
-
类是由一组数据和子程序构成的集合,这些数据和子程序共同拥有一组内聚的、明确定义的职责。
抽象数据类型
- 抽象数据类型(ADT,abstract data type)是指一些数据以及对这些数据所进行的操作的集合。
-
可以隐藏实现细节。
-
改动不会影响到整个程序。
-
让接口能提供更多信息。
-
更容易提高性能。
-
让程序的正确性更显而易见。
-
程序更具自我说明性。
-
无需在程序内到处传递数据。
-
可以基于高层抽象操作实体,不用关注细节。
良好的类接口
- 类的接口为隐藏在其后的具体实现提供了一种抽象。
-
如果类的接口不能展现出一种一致的抽象,那该类的内聚性就很弱。
-
接口不应只基于语义表达而设计,应基于可编程设计,即编译器能识别并强制实施接口的意图。
良好的封装
- 尽可能限制类和成员的可访问性。
-
不要公开暴露成员数据。
-
避免把私用的实现细节放入类的接口中。
-
不要对类的使用者做出任何假设。
-
避免使用友元类。
-
警惕从语义上破坏封装性。有时上帝视角是坏事。
有关设计和实现的问题
- 包含(has a)才是面向对象编程中的主力技术,而非继承。
-
类的数据成员数量最好不要超过 7 个。
-
继承适用于“是一个……”(is a)的关系。
-
继承遵循里氏替换原则。
-
避免让继承体系过深。
创建类的原因
- 为现实世界中的对象建模。
-
为抽象的对象建模。
-
降低复杂度。
-
隔离复杂度。
-
隐藏实现细节。
-
限制变动的影响范围。
-
隐藏全局数据。
-
让参数传递更顺畅。
-
建立中心控制点。
-
让代码易于重用。
2019-12-28 - 廖杰良