Инкапсуляция поля - Field encapsulation

В компьютерное программирование, инкапсуляция поля предполагает предоставление методы который можно использовать для чтения или записи в поле вместо прямого доступа к полю. Иногда эти методы доступа называются getX и setX (где X - имя поля), которые также известны как методы мутатора. Обычно методы доступа имеют публичную видимость, в то время как инкапсулируемое поле задано частный видимость - это позволяет программисту ограничивать действия, которые может выполнять другой пользователь кода. Сравните следующие Ява учебный класс в которой имя поле имеет нет инкапсулированы:

общественный учебный класс NormalFieldClass {    общественный Нить имя;     общественный статический пустота главный(Нить[] аргументы)    {        NormalFieldClass example1 = новый NormalFieldClass();        example1.имя = "мое имя";        Система.из.println("Меня зовут " + example1.имя);    }}

в том же примере с использованием инкапсуляции:

общественный учебный класс EncapsulatedFieldClass {    частный Нить имя;     общественный Нить getName()    {        возвращаться имя;    }     общественный пустота Имя набора(Нить новое имя)    {        имя = новое имя;    }     общественный статический пустота главный(Нить[] аргументы)    {      EncapsulatedFieldClass example1 = новый ИнкапсулированныйПолеКласс();      example1.Имя набора("мое имя");      Система.из.println("Меня зовут " + example1.getName());    }}

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

Преимущества

  • Внутренний формат хранения данных скрыт; в этом примере ожидание использования ограниченных наборов символов могло бы позволить сжатие данных посредством перекодирования (например, восьмибитовых символов в шестибитовый код). Попытка закодировать символы вне диапазона ожидаемых данных может быть обработана путем приведения ошибки в набор рутина.
  • В целом получать и набор методы могут быть созданы в двух версиях - эффективный метод, который предполагает, что вызывающий объект предоставляет соответствующие данные и что данные были сохранены должным образом, и отладка версия, которая, хотя и работает медленнее, выполняет проверку достоверности полученных и доставленных данных. Такое обнаружение полезно, когда процедуры (вызывающие или вызываемые) или форматы внутренней памяти создаются или изменяются заново.
  • Местоположение хранимых данных в более крупных структурах может быть скрыто, что позволяет вносить изменения в это хранилище без необходимости изменения кода, который ссылается на данные. Это также снижает вероятность неожиданного побочные эффекты от таких изменений. Это особенно выгодно, когда аксессуары являются частью Операционная система (ОС) - случай, когда код вызова (приложения) может быть недоступен разработчикам ОС.

Недостатки

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