Руководство по Java Core. Инкапсуляция.

Инкапсуляция – это механизм “обёртывания” данных или кода, который работает с этими данными в отдельный модуль. Инкапсулированные, таким образом, переменные, отделены от других классов и доступ к ним возможен только с помощью методов класса, который содержит эти переменные.

Таким образом, мы, как бы, “прячем” переменные от остальных классов, что облегчает работу с ними в дальнейшем.

В ящике программирования Java, инкапсуляция достигается путём:

  • Объявления переменной класса приватной (модификатор доступа private)
  • Создание публичных (модификатор доступа public) методов для получения  и изменения значения переменной.

Для понимания того, как это работает на практике рассмотрим пример простого приложения.

Пример:

Класс Company


public class Company {
    private String companyName;
    private String companySphere;
    private String projectName;

    public String getCompanyName() {
        return companyName;
    }

    public void setCompanyName(String companyName) {
        this.companyName = companyName;
    }

    public String getCompanySphere() {
        return companySphere;
    }

    public void setCompanySphere(String companySphere) {
        this.companySphere = companySphere;
    }

    public String getProjectName() {
        return projectName;
    }

    public void setProjectName(String projectName) {
        this.projectName = projectName;
    }

    @Override
    public String toString() {
        return "=============================\n"
                + "Company Name: " + companyName +
                "\nSphere:" + companySphere +
                "\nProject Name: " + projectName +
                "\n============================\n";
    }
}

Класс CompanyRunner


public class CompanyRunner {
    public static void main(String[] args) {
        Company uksatse = new Company();

        uksatse.setCompanyName("UkSATSE");
        uksatse.setCompanySphere("Aviation");
        uksatse.setProjectName("SkybleLib");

        System.out.println("UkSATSE info:");
        System.out.println(uksatse);
    }
}

В результате работы программы мы получим следующий результат:


/*Some system messages*/
UkSATSE info:
=============================
Company Name: UkSATSE
Sphere:Aviation
Project Name: SkybleLib
============================

Как мы видим, доступ к переменным класса Company из класса CompanyRunner возможен только с помощью методов getXXX и setXXX.

Инкапсуляция даёт нам следующие преимущества:

  • Класс имеет полный контроль над всеми своими переменными.
  • Другим классам, которые будут использовать данный класс не интересно, как именно хранятся данные в классе. В случае, если нам будет необходимо изменить тип данных, то нам не придётся вносить изменения в другие классы.
  • Мы можем делать поля только для чтения или только для записи.

В этом уроке мы более глубоко изучили что такое инкапсуляция и как она применяется в языке программирования Java.

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