WikiDer > Инкапсуляция поля
Эта статья не цитировать любой источники. (Декабрь 2009 г.) (Узнайте, как и когда удалить этот шаблон сообщения) |
В компьютерное программирование, инкапсуляция поля предполагает предоставление методы который можно использовать для чтения или записи в поле вместо прямого доступа к полю. Иногда эти методы доступа называются getX и setX (где X - имя поля), которые также известны как методы мутатора. Обычно методы доступа имеют публичную видимость, в то время как инкапсулируемое поле задано частный видимость - это позволяет программисту ограничивать действия, которые может выполнять другой пользователь кода. Сравните следующие Ява учебный класс в которой имя поле имеет нет инкапсулированы:
общественный учебный класс NormalFieldClass { общественный Нить имя; общественный статический пустота главный(Нить[] аргументы) { NormalFieldClass example1 = новый NormalFieldClass(); example1.имя = "мое имя"; Система.из.println("Меня зовут " + example1.имя); }}
в том же примере с использованием инкапсуляции:
общественный учебный класс EncapsulatedFieldClass { частный Нить имя; общественный Нить getName() { возвращаться имя; } общественный пустота Имя набора(Нить новое имя) { имя = новое имя; } общественный статический пустота главный(Нить[] аргументы) { EncapsulatedFieldClass example1 = новый ИнкапсулированныйПолеКласс(); example1.Имя набора("мое имя"); Система.из.println("Меня зовут " + example1.getName()); }}
В первом примере пользователь может использовать общедоступный имя переменную, как они считают нужным - во втором, однако, автор класса сохраняет контроль над тем, как частный имя переменная читается и записывается, разрешая доступ к полю только через его getName и Имя набора методы.
Преимущества
- Внутренний формат хранения данных скрыт; в этом примере ожидание использования ограниченных наборов символов могло бы позволить сжатие данных посредством перекодирования (например, восьмибитовых символов в шестибитовый код). Попытка закодировать символы вне диапазона ожидаемых данных может быть обработана путем приведения ошибки в набор рутина.
- В целом получать и набор методы могут быть созданы в двух версиях - эффективный метод, который предполагает, что вызывающий объект предоставляет соответствующие данные и что данные были сохранены должным образом, и отладка версия, которая, хотя и работает медленнее, выполняет проверку достоверности полученных и доставленных данных. Такое обнаружение полезно, когда процедуры (вызывающие или вызываемые) или форматы внутренней памяти создаются или изменяются заново.
- Местоположение хранимых данных в более крупных структурах может быть скрыто, что позволяет вносить изменения в это хранилище без необходимости изменения кода, который ссылается на данные. Это также снижает вероятность неожиданного побочные эффекты от таких изменений. Это особенно выгодно, когда аксессуары являются частью Операционная система (ОС) - случай, когда код вызова (приложения) может быть недоступен разработчикам ОС.
Недостатки
Доступ к подпрограмме включает дополнительные накладные расходы, которых нет при прямом доступе к данным. Хотя это становится менее важным из-за широкой доступности быстрых универсальных процессоров, это может оставаться важным при кодировании некоторых вычисления в реальном времени системы и системы, использующие относительно медленные и простые встроенные процессоры. В некоторых языках, таких как C ++, методы получения / установки обычно встроенные функции, поэтому при встраивании код выглядит так же, как прямой доступ к полю.