Encapsulation
это просто data hiding
.
давайте посмотрим, как происходит инкапсуляция.Предположим, вы создали класс Employee и включили две переменные экземпляра.имя и зарплата.Вы не делаете их личными.Теперь, что происходит, другой класс в программе может получить доступ к этим двум переменным, просто создав объект класса сотрудника.Поэтому мы хотим скрыть эти данные или информацию о зарплате за пределами классов.
Если мы хотим скрыть зарплату, мы можем просто объявить зарплату как переменную private
.Теперь мы знаем, что даже другой класс создает объект и пытается получить доступ к зарплате, поскольку раньше он не работал.Потому что это личное поле, которое доступно только для класса Employee.Теперь мы скрыли наши данные.
Но предположим, что нам нужен человек, чтобы вводить данные о зарплате каждого из сотрудников.Я сделаю это более ясным.Пользователь, вводящий данные, имеет 3 типа данных для ввода woked_hours, OT and leaves
(для этого в классе Emplyee есть три переменные).Мы хотим, чтобы этот человек ввел эти данные, но мы do not want
его see
, как это salary calculation
сделано.Это делается в соответствии с математическим уравнением, которое находится внутри класса Employee.
Поэтому он не может самостоятельно рассчитывать и вводить зарплату.Но мы позволили ему увидеть окончательную зарплату.Мы создаем метод для получения значения зарплаты внутри класса сотрудников.это
public int getSalary()
{
return salary;
}
Он знает, что есть два метода, которые он может использовать для доступа к этим скрытым полям.set method and get method.
Итак, он call getmethod.
да, он can see
информация salary
.Потому что мы создали метод getMethod для возврата зарплаты.Теперь он пытается использовать заданный метод, чтобы ввести новую сумму заработной платы, чтобы изменить текущее значение заработной платы.поэтому он звонит e.setSalary(1000);
но выдает ошибку.Зачем?потому что в классе работника нет метода, записанного как
public void setSalary(int newSalary)
{
salary=newSalary;
}
Мы специально не писали этот код, потому что не хотим, чтобы он сразу устанавливал значение зарплаты.Таким образом, мы скрыли некоторую информацию, но некоторые мы все еще позволяем ему доступМы дали ему доступ к Read only
.Но not Write
для зарплаты.
, так что теперь, когда мы сделали инкапсуляцию, было бесполезно.
Так же, как ему разрешено set
эти поля woked_hours, OT and leaves
.для этих полей мы дали ему доступ только для записи.Там мы намеренно не пишем getter methods
.Если вы пишете и getter
, и setter, вы разрешаете ему READ/ Write
оба доступа.
Не имеет значения только установить или получить, поле является закрытым, поле скрыто, а данные скрыты.Но некоторый доступ предоставляется через getters
и setters
.