Зачем нужны геттеры и сеттеры java
Перейти к содержимому

Зачем нужны геттеры и сеттеры java

  • автор:

Как работают геттеры и сеттеры java

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

Например создадим класс User:

public class User  private int id; private String name; // возможно тут будет конструктор. // получаем значение поля id public int getId()  return id; > // записываем значение в поле id public void setId(int id)  this.id = id; > // получаем значение поля name public String getName()  return name; > // записываем значение в поле name public void setName(String name)  this.name = name; > > 

Создадим экземпляр класса User и применим к нему геттеры и сетторы:

User user = new User(); //Зададим значение полей через сеттеры user.setId(1); user.setName("Mark"); //Получим значения полей через геттеры String name = user.getName(); int id = user.getId(); 

Геттеры и сеттеры 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: практическое применение

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

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

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

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

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

Мы будем очень благодарны

если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.

Зачем нужны getter and setter методы? [дубликат]

Давно уже пишу на java и я привык свойства класса делать приватном и писать для них гетер и сетер методы но я понял что не знаю зачем это нужно? Ведь если у тебя есть метод сетер и гетер к свойству не легче сделать его публичном и использовать?

Отслеживать
13.7k 12 12 золотых знаков 43 43 серебряных знака 75 75 бронзовых знаков
задан 21 ноя 2018 в 2:36
Fariz Mamedow Fariz Mamedow
1,447 2 2 золотых знака 9 9 серебряных знаков 21 21 бронзовый знак

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Если у вас действительно никакой логики в геттерах сеттерах нет (и не предвидится), а только «пустышки», то вы только захламляете код лишними методами. Вспомните YAGNI — то что вы планируете может вам никогда не понадобится, но вы уже платите цену за возросшую сложность кода.

То что что-то можно использовать, не значит что это будет использовано. А то можно сразу и историю к каждому полю прицепить, и стэк, и логгирование .. но обычно не нужно.

Если же в геттерах-сеттерах чаще есть логика (примеры такой логики приведены в других ответах), чем ее нет, то да, код будет конситентнее (проще), если писать их везде по единому шаблону.

Отслеживать
ответ дан 21 ноя 2018 в 5:10
13.7k 12 12 золотых знаков 43 43 серебряных знака 75 75 бронзовых знаков

Методы get() и set() нужны не только для того, чтобы получить доступ к данным, но и чтобы не допустить некорректной работы с ними.

private int n = 1; int[] array = new int[5]; public void setN(int n) < if (n >= 0 && n

В данном случае, если мы захотим изменить n вызвав метод setN(), то при вызове метода method(), не будет ошибки из-за выхода за пределы массива.

Геттеры и Сеттеры

Следующее понятие из мира ООП, которое следует рассмотреть — это геттеры и сеттеры (getter — от англ. «get» — получать, и setter — от англ. «set» — устанавливать). Это общепринятый способ вводить данные («set») или получать данные («get»). Например, у меня есть класс Cat — кошка. Я задаю (используя setter) имя, пол, цвет глаз и окрас кошки (или кота):

А потом, если нужно узнать, какое у кошки имя — получаю с помощь getter — в данном случае get CatName :

Зачем они нужны?

Действительно — если я сам все задаю, зачем все эти геттеры и сеттеры?

Тут, нам стоит вспомнить про такой принцип ООП как инкапсуляция (если Вы не знаете, что это такое, вернитесь назад и прочитайте статью «Что такое ООП»). С помощью геттеров и сеттеров Вы защищаете содержимое программы — когда ей пользуется кто-то другой.

Представим, что создается программа, с помощью которой печатаются паспорта. Вам ведь не захочется, чтобы кто-то без доступа вносил изменения в эту программу?

Как это работает?

Итак, как уже стало понятно, геттеры и сеттеры выполняют важную миссию защиты данных Вашей программы. Давайте рассмотрим, как это происходит на практике, и представим, что у нас есть такой класс Cat:

Добавить комментарий

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