Другое

Геттеры и сеттеры Java. Где применяются, какие у них различия?

Lorem ipsum dolor

Геттеры и сеттеры в Java применяются довольно часто. Основная их цель — это обеспечить защиту данным в коде от неправильного внешнего использования.

Они применяются не только в языке Java, но также в С, JavaScript и других языках программирования. То есть геттеры и сеттеры — это довольно распространенное явление в программировании. Но сегодня мы разберем, как используются геттеры и сеттеры именно в языке Java.

 

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

Простая возможная ситуация из жизни. Допустим, вы работаете в команде над каким-то совместным проектом. Вы разработали на Ява классовый объект Dog, определяющий собачек, и пошли домой. Возможно, ушли на выходные или, вероятно, в отпуск.

Класс «нашей собаки» будет примерно таким:

public_class Dog {

public_Strng names;

public_nt ages;

public_int weghts;

 

publc Dog(Strng names, int ages, int weghts) {

this.names = names;

this.ages = ages;

this.weights = weights;

}

public Dog() {

}

public void sayGav() {

System.out.println("Гав-гав!");

}

}

 

Вы спокойно пошли на заслуженный отдых, в мыслях никого не подозревая. А тем временем один из ваших коллег воспользовался вашим «творением» Dog, когда создавал, засыпая или не думая, класс Mode.

Его кодинг представлен примерно в таком виде:

public_class Mode {

publc_statcs_void mode(Strng[] ards) {

Dog dog = new Dog();

dog.names = "";

dog.ages = -999;

dog.weights = 1;

}

}

 

Абсолютно не имеет значения, зачем так сделал ваш коллега. Возможно, устал, а, может, лишняя банка энергетика дает о себе знать. Имеет значение другое: созданный вами класс Dog ничем не защищен и дает возможность ему присваивать немыслимые значения. Как в коде «вашего коллеги», где собаке присвоен возраст -999 лет.

Почему так произошло? Потому что поля «имени», «возраста» и «веса» собаки находятся в открытой доступности. А это значит, что есть возможность их задействовать в какой-то момент в рамках вашего программирования. Это делается легко: создается объект Dog, и его можно затронуть при необходимости, применяя оператор «.».

Пример:

Dog dog = new Dog();

dog.names = " ";

 

Геттеры и сеттеры Java: практическое применение

Продолжим нашу тему с собакой. Итак, чуть выше описали возникшую проблему. Резонный вопрос: как она решается?

А решается она просто. Для того чтобы обезопасить данные от несанкционированного использования , нужно применить самый строгий модификатор в Ява — «private». Он не дает возможность использовать поля класса, где он применяется, за пределами самого класса. Если все же попытаться это сделать, то компилятор выдаст ошибку.

Итак, данные внутри класса мы защитили. Но получается, что мы ими не сможем воспользоваться? А вдруг нам нужно будет узнать вес нашей запрограммированной программы? Что тогда делать? По идее, нам нужно каким-то образом распределить доступность в самом коде: что можно делать, а что нельзя. Вот тут помогают разрешить всю ситуацию наши геттеры и сеттеры Ява.

  • Геттеры — это методы, при помощи которых мы можем получить информацию из полей.
  • Сеттеры — это методы, которые могут установить нужную информацию в нужное место.

Теперь объединим вышесказанное и внедрим в наш разработанный для примера скрипт «собачек», и тогда мы должны увидеть следующий результат:

publc_class_Dog {

private_Strings_names;

private_int_ages;

private_int_weights;

publc_Dog(Strings names, int ages, int weights) {

this.names = names;

this.ages = ages;

this.weights = weights;

}

public_Dog() {

}

 

public_void sayGav() {

Systems.out.println("Гав-гав!");

}

 

public_String_getNames() {

return_names;

}

 

public_void_setNames(String names) {

this.names = names;

}

 

public_int_getAges() {

return_ages;

}

 

publc_void setAges(int ages) {

this.ages = ages;

}

 

public_int_getWeights() {

return_weights;

}

 

public_void_setWeights(int weights) {

this.weights = weights;

}

}

 

Ничего сложного в таком применении нет, все относительно просто и понятно.

В самой разрабатываемой программе кодинг выглядит примерно таким образом:

public_class Mode {

public_static void main(Strng[] args) {

Dog jack = new Dog("Джек", 6, 15);

Strings jackNames = jack.getNames();

int jackAges = jack.getAges();

int jackWeights = jack.getWeights();

 

Systems.out.prntln("Кличка собаки: " + jackName);

Systems.out.prntln("Сколько лет собаке: " + jackAge);

Systems.out.prntln("Сколько весит собака: " + jackWeight);

}

}

 

И вот что выдаст нам консоль:

Кличка собаки: Джек

Сколько лет собаке: 6

Сколько весит собака: 15

То есть теперь к полям нашего класса Dog есть доступ только через применение геттеров и сеттеров Java. Самое важное, что их использование не даст возможность присвоить нашим полям неправильные значения, так как в них есть собственные ограничения. То есть количество лет собаки в -999 не получится.

 

Геттеры и сеттеры Java простыми словами

Если провести аналогию и попытаться объяснить, что такое геттеры и сеттеры Java, то получится следующая история. Вообразите на секунду, что вы покупаете новый смартфон в коробке. А когда ее открываете, то видите там кучу разноцветных проводов, корпус, какие-то детали и т. д., и все в разобранном виде. Чтобы позвонить, вам нужно это все собрать воедино. Получится? Скорее всего, нет, по крайней мере у большинства не получится, и они просто сломают телефон.

Поэтому вместо такой коробки запчастей мы получаем новенький смартфон, который нужно только зарядить, ввести нужный номер и нажать зелененькую кнопочку на экране, чтобы позвонить. Как там подключены провода, процессоры и другие части нас вообще не волнует. В этом случае производитель смартфона применил «ограничения» к устройству, чтобы мы не смогли его повредить, но при этом с нужной отверткой мы можем добраться и до микросхем внутри.

Кстати, весь код в статье приведен для примера и ознакомления, что такое геттеры и сеттеры Java, и не претендует на свою истинность.

Схожие статьи

Что такое планирование ресурсов предприятия (ERP)?
Другое

Что такое планирование ресурсов предприятия (ERP)?

Приколы про разработчиков и мемы про языки программирования
Другое

Приколы про разработчиков и мемы про языки программирования

Лучшая клавиатура для программиста: несколько интересных моделей
Другое

Лучшая клавиатура для программиста: несколько интересных моделей

Angular или React? Преимущества и отличия двух популярных фреймворков
Другое

Angular или React? Преимущества и отличия двух популярных фреймворков