Геттеры и сеттеры

Геттеры и сеттеры

EPAM LAB

Один из базовых принципов ООП – инкапсуляция – гласит, что при разработке классов необходимо скрывать детали реализации и состояние класса, предоставляя пользователям класса публичный API – некий механизм взаимодействия с классом и его экземплярами. Одним из компонентов такого API являются специальные методы, которые называются mutator methods, или setters, и accessor methods, или getters. Обычно у каждого поля класса есть свой сеттер и геттер. Первый позволяет пользователям класса установить значение этого поля, а второй возвращает его текущее значение для конкретного экземпляра класса.

Пример:

В классе Foo объявлено поле age типа int, геттер для этого поля – метод getAge(), и его сеттер – метод setAge(). Из примера видны общепринятые названия методов: геттеры обычно называют getXXX (isXXX для boolean), а сеттеры – setXXX, где XXX – имя соответствующего поля.

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

Во-вторых, если в классе есть mutable поля ссылочного типа, например коллекции, для сохранения корректной инкапсуляции класса необходимо в геттере передавать не ссылку на коллекцию, а копию такой коллекции, а в сеттере не присваивать такому полю какую-то коллекцию напрямую, а копировать её элементы:


Report Page