Разница в сокрытии информации и абстракции данных? - PullRequest
9 голосов
/ 29 августа 2011

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

Ответы [ 5 ]

6 голосов
/ 29 августа 2012

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

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

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

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

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

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

3 голосов
/ 31 августа 2011

Скрытие данных - это процесс, с помощью которого модификаторы доступа используются, чтобы скрыть видимость java-методов и переменных.Они имеют доступ к модификаторам: public, private и protected.

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

1 голос
/ 29 августа 2011

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

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

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

0 голосов
/ 29 августа 2012

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

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

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

0 голосов
/ 31 августа 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;

    };

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

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

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

...