9

数据抽象和信息隐藏有什么区别吗?在浏览完此链接中的所有答案后,我更加困惑。 抽象 VS 信息隐藏 VS 封装 找不到任何区别。仅仅是我们可以将一个(信息隐藏)称为目标,而将另一个(抽象)称为过程吗?但这对我来说并没有令人满意的区别。此外,我知道封装是实现抽象过程的技术我在这里吗?请解释确切的区别。

4

5 回答 5

6

信息隐藏是设计者特别决定限制对实现细节的访问。这是一个比面向对象设计更古老的原则,但经常被使用。

一个简单的例子是在 C 中定义常量,例如,常量#define NAME_SIZE 15的代码(客户端)不需要知道它的值,如果您(设计者)决定稍后更改它的值,也不会感到困扰。他们不应该假设它真的是 15,因为你可能决定改变它。

抽象是当您处理聚合时,例如,汽车是对底盘、电机、车轮等细节的抽象。抽象使我们能够以更简单的方式思考复杂的事物。

封装是我们如何决定组成我们抽象的元素的详细程度。良好的封装应用信息隐藏,以强制执行细节限制。例如,我的汽车实际上是由它的所有部分组成的,但它只为我(驾驶员)提供了一个适合我需要的界面,而不是更多。我可以控制门、锁、窗户、灯、喇叭、天窗、运动方向、加速、减速等。尽管我可能很想操纵所有这些“如何”的细节,但封装可以防止我从看到更多。

如果我的汽车的实施发生了变化(我从内燃机改为电动或混合动力),因为我作为驾驶员只知道有限的接口,我不需要改变我驾驶汽车的方式。抽象让我只知道我在开车,而不是数百块金属、橡胶等。

信息隐藏不属于汽车的一个例子可能是节流阀。我的父母告诉我,这些人过去是如何在他们驾驶的汽车上工作的……这是一个内燃机细节,在电动汽车中是没有用的。

于 2012-08-28T22:50:38.053 回答
3

数据隐藏是使用访问修饰符隐藏 java 方法和变量的可见性的过程。它们的访问修饰符是:public、private 和 protected。

抽象是我们通过抽象类和方法的 bean 定义特定行为的过程,这些抽象类和方法构成了将扩展此类的任何类的骨架。

于 2011-08-31T02:52:20.680 回答
1

“信息隐藏”是“数据抽象”的重要组成部分,但不是全部概念。

请记住:您可以(并且应该)在过程代码中具有“信息隐藏”(例如 FORTRAN 或 BASIC 中的“不要使用全局变量”等)-但您不需要具有“抽象数据类型”。

信息隐藏抽象数据类型密切相关,但它们是不同的概念。

于 2011-08-29T18:57:49.540 回答
0

一个类通常对其客户隐藏其实现细节。这称为信息隐藏。通过创建界面,我们召唤信息隐藏概念......

信息隐藏的例子如下......我们的头文件中有一个接口......

class Coder
{
   public: 
       Coder();
       void prints();

private:
       int x;

};

另一个文件“Coder.cpp”中的函数实现是......

Coder::Coder
{
 x=10;//any int value you can take;
}

void Coder::prints()    
{
   cout<<x;
 }

而不是 tahn 在上面的两个文件(一个头文件 + 一个 cpp 文件)中完成,我们可以在一个地方完成。我们可以在头文件本身中给出构造函数和打印函数的定义......

  class Coder
    {
       public: 
           Coder()
            {
              x=10;//any int value you can take;

             }
           void prints()
    {
           cout<<x;
         }

    private:
           int x;

    };

如果我们这样做了,我们就无法实现信息隐藏......我们的客户将知道我们是如何实现我们的功能的!

对于数据抽象,您可以考虑...堆栈示例...

堆栈类的客户不需要关心堆栈的实现。客户端只知道当数据项被放入堆栈时,它们将按照后进先出的顺序被调用。客户关心堆栈提供什么功能,而不是如何实现该功能。这个概念被称为数据抽象。

于 2011-08-31T00:48:52.483 回答
0

抽象是对细节较少的事物的表示(如在抽象绘画中)。在 OO 中,可以在不提交其内部表示的情况下操作抽象类型。例如,电话号码作为电话号码的抽象可以在客户端不知道它由国家代码、地区代码和实际号码组成的情况下进行操作。抽象在分析和设计阶段最有用,因为它允许您根据抽象数据类型(例如电话号码)进行讨论,而不必担心它将如何实现。

一种更熟悉的类型string是文本的抽象:您在string不知道它是如何实现的情况下进行操作。字符串抽象允许在不影响其在应用程序设计中的使用的情况下更改其内部结构。

Information hiding and encapsulation are two ways in which an abstract data type might be implemented. An abstract data type might not even have to hide its internal state or its encapsulation; for example, Number as an abstraction may be implemented as an int.

于 2012-08-29T13:58:44.320 回答