Страницы

Поиск по вопросам

воскресенье, 8 декабря 2019 г.

Геттеры-сеттеры в Java

#java


Я новичок в программировании, и очень прошу помочь мне разобраться с геттерами и
сеттерами. Как работать с ними - я примерно поняла. Мне не понятно, как они относятся
к инкапсуляции? Судя по гуглу, это настолько просто, что инфы толковой просто нет...    


Ответы

Ответ 1



В Java данные отделены от методов, дабы предотвратить неверную модификацию этих самых данных, т.е. по сути реализована основа для инкапсуляции. Соответственно для доступа (или правильного доступа) к данным Вам необходимо иметь соответствующие функции. Роль эту и играют функции-геттеры и функции-сеттеры, реализующие, кроме всего прочего, прозрачный интерфейс для работы с данными. В реализации данных методов и заключен принцип инкапсуляции. По сути вы не видите, как данные обрабатываются (вам известен лишь интерфейс, через который, и только через который вы можете взаимодействовать с объектом), а значит можете быть уверены, в корректности обработки данных, чего нельзя сказать при работе с данными напрямую. Естественно кроме корректности вы получаете целостность, относительную простоту и т.д. С точки зрения программиста, реализующего данный интерфейс так же необходимо помнить о том, что ваши классы и/или интерфейсы, возможно, будет кто-то использовать, а значит есть необходимость реализовывать геттеры и сеттеры, а не давать на растерзание данные. Простейший пример: вам необходимо хранить таблицу, которая имеет n-строк, m-столбцов. Для конечного пользователя по сути не должно быть важно, какая структура данных хранит эту таблицу внутри вашего класса, при использовании функции получения k-той строки (пусть это будет хоть массив, хоть список, хоть целая база данных). Небольшой код для данного примера: class SuperTableNM { private ArrayList> ourTable; //constructors and ... public Hashtable getLine(int lineNumber) { //ваша реализация... } } И еще из наболевшего, например, вы хотите хранить IP-адрес, создавать класс вы можете используя десятичную нотацию IP-адресов в виде обычных строк. Но хранить так адреса не экономично, можно использовать числа 4-байтовые целые или массив из четырех байт. Но получаете вы и выдаете IP только в виде строк. А значит: class IPAddress { private short a; private short b; private short c; private short d; public IPAddress(String ip) { //используем сеттер this.setIP(ip); } private void setIP(String ip) { //проверки корректности //разбиение на байты... т.п. } public String getIP() { //склеивание наших байт в строку } }

Комментариев нет:

Отправить комментарий