《代码大全》学习笔记 可以工作的类
2015-04-20 15:38
239 查看
第6章 可以工作的类
//针对如何创建高质量的类,提供一些精辟的建议。类的基础
1.类的基础:抽象数据类型
要理解面向对象编程,首先要理解ADT。2.使用ADT的益处
可以隐藏实现细节;
改动不会影响到整个程序;
让接口能提供更多信息;
更容易提高性能;
让程序的正确性更显而易见;
程序更具自我说明性;
无需在程序内到处传递数据;
3.使用ADTs的指导建议:
把常见的底层数据创建为ADT并使用这些ADT,而不再使用底层数据
把文件这样的常用对象当成ADT
简单的事物也可当作ADT
不要让ADT依赖于其存储介质
[b]良好的类接口[/b]
//创建高质量的类,第一步,可能也是最重要的一步,就是创建一个好的接口。
3.创建类的抽象接口的一些建议:
类的接口应该展现一致的抽象层次
一定要理解类所实现的抽象是什么
提供成对的服务
把不相关的信息转移到其它类中
尽可能让接口可编程,而不是表达语义
谨防在修改是破坏接口的抽象
不要添加与接口抽象不一致的公用成员
同时考虑抽象性和内聚性
4.良好的封装:
尽可能限制类和成员的可访问性
不要公开暴露成员数据
避免把私用的实现细节放入类的接口中
不要对类的使用者做出任何假设
避免使用友元类
不要因为一个子程序里仅使用公用子程序,就把它归入公开接口
让阅读代码比编写代码更方便
要格外警惕从语义上破坏封装性
留意过于紧密的耦合关系
“关注类的接口所表现出来的抽象,比关注类的内聚性更有助于深入的理解类的设计。”
有关设计和实现的问题
5.包含(has a “有一个 ”的关系):
包含是一个非常简单的概念,它表示一个类含有一个基本数据元素或对象。包含是面向对象编程的主力技术。
通过包含实现“有一个(has a)”的关系
在万不得已时通过private继承来实现“有一个”关系
警惕有超过7个数据成员的类
6.继承(is a “是一个 ”的关系):
用public继承实现“是一个(is a……)”的关系
要么使用继承并进行详细的说明,要么就不要用它
遵循Liskov替换原则(派生类必须能通过基类的接口而被使用,且使用者无需了解两者之间的差异)
确保只继承需要继承的部分
不要“覆盖”一个不可覆盖的成员函数(即:派生类中的成员函数不要与基类中不可覆盖的成员函数重名)
把共用的接口、数据和操作放到继承树中尽可能高的位置
只有一个实例的类是值得怀疑的
只有一个派生类的基类也是值得怀疑的
派生后覆盖了某个子程序。但在其中没做任何操作,这种情况也值得怀疑
避免让继承体系过深
尽量使用多态,避免大量的类型检查
让所有数据都是private(而非protected)
7.
要么使用继承并进行详细的说明,要么就不使用它。使用继承程序增加复杂度,是一种危险的技术,要尽量少用。
总结
类的接口应提供一致的抽象。很多问题都是由于违背该原则而引起的。类的接口应该隐藏一些信息——如某个系统接口、某项设计决策、或者一些实现细节。
包含往往比继承更为可取——除非你要对“是一个/is a”的关系建模。
继承是一种有用的工具,但它却会增加复杂度。
类是管理复杂度的首选工具。
相关文章推荐
- 《代码大全》学习之--可以工作的类
- Python web框架Django学习(1)——在win7 64bit下配置开发环境Django:一个可以使Web开发工作愉快并且高效的Web开发框架。 使用Django,使你能够以最小的代价构建和
- 第一行代码学习笔记 ——准备工作(一)
- Oracle11g学习笔记_20170508_Oracle安装后经常出现的nmefwmi.exe已停止工作的问题
- 工作学习笔记——VS2010无法复制exe文件导致的工程生成失败问题
- 【deep learning学习笔记】注释yusugomori的SDA代码 -- 准备工作
- Linux Kernel 学习笔记14:工作队列
- 机器学习基石笔记7——为什么机器可以学习(3)
- 【学习笔记】后端数据管理的准备工作
- 学习笔记:一个操作系统的实现--搭建你的工作环境
- Eclipse IDE 使用技巧 (Eclipse工作空间小技巧)(自己的一些学习笔记和心得,记录下来,备忘录和复习使用)
- HTML5学习笔记:HTML5基于本地存储SQLite的每日工作任务清单程序.[只支持chrome]
- ROS学习笔记一(ROS的catkin工作空间)
- 产品经理学习笔记(3)-腾讯亿级用户的团队经验:产品经理如何协同工作
- 《代码大全》学习笔记二:第六章 可以工作的类
- 工作学习笔记——Alljoyn技术、初试Android开发
- 学习笔记-----关于C++中类的成员函数可以访问私有成员的问题
- Linux学习笔记之工作管理
- cocos2d-x 3.0 学习笔记: 一个可以拖拽的Label及schedule的应用
- 工作学习笔记1:大小端测试方法