《C++面向对象高效编程(第2版)》——2.5 数据封装的优点

简介:

本节书摘来自异步社区出版社《C++面向对象高效编程(第2版)》一书中的第章,第2.5节,作者: 【美】Kayshav Dattatri,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.5 数据封装的优点

C++面向对象高效编程(第2版)
数据被封装后,客户无法直接访问,更不能修改,只有接口函数才可访问和修改封装的信息。进一步而言,使用接口的用户完全不知道描述该接口的函数如何使用封装信息,而且对象(或类)的用户对此也毫无兴趣。因为只有保证OOP(或用于实现对象的语言)的假定,即封装的信息只能通过已发布的接口访问,才能确保对象的完整。我们之所以能正常操作LD播放机,是因为激光束装置(或其他电子元件)被封装,而且只有实现才有权访问(即实现对封装的信息有独占访问权)。在用户操作LD播放机时,接口代表用户操控封装的信息。

数据封装的另一个优点是实现独立(implementation independence)。由于类的用户无法查看封装的数据(或信息),他们甚至不会注意到封装数据的存在(从某种程度上看,这取决于语言,将在后续章节中介绍)。因此,改动封装内的数据不会(也不该)影响用户所见的接口。为说明这点,回顾一下LD播放机。

假设在第一次实现中,我们用一套16位数模(D/A)转换器,将碟片中的数字信息转换成模拟格式,且运行良好。但是通过实验发现,20位D/A转换器能提供更高质量的视频和音频解析。因此,我们改变了LD播放机电子元件的实现,将其中的16位D/A转换器更换成20位D/A转换器。进行这样的改动后,用户操作播放机的方式是否会发生变化?完全不会。用户甚至不会觉察到我们在内部使用的D/A转换器类型。即使他知道(也许通过阅读用户手册中的技术规范),也无法直接访问D/A转换器。只有实现才知道D/A转换器从16位变成了20位。接口十分了解实现和被封装的数据,它(接口)明白如何利用新的实现工作。因此,改变封装信息只会影响接口对封装数据的操作(实现),不会影响客户所见的接口。也就是说,实现中的改动不应该影响该对象的客户所见的接口。

互联网地址也可作为抽象和封装的例子,TInternetAddress类代表互联网地址。该类提供必要的操作,用于获取域名、主机名等,客户无需知道内部如何储存互联网地址。首次引入互联网地址时,用32位表示。对于当时来说,完全可以表示所有的域和域内的节点。但是,随着互联网的普及,每月都有成千上万的新主机加入互联网。照此速度发展,我们很快就会用尽互联网地址。为突破这个限制,将很快使用128位表示互联网地址。不过不用担心,这只是内部实现的变化,通过TInternetAddress类即可轻松完成,客户无需学习使用新的互联网。互联网地址的表示方式被封装并转换至128位实现,只会引起实现中的变化,不会影响接口。这就是抽象和封装的优点。

相关文章
|
13天前
|
存储 人工智能 BI
【C++面向对象】C++银行卡管理系统(源码+论文)【独一无二】
【C++面向对象】C++银行卡管理系统(源码+论文)【独一无二】
|
21天前
|
算法 IDE Java
【软件设计师备考 专题 】面向对象程序设计语言:C++、Java、Visual Basic和Visual C++
【软件设计师备考 专题 】面向对象程序设计语言:C++、Java、Visual Basic和Visual C++
39 0
|
26天前
|
设计模式 负载均衡 算法
C/C++发布-订阅者模式世界:揭秘高效编程的秘诀
C/C++发布-订阅者模式世界:揭秘高效编程的秘诀
65 1
|
27天前
|
存储 安全 编译器
C++ std::move以及右值引用全面解析:从基础到实战,掌握现代C++高效编程
C++ std::move以及右值引用全面解析:从基础到实战,掌握现代C++高效编程
76 0
|
1月前
|
C++
C++ 数据封装的方法,重点是其编程思想
在C++中,数据封装一般指的是将数据和操作这些数据的函数绑定在一起的程序设计方式。通常使用C++的类来实现
36 7
|
1月前
|
存储 C++
C++数据封装
C++数据封装
11 1
|
1月前
|
C++
在C++如何实现数据封装?
在C++如何实现数据封装?
18 2
|
1月前
|
安全 C++
c++数据封装
c++数据封装
16 0
|
2月前
|
C语言 C++
【c++】什么是面向对象
【c++】什么是面向对象
【c++】什么是面向对象
|
2月前
|
存储 数据安全/隐私保护 C++
基于C++的面向对象程序设计:类与对象的深入剖析
基于C++的面向对象程序设计:类与对象的深入剖析
38 1