您的位置:首页 > 编程语言 > C语言/C++

C++类和接口的设计原则探讨

2013-04-11 16:25 260 查看
面向对象编程的概念构建于三个基本特征之上:封装,继承,多态。在C++中,class是面向对象编程概念的核心和具体形式。class通过私有成员体现“封装”,通过直接继承或者组合体现“继承”,通过虚函数和动态绑定(dynamic binding)体现“多态”。Class的设计质量直接决定了整个系统的质量。
a.从整体功能层面谈class设计:
a.1 单一功能原则
一个class就其整体应该只提供单一的服务。如果一个class提供多样的服务,那么就应该把它拆分,反之,如果一个在概念上单一的功能却由几个class负责,这几个class应该合并。
a.2 开放/封闭原则
一个设计并实现好的class,应该对扩充的动作开放,而对修改的动作封闭。也就是说,这个class应该是允许扩充的,但不允许修改。如果需要功能上的扩充,一般来说应该通过添加新类实现,而不是修改原类的代码。添加新类不单可以通过直接继承,也可以通过组合。

b.接口隔离原则
从内部我们看到的是实现。因为系统肯定要不断修改,因此实现免不了不停的变化,但是接口又被要求尽量保持稳定。这两者的矛盾必须通过良好的设计尽量避免,所以接口的设计保持最小而完整而且接口与实现细节要隔离。

c.类之间的关系应该是松耦合减少依赖
一个类对另外一个类的依赖性应当是建立在最小的接口上的

设计一个高效率的类型(class 型别)
1、对象如何产生和销毁?
确定构造函数和析构函数的设计。
2、对象的初始化和赋值有什么不同?
决定构造函数和赋值函数的设计。
3、对象如何传值
决定拷贝构造函数的设计
4、确定合法的范围  成员数据的定义域
确定做什么检查,何时抛出异常
5、判断是否能从已有的类继承
如果能继承,注意受基类哪些约束,哪些要用虚函数。
6、允许那种类型转换
构造函数可以用作隐式类型转换,显式类型转换要自定义。
7、新类型需要哪些运算和函数
确定class的接口。
8、哪些运算和函数必须禁用
放到private成员中。
9、新类型的对象可调用哪些函数
确定公有成员函数,保护成员函数,私有成员函数。
10、是否通用类型
确定是否要用类模板

*即使是一个抽象基类,如果它有非静态数据成员,也应该给它提供一 个带参数的构造函数
*不要将析构函数设计为纯虚的,这不是一个好的设计
*不要滥用虚函数
*决不在构造函数或析构函数中使用虚函数机制
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: