封装与抽象现实世界的例子

时间:2012-08-22 12:18:30

标签: oop programming-languages

对于封装的示例,我可以想到用户和移动电话之间的交互。用户不需要知道移动电话的内部工作来操作,因此这称为抽象。但封装在哪里适合这个例子?有人可以对此有所了解吗?

17 个答案:

答案 0 :(得分:68)

封装是实现"information hiding"的一种方式,因此,按照您的示例,您“需要知道手机的内部工作才能运行”用它。您有一个接口来使用设备行为,而无需了解实现细节。

另一方面,

抽象可以解释为对不同对象使用相同接口的功能。可以存在相同接口的不同实现。详细信息由封装隐藏。

答案 1 :(得分:60)

抽象:你永远不会购买“设备”,但总是买更具体的东西:iPhone,GSII,诺基亚3310 ......这里,iPhone,GSII和N3310都是具体的东西,设备是抽象的。

封装:你有几个设备,所有设备都有一个USB端口。你不知道那里有什么样的印刷电路,你只需知道你就可以将USB线插入其中。

抽象是一个概念,封装允许这个概念。我的例子不是最好的(两个块之间没有真正的联系)。

您可以在不使用抽象的情况下进行封装,但如果您想在项目中使用某种抽象,则需要封装。

答案 2 :(得分:21)

一般而言,抽象只是隐藏特定程序背后的复杂事物,使程序看起来很简单 示例:监视器开/关 :: - 用户无需了解监视器打开或关闭时所发生的所有芯片功能。他需要知道的是On功能ON-Monitor为On和on功能OFF-Monitor关闭...

或者更好寻找一辆车 - 每个人都知道有一个特殊的齿轮机改变齿轮,没有人愿意知道齿轮改变所有功能所经历的事情。那就是抽象(避免不必要的实施以防止复杂性)。

因此,如果开发人员提供了良好的抽象,那么用户就不会想要查看对象的内部机制。

通过使具有一个或多个方法抽象的类抽象来实现抽象。这不过是必须由扩展它的类实现的基本特征。 e.g.当您发明/设计汽车时,您定义的特征如汽车应该有4个门,断裂,方向盘等......所以任何使用此设计的人都应该包含这些特性。实现不是每个抽象的头。它只会定义应该包含的特征。

封装限制用户遵循特定程序来访问特定进程的控制权。它只是提供安全性并确保系统稳健性。

示例:我们可以将公司中的人力资源视为一个按照封装原则工作的人.i.e.我们无法直接与其他部门交谈,我们需要通过HR与他们进行沟通。这可以确保安全性和更好的维护公司的记录。

我们可以一起举一个UNDER CONSTRUCTION BUILDING..的例子,我们可以说'不是'。在每个建筑施工中,管理者的要求,材料类型,工人数量等都是抽象的。

但是,与此同时,将每个这样的领域纳入承包商,作为工人和建筑投资者之间的调解者,可以看作是封装。 因为,它将所有上述属性隐藏到一个实体中。

  

因此,如果你能理解到现在,你可以这么说   抽象只是ENCAPSULATION.i.e.Every实体的一个子集   执行抽象是在内部封装但每件事都是   显示封装不一定是抽象。

e.g。 .ToString()几乎每个类中定义的方法都是Abstraction的实现,因为我们没有函数内部,我们所关心的是它几乎将所有内容都改为string。当它组装为一个单元时,它被封装我们隐藏并通过Properties访问的私有成员只是封装的一个例子,因为基本上保持了数据安全性。!!

希望这回答你的问题.. !!

答案 3 :(得分:15)

封装是隐藏类中的变量或内容,防止未经授权的方使用。因此getter和setter等公共方法访问它,其他类调用这些方法来访问

抽象涉及定义表示抽象“角色”的对象的工具,这些对象可以执行工作,报告和更改其状态,并与系统中的其他对象“通信”。

考虑以下实时示例:

封装作为驾驶员,您可以通过按下开始按钮来了解如何启动汽车,并且隐藏了启动操作的内部细节。因此,整个启动过程对您是隐藏的,否则我们可以告诉您启动操作是否已封装。

OR

驱动轮封装了从您身上旋转滚轮的过程

抽象

在提及抽象之前,我们可以在这里接受三个不同的用户(我称之为实体)

1)你2)当地机械师3)专家

您的实体:因为您只知道通过按下按钮来启动汽车,并且场景背后的所有其他操作都是从您身上抽象出来的。

当地机械实体:我们当地的机械师知道启动汽车的一些实施,即他可以打开汽车的发动机罩并检查电池电缆或挡块等。所以简而言之,本地机械实体知道一些汽车的实施。

专家实体:由于我们的专家(汽车设计师)机械师知道我们汽车的所有操作,他可以​​很快修复它。所以简而言之,Expert Entity知道汽车的所有实现。

