Jump to content

Инкапсуляция полей

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

public class NormalFieldClass {
    public String name;
 
    public static void main(String[] args)
    {
        NormalFieldClass example1 = new NormalFieldClass();
        example1.name = "myName";
        System.out.println("My name is " + example1.name);
    }
}

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

public class EncapsulatedFieldClass {
    private String name;
 
    public String getName()
    {
        return name;
    }
 
    public void setName(String newName)
    {
        name = newName;
    }
 
    public static void main(String[] args)
    {
        EncapsulatedFieldClass example1 = new EncapsulatedFieldClass();
        example1.setName("myName");
        System.out.println("My name is " + example1.getName());
    }
}

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

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

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

Недостатки

[ редактировать ]

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

  1. ^ Лян, Ю. Дэниел. «9.9 Инкапсуляция полей данных» . Ревель за введение в программирование на Java и структуры данных .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 8fcdf4feb4a72271b7bee4816dea494f__1715876640
URL1:https://arc.ask3.ru/arc/aa/8f/4f/8fcdf4feb4a72271b7bee4816dea494f.html
Заголовок, (Title) документа по адресу, URL1:
Field encapsulation - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)