“数据抽象”究竟意味着什么?

时间:2010-09-03 10:36:11

标签: c++ abstraction database-abstraction

数据抽象是指什么? 请提供真实的例子。

16 个答案:

答案 0 :(得分:19)

抽象有两个部分:

  • 隐藏从某个角度来看无关紧要的详细信息
  • 从某个角度确定重要的细节,如果他们拥有这些细节,则认为该项属于相同的类。

例如,如果我正在设计一个处理库存的程序,我希望能够找出系统库存中某种类型的物品数量。从接口系统的角度来看,我不在乎我是从数据库,csv文件,通过SOAP接口的远程存储库还是穿孔卡获取此信息。我只关心我可以说widget.get_items_in_stock()并知道它将返回一个整数。

如果我后来决定以其他方式记录该号码,那么设计界面的人不需要知道,关心或担心它,只要widget仍然具有{{1 }} 方法。同样明智的是,如果我将widget类子类化并添加get_items_in_stock()方法,则接口不需要关心。我也可以将新类的实例传递给它。

因此,在此示例中,我们隐藏有关如何获取数据的详细信息,并确定使用get_square_root_of_items_in_stock()方法的任何内容都是相同的实例 class(或其子类)用于某些目的。

答案 1 :(得分:10)

数据抽象是任何允许您在人们遇到数据时处理数据而不是存储在机器上的设备。

在最低级别,所有原始数据类型都是抽象 - 作为程序员,我们通常不必处理位级别的数据(最终存储的方式),而是整数,浮点数,人物等。

然后我们在这个抽象上添加图层 - 也许两个整数表示Point,或者我们和枚举来表示一年中的几个月,一周中的几天等等。

对于每个抽象层,我们从机器进一步移动,并且(希望)更接近人类对数据的理解。这可以提取性能损失 - 并非总是可以通过两个整数最有效地表示点。这可以通过使用抽象时的较短开发(和维护)时间来补偿。

答案 2 :(得分:6)

创建非常适合要编程的应用程序的新数据类型的技术称为数据抽象。

答案 3 :(得分:1)

抽象意味着只向外界提供必要信息并隐藏其背景细节。在你的电脑你只能看到显示器,键盘和鼠标......我对内部布线一无所知这是抽象。

答案 4 :(得分:1)

数据抽象似乎被解释为尽可能地破坏数据。食物将是苹果,橙子,披萨的抽象。动物将是猫,牛,猪的抽象。食物对象就像这个伪代码:

class food{

 name;
 calories;
 weight;

 public eat(name);

 }

所有食物都有名称,卡路里量和体重。这很抽象。

然后你可以创建继承的对象,这将有点抽象。

class pizza inherits food{

  toppings;

  say_toppings();

}
披萨现在有配料,但它从食物中继承了名称,卡路里和重量。

基本上抽象已经被解释为达到每个项目的最低级别并且创建从它们扩展的类。它使你的代码更加可重复使用......如果你已经很好地抄袭了你的基类食物,并且包含了所有关于它的摘要,那么在食品行业工作的任何人都可以使用你的课程。

答案 5 :(得分:1)

抽象是将骨骼隐藏在人体之外。皮肤是包含的好方法。 (看看我在那里有多抽象?双关语。我离题......)

如果我有一个水瓶,那么我可以通过打开盖子将其翻过来,直到它弹出来。

bool lid_open = false;
void open_water_bottle_by_twisting() { lid_open = true; }

但水瓶是容器。容器保持液体直到它们变得开放并且它们能够被饮用(假设液体是可饮用的)。

class Container 
{ 
    bool lid_open = false;

protected: 
    Container() {}
    void open_by_twisting()
    {
        lid_open = true;
    }
public:
    virtual ~Container();
};

class WaterBottle : public Container
{
    WaterBottle() : Container() {}
public:
    ~WaterBottle();
};

