Один из способов, которым мы можем обеспечить инкапсуляция данных через использование аксессоров и мутаторов. Роль аксессоров и мутаторов - возвращать и устанавливать значения состояния объекта. Давайте узнаем, как программировать аксессоры и мутаторы в Джава. В качестве примера мы будем использовать Персональный класс с состоянием и конструктором уже определены:
Методы доступа
сбруя Метод используется для возврата значения частного поля. Он следует схеме именования с префиксом слова «get» перед началом имени метода. Например, давайте добавим методы доступа для имени, отчества и фамилии:
Эти методы всегда возвращают тот же тип данных, что и их соответствующее приватное поле (например, String), а затем просто возвращают значение этого приватного поля.
Теперь мы можем получить доступ к их значениям с помощью методов объекта Person:
Методы мутации
Метод мутатора используется для установки значения частного поля. Он следует схеме именования с префиксом слова «set» в начале имени метода. Например, давайте добавим поля мутатора для адреса и имени пользователя:
Эти методы не имеют возвращаемого типа и принимают параметр, который имеет тот же тип данных, что и их соответствующее закрытое поле. Затем параметр используется для установки значения этого частного поля.
Теперь можно изменить значения для адреса и имени пользователя внутри объекта Person:
Зачем использовать аксессоры и мутаторы?
Легко прийти к выводу, что мы могли бы просто изменить закрытые поля определения класса, чтобы они были общедоступными и достичь тех же результатов. Важно помнить, что мы хотим максимально скрыть данные объекта. Экстра буфер С помощью этих методов мы можем:
- Изменить способ обработки данных за кулисами.
- Установите проверку значений, для которых устанавливаются поля.
Допустим, мы решили изменить способ хранения отчеств. Вместо одной строки мы можем теперь использовать массив строк:
Реализация внутри объекта изменилась, но внешний мир не пострадал. Способ вызова методов остается точно таким же:
Или, скажем, приложение, использующее объект Person, может принимать только имена пользователей, содержащие не более десяти символов. Мы можем добавить проверку в мутаторе setUsername, чтобы убедиться, что имя пользователя соответствует этому требованию:
Теперь, если имя пользователя, переданное мутатору setUsername, длиннее десяти символов, оно автоматически усекается.