Инкапсуляция- это сокрытие ?

Инкапсуляция- это сокрытие ?

moderator E7

Всем привет ! Сегодня я решил обсудить такую насущную проблему в ООП как инкапсуляция и сокрытие данных и является ли первое вторым. Давайте разбираться!



Парадигма ООП - Инкапсуляция

Изначально, ООП стоит на трёх парадигмах:


  1. Инкапсуляция
  2. Наследование
  3. Полиморфизм

В некоторых источниках количество парадигм колеблется от 3 до 9 , но в данном случае нам не обязательно знать все возможные парадигмы.

Итак , сегодня нас интересует не количество парадигм , а почему нельзя говорить, что "инкапсуляция это сокрытие". Хочу расставить все точки над i в вопросе важности данной темы. Для начала начнём с инкапсуляции , дадим ей правильное определение:


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

А теперь посмотрим определение, которое этому механизму дают некоторые программисты:


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

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


На следующем примере я покажу реализацию инкапсуляции на ЯП Python:



Стоит запомнить, что в Python, Smalltalk и в других подобных языках нет такого понятия как сокрытие , но есть чистая инкапсуляция как в примере выше.



Что такое сокрытие ?

Стандартное определение сокрытия данных звучит так:


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

В таких языках как C#, Java модификаторы доступа имеют больший функционал нежели в Python , поэтому и ограничиваются они не только модификаторами доступа public , protected и private , но и другими.

Давайте я покажу на примере C#-кода:



На данном скриншоте указанны модификаторы доступа, но можно обойтись и без них:






Вывод

Я предоставил вам информацию, на основе которой можно сделать несколько выводов:


  1. Инкапсуляция обеспечивает сокрытие, то есть имеет такой механизм как сокрытие.
  2. В ЯП C# , Java , C++ и т.д. имеется инкапсуляция с сокрытием , а в Python только чистая инкапсуляция.
  3. По большей части сокрытие обеспечивается модификаторами доступа.

Это три основных вывода которые мы сделали. Таким образом, мы видим, что ситуация напрямую зависит от ЯП.


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


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



С любовью от E7 ;)

Report Page