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

Последнее сообщение: 4 года назад от Dron007 в теме «Определение»
Пожалуйста, добавляйте новые темы снизу

Правки править

Инкапсуляция не просто сокрытие реализации (кода), но и объединение кода и данных "в одном флаконе". Последнее не менее важно, чем сам факт сокрытия внутренностей. РоманСузи 18:21, 21 октября 2007 (UTC)Ответить

Быть может я не всё понимаю, можно пример какой–то? В учебниках не встречал подобного описания

Пример на Паскале править

А зачем там пустой

protected

стоИт? Может, его убрать? Мешать, он, конечно, не мешает, но толку от него пустого... 94.25.37.21 17:28, 20 декабря 2009 (UTC)Ответить

  Сделано--Higimo 14:13, 11 марта 2013 (UTC)Ответить

Знание того, что «вот так-то делать нельзя» править

> знание того, что «вот так-то делать нельзя» > иногда является самым эффективным средством инкапсуляции!

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

С вами нельзя как-то связаться? нужна консультация по теме. Aihejmen (обс.) 12:43, 18 ноября 2018 (UTC)Ответить

Откатить правки править

Инкапсуляция не просто сокрытие реализации (кода), но и объединение кода и данных "в одном флаконе"

+1

Следующие правки надо откатить:

  • 10:52, 3 мая 2011‎ 178.177.210.38
  • 10:51, 3 мая 2011‎ 178.177.210.38

109.202.0.136 10:58, 17 января 2012 (UTC)Ответить

Об инкапсуляции править

Пожалуй, здесь самое запутанное определение инкапсуляции из всех, что встречаются в интернете. Инкапсуляция в ООП - это в первую очередь - принцип объединения данных и методов для их обработки. И именно эту мысль нужно развивать, объяснять преимущества объединения данных и методов относительно их разрозненности, имеющей место в процедурном программировании. А вот усложнять каждый из трех принципов - можно сколь угодно долго. При этом можно также захватить особенности того или иного языка программирования в части ООП, показать их отличия друг от друга. Но при этом важно не потерять главный смысл основных принципов ООП. 93.124.42.42 18:38, 12 февраля 2012 (UTC)Ответить

Такие определения будут мало выделять инкапсуляцию на фоне других парадигм ООП --Higimo 14:13, 11 марта 2013 (UTC)Ответить
В статье:

Однако, некоторые языки (например, Smalltalk, Python) реализуют инкапсуляцию в полной мере, но не предусматривают возможности скрытия в принципе.

А вот Роберт Мартин в своей книге "Чистая архитектура" говорит следующее:

В действительности многие языки ОО практически не имеют принудительной инкапсуляции.

с такиим примечанием:

Например, Smalltalk, Python, JavaScript, Lua и Ruby.

Так что изложенное в статье - как минимум не общепринятое мнение

Определение править

Я программист и мне совершенно непонятно что такое инкапсуляция по версии нашей википедии. В англоязычной всё намного понятнее. Предлагаю просто перевести:

- A language mechanism for restricting access to some of the object's components.[3][4] - A language construct that facilitates the bundling of data with the methods (or other functions) operating on that data

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

Второе мне не совсем понятно, но там же идёт разъяснение, что чаще под инкапсуляцией подразумевают только первое.

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

178.49.207.146 09:45, 21 февраля 2012 (UTC) DimaОтветить

Поддерживаю вас. — Эта реплика добавлена с IP 81.18.136.202 (о)

@Arachnelis: в текущей версии в преамбуле говорится одно, а в первом разделе («Подробности») — другое. В первом разделе приводятся два значения (при этом это перевод определения английского раздела), а в преамбуле инкапсуляция определяется исключительно вторым способом. — Джек, который построил дом (обс.) 14:13, 11 января 2017 (UTC)Ответить

Также, заменив определение, вы сильно размыли его. Если я возьму набор случайных данных и соединю его с набором случайных функций, я ещё не совершу инкапсуляцию. Сравни: «языковая конструкция, позволяющая связать данные с методами, предназначенными для обработки этих данных». — Джек, который построил дом (обс.) 14:17, 11 января 2017 (UTC)Ответить

А, увидел у вас топик-бан, пардон. — Джек, который построил дом (обс.) 14:21, 11 января 2017 (UTC)Ответить

Странное определение, абсолютно не способствующее пониманию: "упаковка данных и функций в единый компонент". Если я напихаю данных и функций в массив какой-то это не будет инкапсуляцией. И при чём тут упаковка? Попробую переписать. Dron007 (обс.) 03:11, 2 ноября 2019 (UTC)Ответить

Переписал на такое: "в информатике размещение в одном компоненте данных и методов, которые с ними работают. Также может означать скрытие внутренней реализации от других компонентов. Например, доступ к скрытой переменной может предоставляться не напрямую, а с помощью методов для чтения (геттер) и изменения (сеттер) её значения." Мне кажется, намного лучше. Апологетов "несокрытия" также должно удовлетворить. Но, главное, дает сразу интуитивное понимание термина тем, кто имеет опыт программирования. Без всяких заумных усложнений. Программирование практическая наука. Убрал в другой части отсыл на какие-то более точные формализированные описания, которых всё равно нет. Давайте попроще и поближе к народу быть. Энциклопедия должна пояснять, а не давать определения, непонятные даже тем, кто более 20 лет программирует. Разумеется, не за счёт потери смысла. Dron007 (обс.) 03:46, 2 ноября 2019 (UTC)Ответить