Инкапсуляция полей
Эта статья нуждается в дополнительных цитатах для проверки . ( май 2024 г. ) |
В компьютерном программировании инкапсуляция полей предполагает предоставление методов , которые можно использовать для чтения или записи в поле, а не для прямого доступа к полю. Иногда эти методы доступа называются 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++, методы получения/установки обычно являются встроенными функциями , поэтому при выполнении встраивания код выглядит так же, как при прямом доступе к полю.
Ссылки
[ редактировать ]- ^ Лян, Ю. Дэниел. «9.9 Инкапсуляция полей данных» . Ревель за введение в программирование на Java и структуры данных .