Можете ли вы помочь мне понять инкапсуляцию, пожалуйста (начинающий)?

Я использовал книгу по Java, которая до сих пор была превосходной, но она не очень хорошо объясняла причину, по которой мы используем сеттеры и геттеры. Я искал другие сообщения, но ни один из них не помог мне конкретно. Я просто выложу программу из книги и объясню свои проблемы с ней.

   package lesson1;
public class GoodDog {
   private int size;

   public void setSize(int sz){
      if(sz > 10){
         size = sz;
      }
   }
   public int getSize(){
     return size;
   }
}

Второй класс:

   package lesson1;
public class GoodDogTestDrive {

   public static void main(String[] args) {
      GoodDog one = new GoodDog();
      one.setSize(15);
      System.out.println(one.getSize());
   }
}

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

Во всяком случае, я понимаю, что инкапсуляция (для меня это в основном означает геттеры и сеттеры) предотвращает прямой доступ к мгновенным переменным. Единственная веская причина для этого заключается в том, что некоторые значения мгновенных переменных нельзя допускать.

Например, у нас есть int height; (Мгновенная переменная) Нельзя сказать, что object.height = 0; («объект» — случайная ссылочная переменная). В моей маленькой программе это просто высота собаки с простым ограничением. Это не имеет смысла, но я просто пытаюсь понять эту концепцию. Инкапсуляция просто предназначена для фирм, занимающихся программированием, когда программистам нужно использовать код друг друга. скажем, сделать игру например или это другое?

Я посмотрел видео, в котором также говорилось, что это просто упрощает управление кодом. Однако я все еще не чувствую, что полностью понимаю эту концепцию. Может кто-нибудь, пожалуйста, объясните мне это простыми словами. Обратите внимание, что я новичок и не пойму примеры с промежуточным кодом.

Спасибо за помощь.


person Mr Spartacus    schedule 18.07.2014    source источник
comment
единственная роль геттеров-сеттеров, которую я нашел, была в java beans en.wikipedia.org/wiki/JavaBeans   -  person user2837260    schedule 18.07.2014
comment
ха-ха, я предполагаю, что толкаю это. Может быть, достаточно просто знать, для чего он в основном используется :) Простота? Скрытие кода? Может оба эти?   -  person Mr Spartacus    schedule 18.07.2014
comment
у вас есть специальные встроенные теги, которые могут сэкономить ваше время, если вы использовали правильные геттеры / сеттеры ... просто определите, как они должны быть, а jsp сделает все остальное ... вы не можете избежать их в jsp, но для нормального программирования вы можете определить функции как хочешь   -  person user2837260    schedule 18.07.2014
comment
Заголовок stackoverflow.com/questions/16418571/ см. это   -  person bumbumpaw    schedule 18.07.2014
comment
Нианг - Спасибо за ссылку, это очень помогло.   -  person Mr Spartacus    schedule 18.07.2014
comment
Спасибо за помощь мистер крассус   -  person Mr Spartacus    schedule 18.07.2014
comment
возможный дубликат Зачем использовать геттеры и сеттеры?   -  person elixenide    schedule 18.07.2014


Ответы (2)


Если я понимаю, о чем вы спрашиваете, вы можете рассматривать инкапсуляцию как практика использования функций сокрытия данных языка программирования. Один из основных принципов объектной ориентации заключается в том, что объекты содержат как данные, так и методы для работы с этими данными. Инкапсуляция — это общая интернализация данных, при которой только собственные методы объекта могут изменять состояние объекта.

person Elliott Frisch    schedule 18.07.2014
comment
Спасибо. Это имеет смысл для меня. - person Mr Spartacus; 18.07.2014
comment
Кроме того, при рассмотрении возможности использования объекта другими объектами либо в процессе (например, та же JVM), либо вне процесса (например, непрямой доступ через веб-службу), вышеуказанные концепции важны, поскольку они обеспечивают четко определенный контракт с разработчиками. По сути, автономная единица, если вы будете поощрять командное сотрудничество многоуровневым образом. - person Rai; 18.07.2014

Использование приватных переменных с геттерами и сеттерами дает ряд преимуществ:

  1. Позволяет ограничить доступ к данным, которые могут быть конфиденциальными
  2. Позволяет предпринимать действия при установке значения; например Увеличение счетчика
  3. Позволяет «ленивую инициализацию»; вы можете подождать, чтобы установить значение переменной, пока не будет вызван метод get, что может повысить производительность.
  4. Скрытие информации. Могут быть какие-то детали реализации, связанные с установкой или получением значения, которое не обязательно знать пользователю класса.
person Caleb Brinkman    schedule 18.07.2014