Различная форма инкапсуляции - PullRequest
3 голосов
/ 11 октября 2019

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

Пример:

public class Student {
  private String name;
  private int id;

  public void setName(String name){
    name = this.name;
  }

  public void setID(int Id){
    id= this.id;
  }

  public String getName(){
   return name;
  }

  public int getID(){
    return id;
  }
}

Но если бы я написалэтот код следующим образом, могу ли я сказать, что этот класс следует концепции инкапсуляции?

Поскольку здесь мы возвращаем имя отдела с помощью открытого метода.

public class Student {
  private department;

  public String getDepartmentOfStudent(String name){
  // write java code to get department name based on name from DB 

    return  department;
  }
}

Случай II: Если частная переменная department не был объявлен и просто возвращает значение, полученное из БД. Можно ли сказать, что этот класс следует за инкапсуляцией?

Ответы [ 5 ]

1 голос
/ 11 октября 2019

Чтобы ответить на оба вопроса, нам нужно принять во внимание концепцию инкапсуляции

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

Итак, мы можем сказать ДА, это так;поскольку клиент, использующий информацию, предоставленную Student, не знает, как извлекать / обрабатывать и возвращать значение department, он просто знает, что из обращения к getDepartmentOfStudent будет String результат,На самом деле все равно, поступает ли он из базы данных или из памяти, только Student знает об этом.

1 голос
/ 11 октября 2019

Да, ваш код соответствует инкапсуляции. В инкапсуляции переменные объекта не могут быть напрямую доступны и изменены любым другим объектом.

В случае II:

Если частная переменная "отдела" не была объявлена ​​и нет других открытых переменныхв вашем классе, тогда да, у вас есть инкапсуляция, так как переменные или данные класса не могут напрямую доступны другому классу.

1 голос
/ 11 октября 2019

Для обоих случаев ответ также «Да». Это потому, что ваша переменная частного поля не доступна напрямую другим классам (например, объявив ее как public String department). Accessible department по-прежнему контролируется путем к коду public String getDepartmentOfStudent(String name), который играет роль публичного получателя.

1 голос
/ 11 октября 2019

Getter получает свои имена из-за его функциональности, что он возвращает некоторые личные атрибуты не по его имени. Например: getName() или getAge().

Если метод с именем abc() возвращает какой-либо частный элемент / атрибут данных, то это метод получения.

1 голос
/ 11 октября 2019

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

=> Обычно getter и setter являются публичными. переменные являются личными.

Случай II: если бы частная переменная "отдела" не была объявлена ​​и просто возвращала значение, полученное из БД, мы бы сказали, что этот класс следует за инкапсуляцией?.

=> Да,это все еще инкапсуляция. Не обязательно иметь и getter и setter для каждой переменной. Так как вы устанавливаете данные в переменную, не имеет значения.

Инкапсуляция определяется как упаковка данных в одном блоке. Это механизм, который связывает воедино код и данные, которыми он манипулирует. Другой способ думать об инкапсуляции - это защитный экран, который предотвращает доступ данных к коду вне этого экрана.

1 - Техническив инкапсуляции переменные или данные класса скрыты от любого другого класса и могут быть доступны только через любую функцию-член собственного класса, в которой они объявлены. 2 - Как и в случае инкапсуляции, данные в классе скрыты от других классов, поэтому они также известны как скрытие данных. 3 - Инкапсуляция может быть достигнута: объявлением всех переменных в классе как закрытых и написанием открытых методов в классе для установки и получения значений переменных.

Источник: - https://www.geeksforgeeks.org/encapsulation-in-java/

...