《数据结构与抽象:Java语言描述(原书第4版)》一1.4 像使用自动贩卖机一样使用ADT

1.4 像使用自动贩卖机一样使用ADT

假定你站在一台自动贩卖机前,如图1-3所显示,或者更高级的一台,休息一下,然后从贩卖机中买些东西!

当站在自动贩卖机前时,会看到它的界面。投入硬币并且按下按钮,就能购物了。下面是对自动贩卖机的观察结果:

  • 你仅能执行机器的界面提供给你的特定任务。
  • 你必须理解这些任务——即你必须知道买一瓶汽水应该怎么办。
  • 你不能访问机器内部,因为锁着的外壳封装了它。
  • 即使你不知道内部将发生什么,但你可以使用机器。
  • 如果有人用改进版替换了机器内部的机制但没改变界面,你仍然能用同样的方式使用机器。
    与自动贩卖机的用户一样,你就像本章前面见过的ADT包的客户。刚刚说的对自动贩卖机用户的观察,类似于对包的客户的观察:
  • 客户仅能执行ADT包说明的操作。这些操作常常声明在一个Java接口中。
  • 客户必须遵守ADT包提供的操作规范。即客户的程序员必须理解如何使用这些操作。
  • 客户不使用ADT操作就不能访问包中的数据。封装原理将数据表示隐藏在ADT的内部。
    客户可以使用包,即使程序员不知道数据是如何存储的。
  • 如果有人改变了包操作的实现,只要界面没有改变,客户仍然能用同样的方式使用包。

在前一节的示例中,每个包都是实现ADT包的类的一个实例。即,每个包是一个对象,它的行为是ADT包的操作。你可以把每个这样的对象看作我们刚描述的自动贩卖机。每个对象封装了包的数据和操作,就像自动贩卖机封装了它的产品(汽水)和输送系统一样。
有些ADT操作有输入,类似于你投入自动贩卖机中的硬币。有些ADT操作有输出,类似于自动贩卖机提供的找零、汽水、消息及提示灯。
现在假定你是自动贩卖机面板或界面的设计人员。机器能做什么?在使用机器时人应该做什么?考虑在机器内如何保存及输送汽水瓶,对你是否有帮助?我们强调,你应该忽略这些方面,而把注意力完全集中于人如何使用机器上——即你要关注界面的设计。忽略无关细节能使你的任务更简单,并提高设计质量。
我们记得,作为设计原则,抽象要求你关注于什么而不是如何。当你设计一个ADT并最终设计一个类时,使用数据抽象将关注焦点集中在你想对数据做什么,而不必担心如何完成这些任务。本章开头,当设计ADT包时我们练习了数据抽象。当我们选择包应该有的方法时,我们没有考虑如何表示包。相反我们集中考虑每个方法应该做什么。
最后,我们编写详细说明该方法的Java接口。然后编写一个使用包的客户程序,但仍然不知道它的实现。如果有人为我们编写了实现,我们的程序大概能正确执行。如果其他人给我们一个更好的实现版本,我们不需要修改已经编写的客户程序仍能继续使用。客户的这个特征是抽象的主要优势。

时间: 2024-09-16 20:58:02

《数据结构与抽象:Java语言描述(原书第4版)》一1.4 像使用自动贩卖机一样使用ADT的相关文章

《机器学习与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章 机器学习简介 如果科幻故事是可信的,那么人工智能的发明将会不可避免地导致机器和其制造者之间的末日战争.在计算机使用的早期,计算机被教会玩井字棋和国际象棋这样一些简单的游戏.后来,机器被用来控制交通信号灯和通信,随后用来控制军用无人机和导弹.一旦计算机有感知力并且知