代码大全--第六章--可以工作的类
2013-09-10 23:40
190 查看
类是由一组数据和子程序构成的集合,这些数据和子程序共同拥有一组内聚的、明确定义的职责。类也可以只是由一组子程序构成的集合,这些子程序提供一组内聚的服务,哪怕其中并未涉及共用的数据。成为高效程序员的一个关键就在于,当你开发程序任一部分代码时,都能安全地忽视程序中尽可能多的其余部分。而类就是实现这一目标的首要工具。
6.1 类的基础:抽象数据类型(ADTs)抽象数据类型是指一些数据以及对这些数据所进行的操作的集合。
使用ADTs的益处:
可以隐藏实现的细节
改动不会影响到整个程序
让接口提供更多的信息
更容易提高性能
让程序的正确性更显而易见
程序更具自我说明性
无需再程序内到处传递数据
你可以像在现实世界中那样操作实体,而不用在底层实现上操作它
使用ADTs的指导建议:
把常见的底层数据创建为ADT并使用这些ADT,而不再使用底层数据
把文件这样的常用对象当成ADT
简单的事物也可当作ADT
不要让ADT依赖于其存储介质
6.2 良好的类接口
创建高质量的类,第一步,可能也是最重要的一步,就是创建一个好的接口。
创建类的抽象接口的一些建议:
类的接口应该展现一致的抽象层次
一定要理解类所实现的抽象是什么
提供成对的服务
把不相关的信息转移到其它类中
尽可能让接口可编程,而不是表达语义
谨防在修改是破坏接口的抽象
不要添加与接口抽象不一致的公用成员
同时考虑抽象性和内聚性
良好的封装:
尽可能限制类和成员的可访问性
不要公开暴露成员数据
避免把私用的实现细节放入类的接口中
不要对类的使用者做出任何假设
避免使用友元类
不要因为一个子程序里仅使用公用子程序,就把它归入公开接口
让阅读代码比编写代码更方便
要格外警惕从语义上破坏封装性
留意过于紧密的耦合关系
6.3 有关设计和实现的问题创建类的抽象接口的一些建议:
类的接口应该展现一致的抽象层次
一定要理解类所实现的抽象是什么
提供成对的服务
把不相关的信息转移到其它类中
尽可能让接口可编程,而不是表达语义
谨防在修改是破坏接口的抽象
不要添加与接口抽象不一致的公用成员
同时考虑抽象性和内聚性
良好的封装:
尽可能限制类和成员的可访问性
不要公开暴露成员数据
避免把私用的实现细节放入类的接口中
不要对类的使用者做出任何假设
避免使用友元类
不要因为一个子程序里仅使用公用子程序,就把它归入公开接口
让阅读代码比编写代码更方便
要格外警惕从语义上破坏封装性
留意过于紧密的耦合关系
包含(has a):
包含是一个非常简单的概念,它表示一个类含有一个基本数据元素或对象。包含是面向对象编程的主力技术。
通过包含实现“有一个(has a)”的关系
在万不得已时通过private继承来实现“有一个”关系
警惕有超过7个数据成员的类
继承(is a):
用public继承实现“是一个(is a……)”的关系
要么使用继承并进行详细的说明,要么就不要用它
遵循Liskov替换原则(派生类必须能通过基类的接口而被使用,且使用者无需了解两者之间的差异)
确保只继承需要继承的部分
不要“覆盖”一个不可覆盖的成员函数(即:派生类中的成员函数不要与基类中不可覆盖的成员函数重名)
把共用的接口、数据和操作放到继承树中尽可能高的位置
只有一个实例的类是值得怀疑的
只有一个派生类的基类也是值得怀疑的
派生后覆盖了某个子程序。但在其中没做任何操作,这种情况也值得怀疑
避免让继承体系过深
尽量使用多态,避免大量的类型检查
让所有数据都是private(而非protected)
多重继承:
为什么这么多关于继承的规则:
成员函数和数据成员:
构造函数:
6.4 创建类的原因包含是一个非常简单的概念,它表示一个类含有一个基本数据元素或对象。包含是面向对象编程的主力技术。
通过包含实现“有一个(has a)”的关系
在万不得已时通过private继承来实现“有一个”关系
警惕有超过7个数据成员的类
继承(is a):
用public继承实现“是一个(is a……)”的关系
要么使用继承并进行详细的说明,要么就不要用它
遵循Liskov替换原则(派生类必须能通过基类的接口而被使用,且使用者无需了解两者之间的差异)
确保只继承需要继承的部分
不要“覆盖”一个不可覆盖的成员函数(即:派生类中的成员函数不要与基类中不可覆盖的成员函数重名)
把共用的接口、数据和操作放到继承树中尽可能高的位置
只有一个实例的类是值得怀疑的
只有一个派生类的基类也是值得怀疑的
派生后覆盖了某个子程序。但在其中没做任何操作,这种情况也值得怀疑
避免让继承体系过深
尽量使用多态,避免大量的类型检查
让所有数据都是private(而非protected)
多重继承:
为什么这么多关于继承的规则:
成员函数和数据成员:
构造函数:
创建类的合理原因:
为现实世界中的对象建模
为抽象对象建模
降低复杂度
隔离复杂度
隐藏实现细节
限制变动的影响
隐藏全局数据
让参数传递更顺畅
建立中心控制点
让代码更易于重用
为程序族做计划
把相关操作包装到一起
实现某种特定的重构
为现实世界中的对象建模
为抽象对象建模
降低复杂度
隔离复杂度
隐藏实现细节
限制变动的影响
隐藏全局数据
让参数传递更顺畅
建立中心控制点
让代码更易于重用
为程序族做计划
把相关操作包装到一起
实现某种特定的重构
相关文章推荐
- 【代码大全】第6章 可以工作的类
- 代码大全2_6——可以工作的类
- 安卓手机拨号键盘隐藏工程代码大全,可以看到你每一步的操作
- 模块化设计 (代码大全 第六章)
- java中提供了对正则表达式的支持。 有的时候,恰当地使用正则,可以让我们的工作事半功倍! 如下代码用来检验一个四则运算式中数据项的数目,请填写划线部分缺少的代码。 注意:只填写缺少代码,不要
- script刷新页面,刷新代码,页面自动刷新代码2008年06月10日 星期二 23:00页面自动刷新代码大全,基本上所有要求自动刷新页面的代码都有,大家可以自由发挥做出完美的页面。
- 《代码大全》阅读笔记 第六章 可以工作的类
- 开发人员日常工作之二 - 确保你的代码在本地可以成功构建
- 下一步工作,尽量将代码整理归拢成可以随意组合拆装的代码块。
- 第六章 可以工作的类
- 《代码大全》学习笔记二:第六章 可以工作的类
- 刚刚找到的一个JS的应用代码大全,可以用来作技术资料查询
- 介绍下emacs+gdb调试环境,可以实时跟踪代码执行位置,提高工作效率
- 代码大全第二版读书笔记 第二部分-创建高质量的代码 六、可以工作的类
- javascript弹出窗口代码大全
- discuz添加可以插入优酷等视频的代码
- [转]前端要给力之:代码可以有多烂?
- MySQL 错误代码以及出错信息对照大全
- CSS颜色代码大全
- 可以应用到马克斯电影站生成Rss Feed的代码