汽车的操作完全从您身上抽象出来,部分实施到Local Mechanic Entity并完全实施到Expert Entity。所以你是一个只有抽象方法的抽象类,Local Mechanic Entity扩展了你(因为他也是普通用户)并且他实现了一些方法,并且我们的专家实体扩展了Local Mechanic并实现了所有方法

我认为这是一个很好的example.

答案 4 :(得分:12)

所有东西都有很多属性和行为,所以你可以选择任何想要电视,手机,汽车,人类或任何东西的物品。

抽象:

  1. 挑选你真正需要的对象的本质的过程
  2. 换句话说,从对象中选择所需的属性 例如:
    a。电视 - 声音,视觉,电源输入,频道输入。
    b。移动 - 按钮/触摸屏,电源按钮,音量按钮,SIM端口 c。汽车 - 转向,断路,离合器,加速器,钥匙孔。
    d。人类 - 声音,身体,视力,听力,情绪。
  3. 封装:

    1. 隐藏您不需要的对象的详细信息的过程
    2. 换句话说,隐藏对象无需的属性和操作,但对象必须正常工作 例如:
      a。电视 - 扬声器,显示器,配电黑白组件,通道机构的内部和连接。
      b。移动 - 如何解析和处理输入,如何按开/关闭按钮或更改音量,SIM将如何连接到服务提供商。
      c。汽车 - 转向转向如何转动汽车,如何减速或停止汽车,离合器如何工作,加速器如何提高速度,如何在汽车上打开钥匙孔。
      d。人类 - 如何产生声音,身体内部是什么,视力如何运作,听觉如何运作,情绪如何产生和影响我们。
    3. 摘要您需要的所有内容并包装您不需要的所有内容;)

答案 5 :(得分:7)

你的问题的措辞很奇怪 - 抽象与封装? 它应该是 - 有人解释抽象和封装......

抽象是理解事物的本质。

现实世界的例子是抽象艺术。这种风格的艺术家试图捕捉/描绘仍然允许它成为事物的东西的本质。这种4行棕色涂片捕捉了公牛的本质。

封装是黑拳。

手机就是一个很好的例子。我不知道手机是如何连接到卫星,塔台或其他手机的。我不知道这该死的东西是怎么理解我的按键或它如何拍摄并将照片发送到电子邮件地址或其他电话号码。我不知道大多数现代智能手机如何工作的复杂细节。但是,我可以使用它!这些手机具有标准接口(是的 - 文字和软件设计),允许了解其中一个基本功能的人几乎使用所有这些接口。

两者如何相关?

抽象和封装都是面向对象思想和设计的基础。所以,在我们的手机示例中。智能手机的概念是一种抽象,其中封装了某些功能和服务。 iPhone和Galaxy是更高层次抽象的进一步抽象。您的物理iPhone或Galaxy是多层抽象的具体示例,其中包含封装的功能和服务。

答案 6 :(得分:5)

<强>抽象 意味着我们专注于某些事物的基本品质而不是一个具体的例子,我们会自动丢弃不重要或不相关的事物。

示例 我们正在写一个银行账户类,银行账户的基本素质是开业日期,账户名称,账号,余额等......

<强>封装 意味着封装或围绕某些事情的想法不仅是为了保持内容在一起而且是为了保护和限制表格访问的一面。同时保密它是关于减少应用程序不同部分之间的依赖关系。

示例 在我们的银行帐户类中,有人访问Balance的属性并尝试更改它,如果没有封装,则尝试可以成功。

答案 7 :(得分:3)

封装有助于遵守单一责任原则,而抽象有助于遵守代码到接口而不实现。

假设我有一个Car类:服务提供者类和驱动程序类:服务使用者类。

For Abstraction:我们为CAR定义抽象类,并定义其中的所有抽象方法,这些方法在汽车中可用,如:changeGear(),applyBrake()。

