Что такое инкапсуляция? - PullRequest
0 голосов
/ 02 ноября 2018

Мой учитель сказал мне, что инкапсуляция - это скрытие данных / информации.

Но из здесь я понимаю, что Инкапсуляция - это объединение данных и методов, которые воздействуют на эти данные, в одно целое. И это [инкапсуляция] позволяет нам создавать механизмы сокрытия информации. Например, создание переменной только для чтения или доступ к ней через некоторые контрольные точки.

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

Ответы [ 4 ]

0 голосов
/ 25 ноября 2018

Я дам объяснение инкапсуляции и сокрытия данных, как я понял из книга полного кода

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

Таким образом, каждый класс / метод должен задать вопрос: «Что я должен скрывать, чтобы уменьшить сложность?» и, следовательно, вы начинаете создавать интерфейс, который этот класс / метод предоставляет внешнему миру (другие классы / методы). Это состоит в создании хорошей абстракции для интерфейса для представления и обеспечении того, чтобы детали оставались скрытыми за абстракцией.

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

0 голосов
/ 02 ноября 2018

Подумайте о классе Birthday, который принимает дату рождения (DateTime) в конструкторе. Он имеет следующие свойства:

   Public Property _ZodiacSign As String = String.Empty
    Public Property _ChineseZodiac As String = String.Empty
    Public Property _ChineseZodiacChar As String = String.Empty
    Public Property _is21AndOver As Boolean
    Public Property _ChineseDate As String
    Public Property _EstimatesConvievedDate As DateTime

Вы не представляете, какова логика для определения знака зодиака или китайского зодиака, или им за 21, это черный ящик.

0 голосов
/ 02 ноября 2018

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

0 голосов
/ 02 ноября 2018

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

Большую часть времени это инкапсуляция немного больше, чем информация, скрывающая .

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

Сокрытие данных - это просто (обычно) скрытие данных (переменных экземпляра).

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

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

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

Инкапсуляция часто используется вместе с логикой. Например: я инкапсулирую, как отправлять электронные письма в этом классе и т. Д.


Проблема в том, что все используют одни и те же слова, поэтому почти невозможно сказать, что кто-то на самом деле подразумевает под любой из этих вещей. Если вы хотите знать, о чем кто-то говорит, всегда требуйте пример (или два).

...