本节书摘来自异步社区出版社《c++面向对象高效编程(第2版)》一书中的第章,第2.7节,作者: 【美】kayshav dattatri,更多章节内容可以访问云栖社区“异步社区”公众号查看。
c++面向对象高效编程(第2版)
尽管封装的信息对于用户而言无关紧要,然而,为了高效地使用对象,用户可能也需要访问封装的信息。实现者封装某些元素后,必须在接口提供访问或操控封装信息的工具。尽管这些访问是受限或受控的,但仍然要给接口提供适当的工具用于访问和修改封装的实体。如果抽象封装了一部分对用户很重要的信息,却未提供合适的工具来访问被封装的信息,这样的抽象是不正确的(即接口不足)。
回到ld播放机的例子。启动和停止马达的装置确实被封装在ld播放机中,播放机只有在确定装入碟片并关闭碟片托盘后才会启动马达。但是,如果用户想更换碟片,也可随时要求播放机停止马达运转。当用户按下open/close按钮时,影碟播放机将关闭马达,并弹出碟片托盘。由此可见,即使马达控制装置被封装,接口也提供了必需的控件来操控马达,尽管是间接地操控。