Подтвердить что ты не робот

Инкапсуляция против скрытия информации

В чем конкретно заключаются различия между Ecapsulation и Information Hiding?

Ну, я знаю, что создание полей private, а затем создание setter и getter полей - это ecapsulation.However инкапсуляция означает именно это?

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

public Class IsThisEncapsulation
{
    public int age;

    public void setAge(int age)
    {
       this.age=age;
    }

    public int getAge()
    {
       return age;
    }
}

Теперь класс IsThisEncapsulation является примером Encapsulation?

Теперь, если бы поле "age" в классе класса было личным, чтобы скрывать информацию?

Не могли бы вы дать мне четкие примеры, которые помогут мне четко различать эти понятия?

4b9b3361

Ответ 1

Ну, я знаю, что создание полей private, а затем создание сеттера и getter полей - это инкапсуляция. Однако означает ли это инкапсуляция именно это?

--- > Инкапсуляция - это концепция ООП, где состояние объекта (поля класса) и его поведение (методы) завернуты вместе. Java обеспечивает инкапсуляцию с помощью class.

Скрытие информации:

- > механизм ограничения доступа к некоторым компонентам объекта. Ваш приведенный выше пример - это случай скрытия информации, если вы делаете age private.


Вначале сокрытие информации/данных считалось частью инкапсуляции, а определения Encapsulation были бы такими:

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

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

Ссылка: wikipage

Ответ 2

Из abstraction-vs-information-hiding-vs-encapsulation

Абстракция и инкапсуляция являются дополнительными понятиями: абстракция фокусируется на наблюдаемом поведении объекта... инкапсуляция фокусируется на реализации, которая приводит к такому поведению... инкапсуляция чаще всего достигается посредством скрытия информации, которая является процессом скрывая все секреты объекта, которые не способствуют его существенным характеристикам.

Скрытие информации:

"Его интерфейс или определение были выбраны для того, чтобы как можно меньше раскрыть о его внутренней работе". - [Парнас, 1972b]

"Абстракция может быть [...] использована как метод для определения, какая информация должна быть скрыта".

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

Инкапсуляция:

"Это [...] относится к созданию капсулы, в случае концептуального барьера, вокруг некоторой коллекции вещей". - [Wirfs-Brock et al, 1990]

"В качестве процесса инкапсуляция означает действие включения одного или нескольких элементов в контейнер [...]. Инкапсуляция в качестве объекта относится к пакету или оболочке, которая содержит (содержит, включает) один или несколько элементов."

"Если инкапсуляция была" тем же, что скрывает информацию ", тогда можно было бы аргументировать, что" все, что было инкапсулировано, также было скрыто ". Это, очевидно, не так."

Ответ 3

Существует тонкая разница между ними, мне нравится описание из книги "Growing Object-Oriented Software Guided by Tests", написанной Стивом Фрименом и Натом Прайс:

Что говорит:

Инкапсуляция

Обеспечивает, что поведение объекта может быть затронуто только через его API. Это позволяет нам контролировать, насколько изменение одного объекта повлияет на другие части системы, гарантируя отсутствие неожиданных зависимостей между несвязанные компоненты.

скрытие информации

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

Ответ 4

Инкапсуляция и скрытие информации - очень тесно связанные понятия, хотя их точные определения различаются в зависимости от того, с кем вы разговариваете.

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

Термин "инкапсуляция" был придуман Zilles (1973), чтобы описать использование процедур для контроля доступа к базовым данным, чтобы уменьшить сложность системы и защита данных от опасных модификаций.

Впоследствии Parnas (1978) описал скрытие и инкапсуляцию информации (и абстракцию) как синонимичные термины, которые описывают скрытие деталей системы которые могут измениться. Тем не менее были сделаны различия между скрытием информации и инкапсуляцией, например, Micallef (1987), который описал инкапсуляцию как "строгое соблюдение информации, скрывающей". Некоторые авторы, такие как Cohen (1984) и Abreu and Melo (1996) описывают "механизмы инкапсуляции", особенно в объектно-ориентированных языках программирования, что позволяет скрывать информацию.

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

И наоборот, Rogers (2001) предполагает, что инкапсуляция - это просто языковой механизм, который позволяет объединять данные с методами, которые работают с этими данными. Он утверждает, что инкапсуляция принципиально не имеет никакого отношения к скрытию информации. Однако это определение противоречит почти всему употреблению термина в научной литературе за 28 лет до публикации его статьи. Есть еще несколько примеров этого использования, например Archer and Stinson (1995), но они немногочисленны и далеко друг от друга и не особенно заметны.

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

В качестве примера скрытия информации/инкапсуляции рассмотрим этот класс:

public class BankAccount {
    public int dollars;
}

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

public class BankAccount {
    private int dollars;

    public void deposit(int dollars) {
        this.dollars += Math.max(0, dollars);
    }
}

Теперь мы имеем контроль над тем, как изменяется состояние, и мы также можем изменить реализацию, не нарушая код клиента:

public class BankAccount {
    private int cents;

    public void deposit(int dollars) {
        deposit(dollars, 0);
    }

    public void deposit(int dollars, int cents) {
        this.cents += Math.max(0, 100 * dollars) + Math.max(0, cents);
    }
}

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

Ответ 5

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

Ответ 6

Чтобы ответить на ваш вопрос:

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

Инкапсуляция: инкапсуляция объединяет данные и методы и позволяет доступ к внутренним данным с помощью общедоступных методов. Итак, да, если в вашем классе вы создадите переменную age, private, вы достигнете инкапсуляции

Ответ 7

- > Инкапсуляция позволяет нам предоставлять доступ к определенным частям объекта, ограничивая одновременно,  доступ к другим. Другими словами, инкапсуляция позволяет нам скрывать информацию.

- > Информационное скрытие - это фактически процесс или акт ограничения