Top.Mail.Ru

Геттеры и сеттеры Java. Применение и различия?

Геттеры и сеттеры в 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 = ” “;

Практическое применение

Продолжим нашу тему с собакой. Итак, мы чуть выше описали возникшую проблему.
Резонный вопрос: как она решается?
А решается она просто. Для того чтобы обезопасить данные от несанкционированного использования , нужно использовать самый строгий модификатор в Ява — «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 weghts) {
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,
то получится следующая история. Вообразите на секунду, что вы покупаете новый
смартфон в коробке. А когда ее открываете, то видите там куча разноцветных
проводов, корпус, какие-то детали и т.д, и все в разобранном виде. Чтобы позвонить,
вам нужно это все собрать воедино. Получится? Скорее всего нет, по крайней мере у
большинства не получится и они просто сломают телефон.

Возможно вам будет интересно почитать статью “Что такое Docker? Компоненты и разновидности”

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

Поделись статьей с друзьями!

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *