Что именно означает «абстракция данных»? - PullRequest
12 голосов
/ 03 сентября 2010

Что означает абстракция данных? Пожалуйста, предоставьте примеры из реальной жизни вместе с

Ответы [ 16 ]

19 голосов
/ 03 сентября 2010

Абстракция состоит из двух частей:

  • Скрыть детали, которые не имеют значения с определенной точки зрения
  • Определите детали, которые имеют значение с определенной точки зрения, и примите во внимание, что предметы принадлежат к тому же классу , если они обладают этими деталями.

Например, если я разрабатываю программу для работы с инвентарем, мне хотелось бы узнать, сколько предметов определенного типа имеется в наличии в системе. С точки зрения системы интерфейса, мне все равно, получаю ли я эту информацию из базы данных, файла csv, удаленного репозитория через интерфейс SOAP или перфокарты. Мне просто важно, что я могу сказать widget.get_items_in_stock() и знать, что он вернет целое число.

Если позже я решу, что хочу записать это число каким-либо другим способом, то человеку, проектирующему интерфейс, не нужно знать, заботиться или беспокоиться об этом, пока widget все еще имеет метод get_items_in_stock(). Точно так же, интерфейсу не нужно заботиться о том, чтобы я создал подкласс класса виджетов и добавил метод get_square_root_of_items_in_stock(). Я также могу передать ему экземпляр нового класса.

Итак, в этом примере мы скрыли подробности того, как данные получены, и решили, что все, что связано с методом get_items_in_stock(), является экземпляром того же класса ( или его подкласс) для определенных целей.

10 голосов
/ 03 сентября 2010

Абстракция данных - это любое устройство, которое позволяет вам обрабатывать данные так, как люди сталкиваются с ними, а не как они хранятся на компьютере.

На самом низком уровне все примитивные типы данных являются абстракциями.обычно не приходится иметь дело с данными на битовом уровне (то есть как они в конечном итоге хранятся), а в виде целых чисел, чисел с плавающей точкой, символов и т. д.

Затем мы добавляем слои в эту абстракцию - возможнодва целых числа представляют Point, или мы и перечисления для представления месяцев года, дней недели и т. д.

С каждым уровнем абстракции мы удаляемся от машины и (надеемся) ближе кчеловеческое понимание данных.Это может привести к снижению производительности - это может не всегда иметь место, когда точки могут быть наиболее эффективно представлены двумя целыми числами.Это компенсируется более коротким временем разработки (и обслуживания) при использовании абстракций.

6 голосов
/ 11 декабря 2012

Техника создания нового типа данных, который хорошо подходит для программируемого приложения, называется абстракцией данных.

1 голос
/ 23 июня 2016

Абстракция скрывает скелет от человеческого тела .Кожа делает отличный способ , содержащий его.(Видите, как абстрактно я там нахожусь? Пун намеревался. Я отвлекся ...)

Если у меня есть бутылка с водой, то я могу пить из нее, открыв крышку, поворачивая ее до

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 open().Он вызывает BendStraw(), который затем устанавливает straw_open в true.Но ExerciseBottle просто вызывает одну функцию для выполнения всей этой работы.Клиенту не нужно выполнять несколько действий, которые используются при реализации open().Дело идет аналогично для WaterBottle. И вот что такое абстракция : , сообщая клиенту, что бэкэнд выполнит всю работу за него .Когда используется термин «отделение реализации от интерфейса», это означает то, что имеется в виду.

1 голос
/ 27 сентября 2014

Абстракция данных, по-видимому, объясняется разбивкой данных настолько, насколько вы можете их получить.Еда была бы абстракцией яблока, апельсина, пиццы.животное будет абстракцией кошки, коровы, свиньи.Пищевым объектом будет что-то вроде этого псевдокода:

class food{

 name;
 calories;
 weight;

 public eat(name);

 }

у всех продуктов есть название, количество калорий и вес.Это довольно абстрактно.

Затем вы можете создавать объекты, которые наследуют, что было бы немного менее абстрактно.

class pizza inherits food{

  toppings;

  say_toppings();

}

пицца теперь имеет начинки, но она наследует имя, калории и вес отfood.

По сути, абстракция объясняется как переход на самый низкий уровень каждого предмета и создание классов, которые выходят из них.Это также делает ваш код более пригодным для повторного использования ... Если вы достаточно хорошо представили свой базовый класс продуктов питания и включили в него все абстрактное, то любой человек, работающий в пищевой промышленности, может использовать ваш класс.

1 голос
/ 12 июля 2014

Абстракция означает предоставление только важной информации внешнему миру и сокрытие его второстепенных деталей. Например. В вашем компьютере вы можете видеть только монитор, клавиатуру и мышь ... вы ничего не знаете о внутренней проводке, это абстракция.

0 голосов
/ 22 июня 2018

Абстракция данных: Он используется для предоставления необходимой информации пользователю и скрытия ненужной информации от пользователя. Это называется абстракция данных. Это скроет вашу бизнес-логику от внешнего мира.

Технический пример: Console.WriteLine();

Нетехнический пример: пульт для телевизора, пульт для автомобиля.

Подробнее: Абстракция данных с примером в реальном времени

0 голосов
/ 27 декабря 2015

Я знаю, что этот вопрос задавали давно. Но все же хотелось бы поделиться одним реальным примером из жизни, который может помочь другим очень легко понять концепцию abstraction.

Реальная аналогия абстракции может работать следующим образом: Вы (объект) организуете свидание вслепую и решаете, что им сказать что они могут узнать вас в ресторане. Вы решаете включить информацию о том, где вы будете находиться, ваш рост, цвет волос и цвет вашей куртки. Это все данные, которые помогут процедуре (ваша дата нахождения вас) работать гладко. Вы должны включить всю эту информацию. С другой стороны, есть много информации о вас, которая не имеет отношения к этой ситуации: ваш номер социального страхования, ваши любимые футболисты не имеют отношения к этой конкретной ситуации, потому что они не помогут найти вашу дату Вы.

0 голосов
/ 18 июля 2015

скрытие данных относится к функциям безопасности упс. согласно этому свойству закрытые данные класса доступны или доступны только внутри класса, а не за его пределами.

0 голосов
/ 14 сентября 2014

Просто Data Abstraction - это не что иное, как сокрытие ненужных данных пользователя. Пример: человек просто хочет позвонить, он просто выбирает или набирает номер. и нажмите на кнопку вызова этой информации. ему не достаточно. Он не хочет знать о том, как установлено соединение, и о том, что происходит за звонком или как передается голос.

...