Учебники

9) Инкапсуляция

Что такое инкапсуляция в Java?

Инкапсуляция – это принцип объединения данных (переменных) и кода в единое целое. Это одна из четырех концепций ООП. Другие три – это Наследование, Полиморфизм и Абстракция.

В этом уроке вы узнаете

Нажмите здесь, если видео не доступно

Изучите инкапсуляцию на примере

Чтобы понять, что такое инкапсуляция, рассмотрим следующий класс банковских счетов с методами депозита и отображения баланса

class Account {
    private int account_number;
    private int account_balance;

    public void show Data() {
        //code to show data 
    }

    public void deposit(int a) {
        if (a < 0) {
            //show error 
        } else
            account_balance = account_balance + a;
    }
}

Предположим, хакеру удалось получить доступ к коду вашего банковского счета. Теперь он пытается внести сумму -100 на ваш счет двумя способами. Давайте посмотрим на его первый метод или подход.

Подход 1: Он пытается внести недействительную сумму (скажем, -100) на ваш банковский счет, манипулируя кодом.

Изучите инкапсуляцию Java за 10 минут

Теперь вопрос – это возможно? Давай расследуем.

Обычно переменные в классе устанавливаются как «частные», как показано ниже. Доступ к нему можно получить только с помощью методов, определенных в классе. Никакой другой класс или объект не может получить к ним доступ.

Изучите инкапсуляцию Java за 10 минут

Если элемент данных является закрытым, это означает, что доступ к нему возможен только в пределах одного класса. Никакой внешний класс не может получить доступ к частному члену данных или переменной другого класса.

Так что в нашем случае хакер не может внести сумму -100 на ваш счет.

Изучите инкапсуляцию Java за 10 минут

Подход 2 : Первый подход Хакера не смог внести сумму. Далее он пытается внести сумму -100, используя метод «депозит».

Изучите инкапсуляцию Java за 10 минут

Но реализация метода имеет проверку на отрицательные значения. Таким образом, второй подход также терпит неудачу.

Изучите инкапсуляцию Java за 10 минут

Таким образом, вы никогда не подвергаете свои данные внешней стороне. Что делает ваше приложение безопасным.

Изучите инкапсуляцию Java за 10 минут

Весь код можно представить как капсулу, и вы можете общаться только через сообщения. Отсюда и название инкапсуляции.

Сокрытие данных в Java

Часто инкапсуляция Java называется скрытием данных . Но концепция инкапсуляции не просто скрывает данные, она предназначена для лучшего управления или группировки связанных данных.

Чтобы добиться меньшей степени инкапсуляции в Java, вы можете использовать такие модификаторы, как «protected» или «public». Благодаря инкапсуляции разработчики могут легко изменять одну часть кода, не затрагивая другую.

Методы получения и установки в Java

Если элемент данных объявлен как «закрытый», то доступ к нему возможен только в пределах одного класса. Никакой внешний класс не может получить доступ к данным члена этого класса. Если вам нужен доступ к этим переменным, вы должны использовать публичные методы «getter» и «setter».

Методы Getter и Setter используются для создания, изменения, удаления и просмотра значений переменных.

Следующий код является примером методов получения и установки:

class Account{ 
private int account_number;
private int account_balance; 
    // getter method
	public int getBalance() {
        return this.account_balance;
    }
    // setter method
	public void setNumber(int num) {
        this.account_number = num;
    }
}

В приведенном выше примере метод getBalance () – это метод получения, который считывает значение переменной account_balance, а метод setNumber () – это метод установки, который устанавливает или обновляет значение для переменной account_number.

Абстракция против Инкапсуляции

Часто инкапсуляция неправильно понимается как абстракция. Давай учиться-

  • Инкапсуляция – это больше о том, «Как» добиться функциональности
  • Абстракция больше о том, что может сделать класс.

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

Преимущества инкапсуляции в Java

  • Инкапсуляция связывает данные с соответствующими функциями. Здесь функциональные возможности означают «методы», а данные означают «переменные»
  • Таким образом, мы храним переменную и методы в одном месте. Это место “класс”. Класс является основой для инкапсуляции.
  • С помощью Java Encapsulation вы можете скрыть (ограничить доступ) важные элементы данных в своем коде, что повышает безопасность
  • Как мы уже обсуждали ранее, если элемент данных объявлен как «закрытый», доступ к нему возможен только в пределах одного класса. Никакой внешний класс не может получить доступ к элементу данных (переменной) другого класса.
  • Однако, если вам нужен доступ к этим переменным, вы должны использовать публичные методы «getter» и «setter» .