C++分析有关封装和信息隐藏的误区.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C++分析有关封装和信息隐藏的误区.pdf

C++分析有关封装和信息隐藏的误区 封装(Encapsulation)和信息隐藏,这两个词,我想大家都不会陌生。但是,有很多开发人 员并没有深入的了解,甚至存在一些误区。今天就专门来说一下。 一、封装 1、什么是封装? 从字面意思来看,封装就是把一些相关的 东西打包成一坨(看到“坨”这个量词,不要 想歪了)。“封装”最广为人知的例子,就是在面向对象编程(以下简称OOP)里面,把数据 和针对该数据的操作,统一到一个class里。 2、封装有啥好处? 那封装有啥好处捏?一个主要的好处,就是增加软件代码的内聚性。通过增加内聚性, 进而提高可复用性和可维护性。 3、封装的手段 很多人把封装的概念局限于类,认为只有OO 中的class才算是封装。这实际上是片面 滴!在很多不使用类的场合,一样能采用封装的手法。下面俺随手举几个和OO 无关的例 子: a、通过文件 比如C 和C++支持对头文件的包含(#include)。因此,可以把一些相关的常量定义、类 型定义、函数声明,统统封装 到某个头文件中。 b、通过namespace/package/module C++的namespace、Java的package、Python的module,想必各自的开发人员都很熟悉。 这些语法虽然称呼各不相同,但具有相同的本质。因此,也可以利用这些语法,来进行封装。 二、信息隐藏 1、什么是信息隐藏? “信息隐藏”——顾名思义——就是把不该暴露的信息藏起来。说到信息隐藏,很多人自 然而然地,就联想到某些OO 语言(比如C++、Java)提供的,诸如private、protected 之类 的关键字。这些关键字可以通过访问控制,来达到信息隐藏的目的。 2、信息隐藏有啥好处? 信息隐藏的好处,正好和“封装”的好处相呼应。封装是为了提高内聚性;而信息隐藏是 为了降低耦合性。通过降低耦合,一样可以达到提高可复用性、可维护性这2 个目的。 3、信息隐藏的手段 和封装类似,很多程序员也把信息隐藏的概念片面化——认为信息隐藏仅限于private 和protected 关键字。所以,俺再随手举几个其它的信息隐藏手段。 a、通过接口类 可以通过定义接口类(Java中的interface、C++中的纯虚类)来实现信息隐藏。具体实 现如下: 定义一个接口类,仅包含一些公有的成员函数的声明 (Java的abstract函数,C++的纯 虚函数),没有任何函数实现,也没有任何成员变量。然后把具体的实现代码放到该接口类 的一个派生子类中。 由于调用者只看到接口类,看不到实现类。所以,同样可以达到信息隐藏。在某些情况 下,使用这种手段达到的效果,会比基于访问控制(使用private 关键字)的效果,更好。 不过这种手段依赖于语言的支持。使用该手法的编程语言,至少要支持继承、虚函数等 语法。 b、通过pimpl 手法 pimpl 手法也叫作“Opaque Pointer”手法。和接口类的手法不同,pimpl 手法不需要靠继 承、虚函数等语法的支持,因此对诸如C 语言来说,很有用。 三、一些理解上的误区 介绍完一些基本概念,再来说一下,关于封装、信息隐藏的一些常见误区。 1、把封装等同于信息隐藏 这是混淆最严重的一个误区——很多初学OOP的同学都把封装和信息隐藏混为一谈。 希望经过俺前面的一番解释,有些人能搞明白其中的差异。顺便提一下,有个老外写了篇小 有名气的文章——“Encapsulation is notinformation hiding ”。洋文好的同学,可以去瞅一瞅。 2、把封装看得太狭隘 其实前面已经通过举例,驳斥了狭隘看待封装的误区。此处不再啰嗦。 3、把信息隐藏看得太狭隘 前面已经通过举例,驳斥了狭隘看待信息隐藏的误区。此处不再啰嗦。 4、混淆可访问性和可见性 考虑到某些网友可能连这两者的区别都不太清楚,先简单解释一下。所谓可访问性,就 是可以对某个东西进行读/写操作;所谓可见性,就是能够感觉到某个东西的存在。 前面谈到信息隐藏时,我们提及了通过访问控制的关键字(private、protected)来达到 信息隐藏的目的。有很多同学认为这几个关键字不光禁止了可访问性(accessibility),还禁 止了可见性(visibility

文档评论(0)

docinpfd + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:5212202040000002

1亿VIP精品文档

相关文档