Абстракция скрывает скелет от человеческого тела .Кожа делает отличный способ , содержащий его.(Видите, как абстрактно я там нахожусь? Пун намеревался. Я отвлекся ...)
Если у меня есть бутылка с водой, то я могу пить из нее, открыв крышку, поворачивая ее до
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
. И вот что такое абстракция : , сообщая клиенту, что бэкэнд выполнит всю работу за него .Когда используется термин «отделение реализации от интерфейса», это означает то, что имеется в виду.