《数据结构与抽象:Java语言描述(原书第4版)》一P.1 封装

P.1 封装

如果你想学习驾驶,那么对汽车的哪些描述对你最有用?显然不是描述它的发动机如何周而复始地获取空气和汽油,点燃空气和汽油的混合物,然后排出的过程。当你想学习驾驶时,这样的细节是不必要的。事实上,可以以你的方式获知这些细节。如果你想学习驾驶,最有用的汽车描述是如下的这些特点:

  • 如果你将脚踩在油门踏板上,汽车将开得更快。
  • 如果你将脚踩在制动踏板上,汽车将慢下来并最终停止。
  • 如果你将方向盘向右转,汽车将右转。
  • 如果你将方向盘向左转,汽车将左转。

就像你不需要告诉想开车的人发动机是如何工作的一样,你也不需要告诉使用一款软件的人Java实现的全部细节。同样,假定你为另一个程序员写了一个用在程序中的软件组件,你应该告诉其他的程序员如何使用它,而不是与程序员分享如何写软件的细节。
封装(encapsulation)是面向对象程序设计的设计原则之一。“封装”这个词听上去好像是把东西放进胶囊,这个想象确实是正确的。封装隐藏了“胶囊”里的细节。由于这个原
因,封装常常称为信息隐藏(information hiding)。但不是所有的事情都应该隐藏。在汽车里,有些东西是可见的(如踏板和方向盘),而其他的则藏在引擎盖下面。换句话说,汽车是封装的,这样隐藏了细节,只有驾车所需的控制是可见的,如图P-1所示。类似地,你应该封装Java代码,让细节隐藏,而只有必需的控制是可见的。
封装将数据和方法放在一个类中,而隐藏了使用类时不需要的实现细节。如果类的设计良好,使用它就不需要理解它的实现。程序员可以在不知道代码细节的情况下使用类的方法。程序员只需知道如何为方法提供相应的参数,让方法执行正确的动作。简单地说,程序员不必担心类定义的内部细节。使用封装软件写更大软件的程序员,他的任务更简单。因此,软件生产得更快,错误也更少。

注:封装是面向对象程序设计的设计原则之一,它将数据和方法放在一个类中,故而隐藏了类实现的细节。程序员仅需要知道使用这个类的信息就足够了。设计良好的类,即使看不到每个方法的方法体,也可以使用它们。

图P-1 汽车的控制对司机是可见的,但它的内部工作机理是隐藏的
抽象(abstraction)是一个要求你关注什么而不是如何的过程。当设计类时,执行数据抽象(data abstraction)。你关注想做的或关注数据,而不担心如何完成这些任务及如何表示数据。抽象要求你将注意力集中于重要的数据和操作。当抽象某件事时,你要确定中心思想。例如,书的抽象就是书的简介,与之相对的是整本书。
当设计一个类时,不应该考虑任何方法的实现。即,不应该担心类的方法如何实现它的目标。将规格说明与实现分开,能让你专心于更少的细节,所以能让你的工作更容易,出错概率更低。详细的、设计良好的规格说明,有助于让实现更易成功。

注:抽象的过程要求你关注“什么”而不是“如何”。

正确的封装将类定义分为两部分,我们称为客户接口(client interface)和实现(implementation)。客户接口描述程序员使用这个类时必须了解的一切事情。它包括类的公有方法的方法头,告诉程序员如何使用这些公有方法的注释,以及类中公有定义的任何常量。类定义的客户接口部分应该是在你的程序中使用这个类时要了解的全部。
实现部分由所有的数据域及所有方法的定义组成,包括公有、私有及保护的方法。虽然运行客户(使用类的程序)时需要这个实现,但写客户时不需要知道实现细节。图P-2说明了一个类的封装实现及客户接口。虽然实现对客户是隐藏的,但接口却是可见的,且为客户提供了与实现进行交互的规范机制。
客户接口和实现在Java类的定义中是不分开的,它们合在一起。不过你可以随同你的类创建一个独立的Java接口。本序言后半部分介绍如何写这样的接口,本书中还会再写几个。

自测题1 客户接口如何区别于类的实现?
自测题2 用一个不同于汽车的例子说明封装。例子中的哪些部分对应于客户接口,哪些部分对应于实现?

时间: 2024-10-02 08:48:54

《数据结构与抽象:Java语言描述(原书第4版)》一P.1 封装的相关文章

《机器学习与R语言(原书第2版)》一2.3 探索和理解数据

本节书摘来自华章出版社<机器学习与R语言(原书第2版)>一书中的第2章,第2.3节,美] 布雷特·兰茨(Brett Lantz) 著,李洪成 许金炜 李舰 译更多章节内容可以访问"华章计算机"公众号查看. 2.3 探索和理解数据 在收集数据并把它们载入R数据结构以后,机器学习的下一个步骤是仔细检查数据.在这个步骤中,你将开始探索数据的特征和案例,并且找到数据的独特之处.你对数据的理解越深刻,你将会更好地让机器学习模型匹配你的学习问题. 理解数据探索的最好方法就是通过例子.在

《机器学习与R语言(原书第2版)》一第3章 懒惰学习——使用近邻分类

本节书摘来自华章出版社<机器学习与R语言(原书第2版)>一书中的第3章,第3.1节,美] 布雷特·兰茨(Brett Lantz) 著,李洪成 许金炜 李舰 译更多章节内容可以访问"华章计算机"公众号查看. 第3章 懒惰学习--使用近邻分类 一种新型有趣的餐饮体验已经出现在世界各地的城市中,顾客在一个完全黑暗的餐厅里接受服务,而服务员在仅凭触觉和听觉记忆的路上小心地移动.这些餐厅的魅力在于这样的信仰:去掉一个人的视觉感官输入将会增强他的味觉和嗅觉,从而可以使他以一种全新的方式

