Инкапсуляция (программирование): различия между версиями

[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
отмена правки 92863141 участника 84.22.153.227 (обс.)
Метка: отмена
5 правок возвращено к версии 91660084 82.117.232.9: устранение последствий анонимного вандализма Служебная:Вклад/84.22.153.227
Строка 3:
'''Инкапсуляция''' ({{lang-en|encapsulation}}, от {{lang-lat|in capsula}}) — в [[Информатика|информатике]] упаковка данных и функций в единый компонент.
Инкапсуляция зачастую будет рассматриватьсярассматривается как понятие, присущее исключительно [[Объектно-ориентированное программирование|объектно-ориентированному программированию (ООП)]], но в действительности обширно встречается и в других (см. [[Полиморфизм (информатика)#Подтипизация на записях|подтипизация на записях]] и [[Полиморфизм (информатика)#Полиморфизм записей и вариантов|полиморфизм записей и вариантов]]). В ООП инкапсуляция тесно связана с принципом [[абстракция данных|абстракции данных]] (не путать с [[Абстрактный тип данных|абстрактными типами данных]], реализации которых предоставляют возможность инкапсуляции, но имеют иную природу). Это, в частности, приводит к другому распространённому заблуждению — рассмотрению инкапсуляции неотрывно от [[Сокрытие (программирование)|сокрытия]]. В частности, в сообществе [[С++]] или [[Java]] принято рассматривать инкапсуляцию без сокрытия как неполноценную. Однако, некоторые языки (например, [[Smalltalk]], [[Python]]) реализуют инкапсуляцию в полной мере, но не предусматривают возможности скрытия в принципе. Другие ([[Standard ML]], [[OCaml]]) жёстко разделяют эти понятия как ортогональные и предоставляют их в семантически различном в виде (см. [[язык модулей ML#Опечатывание|сокрытие в языке модулей ML]]).
 
== Подробности ==
Строка 52:
=== C# ===
{{Main|C sharp}}
Целью инкапсуляции является обеспечение согласованности внутреннего состояния объекта. В C# для инкапсуляции используются пбличныепубличные свойства и методы объекта. Переменные, за редким исключением, не должны быть публично доступными. Проиллюстрировать инкапсуляцию можно на простом примере. Допустим, нам необходимо хранить вещественное значение и его строковое представление (например, для того, чтобы не производить каждый раз конвертацию в случае частого использования). Пример реализации без инкапсуляции таков:
<source lang="csharp">
class NoEncapsulation