【问题标题】:encapsulation vs abstraction with example [duplicate]封装与抽象示例[重复]
【发布时间】:2017-11-01 18:09:03
【问题描述】:

我知道这个问题在互联网上被问过很多次,但这里的例子不同,这让我很困惑, 我在面试中被问到一个关于封装和抽象的问题,例如电视和遥控器或空调和遥控器的真实示例,面试官问在这个例子中哪个是封装,哪个是抽象。 谁能描述一下这个问题?

【问题讨论】:

  • 描述这个面试问题的最佳方式是“可怕”
  • @pvg 你能简单介绍一下这个问题吗?在这个例子中,重复的答案对我没有帮助
  • 要清楚在副本中让您感到困惑的地方。您的即兴示例(顺便说一句,这不是一个糟糕的面试问题)似乎被副本很好地回答了。如果您的问题与那个问题之间存在实质性差异,我将重新打开此问题,但您需要真正向我证明它的合理性。
  • @Makoto 让我感到困惑的是,我如何通过抽象和封装来区分 tv 和 remote,假设我说 tv 是封装,而 remote 是抽象,我知道这是不可接受的答案。
  • 不知道为什么你认为这是不可接受的;考虑到用于多种不同事物的遥控器是抽象的,这可能也是我会选择的答案;每个事物都必须以特定的方式控制其特定的设备。也许您需要更多时间来真正细读另一个问题?尝试将其应用于其他现实生活中的物体以加强您的理解。

标签: java encapsulation abstraction


【解决方案1】:

封装的简单定义:

  • 将数据和方法封装到一个单元(称为类)中称为封装。
  • 外部世界无法访问数据,只有封装在类中的方法才能访问它。
  • 这些方法提供对象数据和程序之间的接口。
  • 这种将数据与程序直接访问的隔离称为数据隐藏。
  • 封装使得对象可以被视为黑匣子,每个对象都执行特定的任务,而无需考虑内部实现。

我认为现在您可以从我提到的最后一点理解电视示例的封装。

我对你的例子的定义是:

电视的功能对您来说是隐藏的,但电视制造商为您提供了一个遥控器,用于与电视互动/或进行一些操作,提供高级别的抽象。因此,您甚至不知道信号是如何从天线传来的,并在您观看电视之前将其转换为要显示在屏幕上的图片。

你可以看到电视屏幕、按钮、插件在哪里等。但你看不到电路、色枪等(这些是数据隐藏)。

更具体地说:

根据您的示例,两个设备中的封装都提供了与之交互的接口。例如,

powerOn() 按钮。但是你不知道当你按下电视或遥控器的按钮时如何开机(“数据隐藏”)。

powerOn()按钮也在遥控器中,它是一个抽象,换句话说遥控器具有使用电视界面的能力,而细节被封装隐藏。

【讨论】:

  • 我不需要定义我被困在询问电视和遥控器的问题上。
  • 所以你的意思是说电视是抽象而远程是封装?
猜你喜欢
  • 2012-08-11
  • 2012-02-16
  • 1970-01-01
  • 2017-11-29
  • 2012-08-17
  • 2013-02-17
  • 2012-05-24
  • 1970-01-01
  • 2017-05-01
相关资源
最近更新 更多