现在实际的汽车(混凝土级别,如梅赛德斯,宝马将以自己的方式实施这些方法并抽象执行和最终用户仍将为特定的混凝土汽车实例应用中断和更换装备,并且多态地执行将按定义执行在具体课堂上。

For Encapsulation:现在说Mercedes提出了新的功能/技术:Anti Skid Braking,在实现applyBrake()时,它会在applyBrake()方法中封装这个功能,从而提供凝聚力,服务消费者仍将通过同一方法applyBrake()的汽车对象。 因此,Encapsulation允许在相同的具体类实现中进一步。

答案 8 :(得分:3)

封装隐藏信息。

抽象隐藏了功能细节。

通过构造类来执行封装。通过在类的顶部创建抽象类或接口来实现抽象。

在问题中给出的示例中,我们使用该类来实现其功能,而我们并不关心设备如何实现这一功能。所以我们可以说电话的细节是从我们“抽象”出来的。

封装隐藏了电话用于实现其所做的一切;抽象隐藏了它的做法.-

答案 9 :(得分:2)

当你在编程中看到如何做时,我觉得封装可能更有意义。例如,考虑如下的Car类。

 class Car{
   public float speed =0;
   public boolean isReverse = false;
   public boolean isStarted = false;
 }

客户端代码可以使用以下汽车类。

class Main{
  public static void main(args String[]){
   Car car = new Car();
   // No need to start??
   car.speed = 100; // Turbo mode directly to 100
   car.speed = 0; // Turbo break
  }
}

详情请见:http://brevitaz.com/encapsulation-example-benefits-java/

这是对汽车速度和其他变量的无控制访问。通过封装,Car类可以完全控制如何修改汽车类中的数据变量。

具有某些行为的任何具体实体都是Encapsulation的示例。这种行为是通过包装东西并从客户端隐藏某些东西来提供的。在移动的情况下,它是信号,芯片,电路,电池等。

对于相同示例的抽象 - 普通用户可能会说我可以使用任何可以拨打电话和接听电话。这种抽象可以被任何具体的移动设备取代。查看Abstraction examples

答案 10 :(得分:1)

让我给出一个接近IT的真实世界示例类比的2美分。

假设您有一个订阅网站,例如wordpress网站

每个用户都有一个角色,例如管理员,订阅者等。许多用户可以是管理员,订阅者等。

这里的抽象是反映,因为任何具有管理员角色的用户都可以做一组事情,这对哪个特定用户无关紧要(这是抽象)的一个例子。

另一方面,订阅者用户无权访问网站的某些设置,因此应用程序的某些内部部件被封装为普通订阅者(这是封装<的示例/强>)

正如人们可以看到抽象和封装是相对概念,它们适用于特定的事物。

可以按照这种推理理解并解释多态性继承

例如,超级管理员用户可以完成管理员用户可以执行的所有操作,还可以执行更多操作。此外,如果管理员角色获得功能更新,超级管理员将获得相同的更新。因此,可以在此处看到继承的示例,其中超级管理员角色继承管理角色的所有属性并扩展它们。 注意,对于网站的大部分内容,管理员可以与超级管理员互换(这意味着可以轻松地使用超级管理员用户代替管理员用户,但反之亦然)。

答案 11 :(得分:0)

<强>抽象

我们在日常生活中使用了许多抽象。考虑一辆车。我们大多数人都对汽车如何工作有一个抽象的看法。我们知道如何与它进行互动,让它做我们想要的事情。做:我们放入汽油,转动钥匙,按下一些踏板,依此类推。但我们并不一定了解汽车内部发生了什么事情以使其移动而我们不需要这样做。 我们每天都有数百万人使用汽车而不了解他们如何工作的细节。抽象帮助我们上学或工作!

程序可以设计为一组交互式抽象。在Java中,这些抽象是在类中捕获的。一个类的创建者显然必须知道它的界面,就像汽车的驾驶员可以在不知道发动机如何工作的情况下使用车辆一样。

<强>封装

考虑一个银行系统。银行系统具有账号,账户类型,余额等等属性。如果有人试图更改帐户的余额,如果没有封装,则尝试可以成功。 因此,封装允许类完全控制其属性。

答案 12 :(得分:0)

抽象

它用于管理OOP的复杂性。通过使用此属性,我们可以向用户提供对象的基本功能,而不包括其背景说明。例如,当向朋友发送消息时,我们只需编写消息,说&#34; hiiii&#34;然后按&#34;发送&#34;并将消息传递到目的地(她,朋友)。在这里,我们看到工作中的抽象,即我们不太关心负责发送和接收消息的移动设备的内部工作

答案 13 :(得分:0)

将内部细节隐藏到外部世界的Abstration例如你创建一个类(比如类的计算器之一)但是为了最终用途你提供了类的对象,在对象的帮助下它们将播放并执行操作,他确实&# 39;不知道内部使用什么类型的机制。抽象形式的类对象。

封装是一种将类中的字段设为私有并通过公共方法提供对字段的访问的技术。如果某个字段被声明为私有,则该类之外的任何人都无法访问该字段,从而将该字段隐藏在该类中。出于这个原因,封装也称为数据隐藏。例如,类计算器包含私有方法getAdd,getMultiply。

Mybe上面的回答将帮助您理解这个概念。

答案 14 :(得分:0)

只需将 Abstraction 视为隐藏键盘和显示屏幕细节, Encapsulation 隐藏绑定它们的内部电路。

答案 15 :(得分:0)

如果您看过重要的电视机,电视机的电视连接和电视彩色管隐藏在电视机外壳内,这些电视机外壳并没有为我们这样的观众曝光,只露出了电视频道键,电视音量键,电视等必要的东西。 / OFF开关,电缆开关和电视遥控器供观众使用。这意味着电视机,电视连接和电视彩色管是一个不需要的数据,观众看不到需要从世界各地隐藏

因此封装意味着隐藏类的重要特性,这些特性不需要暴露在类之外,只暴露类的必要事物。 这里隐藏的一部分就像Encapsulation一样,暴露了类的一部分就像抽象一样。

答案 16 :(得分:0)

我猜一个蛋壳可以考虑封装和内容的抽象。 shell保护信息。你不能没有壳的鸡蛋的内容。,LOL