Разница в сокрытии информации и абстракции данных?

Есть ли разница в абстракции данных и сокрытии информации? Пройдя все ответы по этой ссылке, я еще больше запутался. Абстракция VS Сокрытие информации VS Инкапсуляция Не удалось найти никакой разницы. Можем ли мы просто назвать одно (сокрытие информации) целью, а другое (абстракцию) — процессом? Но это не является удовлетворительной разницей для меня. Кроме того, я понял, что инкапсуляция — это метод реализации процесса абстракции. Я прав? Пожалуйста, объясните точную разницу.


person Ankita_K    schedule 29.08.2011    source источник


Ответы (5)


Скрытие информации — это когда разработчик специально решает ограничить доступ к деталям реализации. Этот принцип старше объектно-ориентированного проектирования, но часто используется.

Простым примером является определение констант в C, например, #define NAME_SIZE 15 Коду (клиентам) константы не нужно знать ее значение, и их не будет беспокоить, если вы (разработчик) решите изменить ее значение позже. Они не должны делать предположения о том, что это действительно 15, потому что вы можете решить изменить это.

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

Инкапсуляция — это то, как мы определяем уровень детализации элементов, составляющих наши абстракции. Хорошая инкапсуляция применяет скрытие информации, чтобы обеспечить ограничение деталей. Например, мой автомобиль на самом деле состоит из всех своих частей, но он предоставляет мне (водителю) только интерфейс, соответствующий моим потребностям, и не более того. Я могу управлять дверьми, замками, окнами, светом, звуковым сигналом, люком, направлением движения, ускоряться, замедляться и т. д. Хотя мне может быть любопытно манипулировать деталями того, «как» все эти вещи, инкапсуляция предотвращает меня видеть больше.

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

Примером того, где сокрытие информации не является частью автомобиля, может быть дроссельная заслонка< /а>. Мои родители рассказывали мне, как те работали в машинах, на которых ездили... это была деталь двигателя внутреннего сгорания, которая в электромобиле не пригодилась бы.

person Fuhrmanator    schedule 28.08.2012

Сокрытие данных — это процесс, в котором модификаторы доступа используются для сокрытия видимости методов и переменных Java. Модификаторы доступа бывают: public, private и protected.

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

person Community    schedule 31.08.2011

«Скрытие информации» — важная ЧАСТЬ «абстракции данных», но не вся концепция.

И помните: вы можете (и должны) иметь «скрытие информации» в процедурном коде (например, «не использовать глобальные переменные» и т. д. в FORTRAN или BASIC), но вам не обязательно иметь «абстрактный тип данных».

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

person paulsm4    schedule 29.08.2011

Класс обычно скрывает детали своей реализации от своих клиентов. Это называется сокрытием информации. создавая интерфейсы, мы вызываем концепцию сокрытия информации...

пример сокрытия информации ниже... у нас есть интерфейс в нашем заголовочном файле...

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;

    };

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

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

Клиенту класса стека не нужно заботиться о реализации стека. Клиент знает только то, что когда элементы данных помещаются в стек, они будут вызываться в порядке «последний пришел – первый ушел». Клиент заботится о том, какую функциональность предлагает стек, а не о том, как эта функциональность реализована. Эта концепция называется абстракцией данных.

person Community    schedule 31.08.2011

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

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

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

person Community    schedule 29.08.2012