首页 > 编程语言 > 详细

C++编程规范之42:不要公开内部数据

时间:2014-01-21 09:25:11      阅读:388      评论:0      收藏:0      [点我收藏+]

摘要:

    不要过于自动自发:避免返回类所管理的内部数据的句柄,这样类的客户就不会不受控制地修改对象自己拥有的状态。

class Socket

{

public:

         //...打开handle_的构造函数,关闭handle_的析构函数,等等

         int GetHandle() const{ return handle_;}

private:

         int handle_;

};

    数据隐藏是一种强大的抽象方式,也是强大的模块化机制。但是隐藏数据却又暴露句柄的作法是一种自欺欺人,就像你锁上了自己家的家门,确把钥匙留在了锁里。原因如下:

    1.客户现在有两种方式实现其功能。可能使用你的类提供的抽象,也可以直接操作你的类所依赖的实现。在后一种情况下,对象并不知道自己所拥有的资源已经发生了显著变化。现在类无法可靠地增加或者改善功能了,因为客户可以避开这些改善的、受控的实现——以及任何它认为后加的不变式,这样本来正确的错误处理就几乎不可能起作用了。

    2.类不能改变其抽象的底层实现,因为客户将依赖于此。如果以后升级socket,用不同的低级操作原语支持不同的协议,则获取了底层handle_且布恩那个对其进行正确操作的调用代码就会不加警告地中断。

    3.类无法实施其不变式,因为调用代码能够在类不知情的情况下改变状态。

4.客户代码会存储类所返回的句柄,并且在类代码已经销毁句柄之后还试图使用它们。

C++编程规范之42:不要公开内部数据

原文:http://blog.csdn.net/longshengguoji/article/details/18270485

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!