信息隐藏和数据抽象的差异?

时间:2011-08-29 18:52:36

标签: oop abstraction information-hiding

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

5 个答案:

答案 0 :(得分:6)

信息隐藏是指设计人员明确决定限制对实施细节的访问。它是一种比面向对象设计更古老的原则,但经常被使用。

一个简单的例子是在C中定义常量,例如#define NAME_SIZE 15常量的代码(客户端)不需要知道它的值,如果你(不是)那就不会有麻烦设计师)决定稍后改变它的价值。他们不应该假设它确实是15,因为你可能决定改变它。

抽象是您处理聚合的时候,例如,汽车是机箱,电机,车轮等细节的抽象。抽象让我们想到复杂事情以更简单的方式。

封装是我们如何决定构成抽象的元素的详细程度。良好的封装应用信息隐藏,以强制执行细节限制。例如,我的汽车实际上包含了所有部件,但它只向我(驾驶员)提供了一个适合我需要而不是更多的界面。我可以控制门,锁,窗,灯,喇叭,天窗,运动的方向,加速,减速等。即使我可能好奇操纵"如何"的细节。所有这些东西,封装阻止我看到更多。

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

信息隐藏汽车的一部分的示例可能是choke valve。我的父母告诉我那些曾经在他们驾驶的汽车上工作过的人......这是一种燃烧发动机的细节,在电动汽车中没用。

答案 1 :(得分:3)

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

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

答案 2 :(得分:1)

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

请记住:你可以(而且应该)在程序代码中有“信息隐藏”(比如FORTRAN或BASIC中的“不要使用全局变量”等) - 但是你不必拥有“抽象数据类型”

Information hidingAbstract Data Types密切相关,但它们是不同的概念。

答案 3 :(得分: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;
 }
相反,在两个文件(一个标题+一个cpp文件)中执行上述操作,我们可以在一个地方完成它。我们可以在头文件本身中给出构造函数和打印函数的定义......

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

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

    private:
           int x;

    };

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

对于数据抽象,你可以考虑...堆栈的例子......

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

答案 4 :(得分:0)

抽象是具有较少细节的东西的表示(如在抽象绘画中)。在OO中,可以在不承诺其内部表示的情况下操纵抽象类型。例如,可以操作电话号码作为电话号码的抽象,而客户不知道它包括国家代码,区域代码和实际号码。抽象在分析和设计阶段最有用,因为它允许您根据抽象数据类型(例如电话号码)进行交谈,而不必担心如何实施。

一种更熟悉的类型,string是文本的抽象:你操纵string而不知道它是如何实现的。字符串抽象允许更改其内部结构,而不会影响其在应用程序设计中的用法。

信息隐藏和封装是可以实现抽象数据类型的两种方式。抽象数据类型甚至可能不必隐藏其内部状态或其封装;例如,作为抽象的数字可以实现为int