" 抽象和封装是互补的概念:抽象关注于对象的可观察行为......封装集中于产生这种行为的实现......封装通常是通过信息隐藏来实现的,这是隐藏所有内容的过程.物体的秘密对其基本特征没有贡献." - 面向对象分析与设计的Grady Booch
您能否通过信息隐藏向我展示一些有说服力的封装优势的例子?
我的第一个OO课程中给出的例子:
想象一下媒体播放器.它抽象了播放,暂停,快进等概念.作为用户,您可以使用它来操作设备.
您的VCR实现了此接口,并隐藏或封装了机械驱动器和磁带的详细信息.
当媒体播放器的新实现到来时(比如使用光盘而不是磁带的DVD播放器),它可以取代封装在媒体播放器中的实现,并且用户可以像使用VCR一样继续使用它(相同的操作,如作为游戏,暂停等...).
这是通过抽象隐藏信息的概念.它允许更改实现细节,而无需用户知道和促进代码的低耦合.
*nix将字符流(磁盘文件,管道,套接字,ttys等)抽象为单个实体("一切都是文件")模型,允许将各种工具应用于各种数据源/沉没的方式在没有封装的情况下是不可能的.
同样,各种语言的流的概念,抽象列表,数组,文件等.
此外,类似的数字概念(抽象超过整数,半打各种彩车,有理数等),想象这会是怎样一场噩梦,如果更高级别的代码被赋予了尾数格式等,并留给自己照顾自己.