• Уважаемый посетитель! Рады приветствовать тебя на обновленном форуме. Большая часть рекламы(90%) видна только гостям. После регистрации она убирается. Спасибо за внимание.

Инкапсуляция в Java

Dan38

Сообщения
11
Симпатии
2
#1
Инкапсуляция это второй кит ООП и в java он, конечно, тоже есть. Сейчас мы рассмотрим, что это такое. Инкапсуляция это механизм, манипулирующий данными и кодом и защищающий их от внешнего вмешательства. Это было определение и само по себе оно мало что говорит, поэтому перейдём сразу к практике. Рассмотрим следующий класс Dog, который вы уже видели в предыдущей статье:[MOW=java]public class Dog{
public Dog(int size1, int agres1){
size = size1;
agres = agres1;
}
int size;
int agres;

public void bark(){
}
public void eat(){

}
}
Код:
Что же не так с этим классом? У нас есть 2 интовые переменные, которым мы можем присвоить любое значение. Но ведь, скажем, размер собаки не может быть отрицательным. Значит нам нужно задать условия работы с этими переменными. Этим и занимается инкапсуляция. В java реализацией инкапсуляции являются модификаторы доступа. Это слова, указывающие на то, откуда может быть доступна переменная/класс/метод и пр. Вот все модификаторы доступа:[ATTACH=full]3771[/ATTACH]

Мы будем использовать модификатор private:
[MOW=java]public class Dog{
    public Dog(int size1, int agres1){
        if (size1 >= 0)
        size = size1;
       if (agres1 >= 0)
        agres = agres1;
    }
    private int size;
    private int agres;
  
    public int getSize(){
        return size;
    }
    public int getAgres(){
        return agres;
    }
    public void setSize(int size1){
        if (size1 >= 0)
        size = size1;
    }
        public void setAgres(int agres1){
       if (agres1 >= 0)
        agres = agres1;
    }
  
    public void bark(){
       //...
    }
    public void eat(){
        //...
    }
}[code]

Мы пометили переменные как private, чтобы их нельзя было изменять напрямую и настроили их изменение при помощи специальных методов (геттеры и сеттеры). Теперь, если человек захочет изменить переменную size или agres, ему придётся вызвать соответствующий метод, в котором происходит проверка на неотрицательность. Таким образом инкапсуляция обезопасила наш код.
В этой теме мы с вами разобрали основы инкапсуляции.