但是,并非所有容器都以相同的方式打开。一些容器,例如水瓶,具有可以被扭曲的盖子。其他人没有盖子,例如运动瓶 - 那些含有弯曲的吸管,可以弯曲储存或饮用。

class Container 
{ 
    bool lid_open;
    bool straw_open;

protected:
    void TurnLid() { lid_open = true; }
    void BendStraw() { straw_open = true; }
    Container() : lid_open(false), straw_open(false){}

public:
    virtual void open() = 0;
    virtual ~Container();
};

class WaterBottle : public Container
{

public: 
    WaterBottle() : Container() {}
    void open()
    {
        TurnLid();
    }
    ~WaterBottle();
};

class ExerciseBottle : public Container
{
public:
    ExerciseBottle() : Container() {}
    void open()
    {
        BendStraw();
    }
    ~ExerciseBottle();
};

但客户并不知道ExerciseBottle ExerciseBottle的{​​{1}}实施内容是什么。它会调用open(),然后将BendStraw()设置为true。但straw_open只是调用一个函数来完成所有这些工作。客户端不必执行ExerciseBottle实现中使用的多个操作。 open()的情况类似。 那是什么抽象让客户知道后端会为它完成所有工作。当术语"将实现与界面分离时#34;这是用的意思。

答案 6 :(得分:0)

复杂系统是否使用易于与人交互或遇到的数据细节,这与计算机系统存储的方式不同,例如二进制数系统。 由Neema,Rohan和Upendo(程序员)回答

答案 7 :(得分:0)

根据给定方案限制数据属性以开发软件并删除所有不相关属性的技术。这使得软件开发更简单。

答案 8 :(得分:0)

让我们看一个电视的真实例子,你可以打开和关闭,更改频道,调整音量,添加外部组件,如扬声器,录像机和DVD播放器,但你不知道它的内部细节,是的,你不知道它是如何通过空中或通过电缆接收信号,如何翻译它们,最后将它们显示在屏幕上。

答案 9 :(得分:0)

它指的是在不包括背景细节或解释的情况下表示基本特征的行为

答案 10 :(得分:0)

很难找到DATA抽象的日常生活示例。但是,DBMS中的编程语言,表和视图中的任何数据类型,LinkedList,List,Queue,Stack等数据结构都是数据抽象。这些抽象为您提供了以特定方式访问数据的方式。

This article可以帮助您深入理解数据抽象和控制抽象。它还有一些控制和数据抽象的现实例子。

答案 11 :(得分:0)

抽象是指在不包括背景细节或解释的情况下表示基本特征的行为。

答案 12 :(得分:0)

简单数据抽象只是隐藏用户不必要的数据。 示例:人只是想打个电话,他只是选择或拨打否。并点击通话按钮此信息。这对他来说已经足够了。他不想知道如何建立连接以及拨打电话或传输语音的过程。

答案 13 :(得分:0)

我知道很久以前就问过这个问题了。但仍然希望分享一个可以帮助他人很容易理解abstraction概念的现实生活中的例子。

  

抽象的真实世界类比可能是这样的: 你(对象)正在安排相遇,并决定告诉什么他们可以在餐厅认出你。您决定包含有关您所在位置,身高,头发颜色和夹克颜色的信息。这是有助于程序(您的日期找到您)顺利运行的所有数据。您应该包括所有这些信息。另一方面,有很多关于你的信息与这种情况无关:你的社会安全号码,你最喜欢的足球运动员都与这种特殊情况无关,因为他们没有帮助你的约会对象。

答案 14 :(得分:0)

数据抽象: 它用于向用户提供必要的信息,并向用户隐藏不必要的信息。这称为数据抽象。 它会将您的业务逻辑隐藏在世界之外。

技术示例:Console.WriteLine();

非技术示例:电视遥控器,汽车遥控器。

更多详细信息:Data Abstraction with real-time example

答案 15 :(得分:-2)

数据隐藏处理oops的安全功能。根据这个属性,类的私有数据成员只能在不在类之外的类中访问或可视化。