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

本节书摘来华章计算机《数据结构与抽象:Java语言描述(原书第4版)》一书中的第1章 ,第1.4节,[美]弗兰克M.卡拉诺(Frank M. Carrano) 蒂莫西M.亨利(Timothy M. Henry) 著 罗得岛大学  新英格兰理工学院 辛运帏 饶一梅 译 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

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

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

image


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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值