繁体   English   中英

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

[英]What does “data abstraction” exactly mean?

数据抽象是指什么? 请提供现实生活中的例子。

抽象有两部分:

  • 隐藏从某个角度来看无关紧要的细节
  • 从特定的角度确定重要的细节,如果他们拥有这些细节,则考虑属于同一类的项目。

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

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

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

数据抽象是允许您在人们遇到数据时处理数据而不是存储在计算机上的数据。

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

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

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

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

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

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

class food{

 name;
 calories;
 weight;

 public eat(name);

 }

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

然后,您可以创建继承的对象,这将不那么抽象。

class pizza inherits food{

  toppings;

  say_toppings();

}

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

基本上抽象被解释为达到每个项目的最低级别并使类从它们延伸。 它使你的代码更容易被重复使用......如果你已经足够好地汲取了你的基类食物,并且包含了所有关于它的摘要,任何在食品行业工作的人都可以使用你的课程。

抽象是将骨骼隐藏在人体之外 皮肤很好地控制它。 (看看我在那里有多抽象?双关语。我离题......)

如果我有一个水瓶,那么我就可以通过打开盖子来饮用它,然后扭转它直到它弹出。

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();
};

但是客户端不知道ExerciseBottleExerciseBottleopen()是什么。 它调用BendStraw() ,然后将straw_open设置为true。 但是ExerciseBottle只是调用一个函数来完成所有这些工作。 客户端不必执行open()实现中使用的多个操作。 对于WaterBottle情况类似。 这就是抽象让客户知道后端会为它完成所有的工作 当使用术语“将实现与接口分离”时,这就是所指的。

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

根据给定场景限制数据属性的技术,用于开发软件和删除所有不相关的属性。这使得软件开发更简单。

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

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

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

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

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

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

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

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

数据抽象:用于向用户提供必要的信息并隐藏用户不必要的信息。 它被称为数据抽象。 它将隐藏您的业务逻辑来自世界各地。

技术示例: Console.WriteLine();

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

更多细节: 数据抽象与实时示例

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM