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

	面向对象编程的概念构建于三个基本特征之上:封装,继承,多态。在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、是否通用类型
     确定是否要用类模板

*即使是一个抽象基类,如果它有非静态数据成员,也应该给它提供一 个带参数的构造函数
*不要将析构函数设计为纯虚的,这不是一个好的设计
*不要滥用虚函数
*决不在构造函数或析构函数中使用虚函数机制
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值