《机器学习与R语言(原书第2版)》一1.3 机器如何学习

本节书摘来自华章出版社<机器学习与R语言(原书第2版)>一书中的第1章,第1.3节,美] 布雷特·兰茨(Brett Lantz) 著,李洪成 许金炜 李舰 译更多章节内容可以访问"华章计算机"公众号查看. 1.3 机器如何学习 机器学习的一个正式定义是由计算机科学家Tom M. Mitchell提出的:如果机器能够获取经验并且能利用它们,在以后的类似经验中能够提高它的表现,这就称为机器学习.尽管这个定义是直观的,但是它完全忽略了经验如何转换成未来行动的过程,当然学习总是说起

《机器学习与R语言(原书第2版)》一1.6 总结

本节书摘来自华章出版社<机器学习与R语言(原书第2版)>一书中的第1章,第1.6节,美] 布雷特·兰茨(Brett Lantz) 著,李洪成 许金炜 李舰 译更多章节内容可以访问"华章计算机"公众号查看. 1.6 总结 机器学习起源于统计学.数据库科学和计算机科学的交叉.它是一个强大的工具,能够在大量的数据中找到可行动的洞察.然而,人们仍需持谨慎的态度,避免现实生活中机器学习的普遍滥用. 从概念上讲,机器学习涉及把数据抽象为结构化表示,并把这个结构化表示进行一般化从而推广到

《机器学习与R语言(原书第2版)》一1.5 使用R进行机器学习

本节书摘来自华章出版社<机器学习与R语言(原书第2版)>一书中的第1章,第1.5节,美] 布雷特·兰茨(Brett Lantz) 著,李洪成 许金炜 李舰 译更多章节内容可以访问"华章计算机"公众号查看. 1.5 使用R进行机器学习 机器学习所需要的很多算法都没有包含在R的基本安装中.但一个很大社区的专家免费分享他们的机器学习成果,机器学习所需要的算法就是通过这种方式得到.这些必须通过手动方式安装在R基础安装包之上.多亏R是免费的开源软件,没有为这种功能额外收费.那些能在用

《机器学习与R语言(原书第2版)》一 第2章 数据的管理和理解

本节书摘来自华章出版社<机器学习与R语言(原书第2版)>一书中的第2章,第2.1节,美] 布雷特·兰茨(Brett Lantz) 著,李洪成 许金炜 李舰 译更多章节内容可以访问"华章计算机"公众号查看. 第2章 数据的管理和理解 任何机器学习项目初期的核心部分都是与管理和理解所收集的数据有关的.尽管你可能发现这些工作不像建立和部署模型那样令人有成就感(建立和部署模型阶段就开始看到了劳动的成果),但是忽视这些重要的准备工作是不明智的.任何学习算法的好坏取决于输入数据的好坏.

机器学习与R语言(原书第2版)》一1.4 实践中的机器学习

本节书摘来自华章出版社<机器学习与R语言(原书第2版)>一书中的第1章,第1.4节,美] 布雷特·兰茨(Brett Lantz) 著,李洪成 许金炜 李舰 译更多章节内容可以访问"华章计算机"公众号查看. 1.4 实践中的机器学习 到目前为止,我们已经讲述了理论上机器学习是如何工作的.为了把机器学习应用到真实世界的任务中,我们将采用由5个步骤构成的过程.不管你手头是何种任务,任何机器学习算法都能由下面这些步骤来实施:1)数据收集:数据收集步骤包括收集算法用来生成可行动知识的

《机器学习与R语言(原书第2版)》一2.2 用R管理数据

本节书摘来自华章出版社<机器学习与R语言(原书第2版)>一书中的第2章,第2.2节,美] 布雷特·兰茨(Brett Lantz) 著,李洪成 许金炜 李舰 译更多章节内容可以访问"华章计算机"公众号查看. 2.2 用R管理数据 当处理大量数据集时,面临的挑战包括收集.准备和管理来自各种不同来源的数据.尽管通过学习后面章节中的真实世界的机器学习任务,我们会深入地涉及数据准备.数据清理和数据管理,但本节重点讲述基本的R数据导入和导出功能. 2.2.1 保存.载入和移除R数据结构

《机器学习与R语言(原书第2版)》一 第1章 机器学习简介

本节书摘来自华章出版社<机器学习与R语言(原书第2版)>一书中的第1章,第1.1节,美] 布雷特·兰茨(Brett Lantz) 著,李洪成 许金炜 李舰 译更多章节内容可以访问"华章计算机"公众号查看. 第1章 机器学习简介 如果科幻故事是可信的,那么人工智能的发明将会不可避免地导致机器和其制造者之间的末日战争.在计算机使用的早期,计算机被教会玩井字棋和国际象棋这样一些简单的游戏.后来,机器被用来控制交通信号灯和通信,随后用来控制军用无人机和导弹.一旦计算机有感知力并且知

《机器学习与R语言(原书第2版)》一2.4 总结

本节书摘来自华章出版社<机器学习与R语言(原书第2版)>一书中的第2章,第2.4节,美] 布雷特·兰茨(Brett Lantz) 著,李洪成 许金炜 李舰 译更多章节内容可以访问"华章计算机"公众号查看. 2.4 总结 在本章中,我们学习了在R中管理数据的基础.从深入剖析用来存储不同类型数据的数据结构开始.R数据的基本结构是向量,它扩展和组合成更复杂的数据结构,比如,列表和数据框.数据框是与数据集概念相联系的R数据结构,数据框内同时有特征和案例.R提供了从电子表格类的数据文