Заведём жабу? Часть 6.

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

Страшное слово «Инкапсуляция» — представляет собой всего лишь сокрытие реализации. Если вы попробуете присмотреться, вы увидите слово «капсула». Каждый объект не должен выставлять наружу все свои параметры для изменения просто так. Это изоляция (скрытие) внутренних методов в классе с целью избежания вредного воздействия на них. При этом некоторые методы являются доступными для вызова (модификатор доступа public). Вместе эти методы создают интерфейс программа — видимые внешнему миру. Эти методы взаимодействуют со скрытыми.

 

Программисту, использующему наш класс, доступна только та часть, которая обведена пунктиром — нужные методы интерфейса, которые возвращают необходимый результат. К внутренним классам у него нет доступа. А уже с внутренними методами взаимодействует только интерфейс — он обращается к внутренним методам и получает какой-то результат. Это нужно для того, чтобы программист, использующий наш класс, не мог вмешаться во внутренние процессы класса.

Ну и для облегчения взаимодействия с классом. Пример -мобильный телефон, мы знаем, что он звонит, отправляет смс, проигрывает музыку. Но над тем, как он работает, как посылает/принимает сигнал, как получает авторизацию у мобильного оператора, как переключается между сетями  — об этих моментах мы не задумываемся, просто знаем, что он умеет и как этим пользоваться.

Можно сказать телефон инкапсулировал реализацию. Пользователю доступна только видимая часть, остальное ему не нужно и не доступно. Одно из главных правил — скрывать или инкапсулировать реализацию, а наружу выставляются только необходимые функции.

Теперь откроем наш класс Computer. Внутри методов on(); off(); load(); внутри никакой сложной реализации нет, мы просто выводим информацию на экран. Теперь изменим внутреннюю реализацию так, чтобы один из public-методов вызывал внутренний метод. Для создания внутреннего метода мы используем модификатор доступа private.  Пусть наш метод выводит на экран данные, которые будут передаваться в этот метод.


private void print (String str){
   
  System.out.println(str);

}

Наш метод ничего не будет возвращать, просто выводить данные на экран, поэтому его тип будет void. Название нашего метода — print. В качестве параметра ему будет передаваться строка, а для того, чтобы передать строку, тип нашего параметра должен быть String. str — сам параметр (контейнер, переменная) в которую мы отправляем данные. В фигурных скобках команда для вывода на экран, а вместо надписи в кавычках пишем название переменной — str.

Когда мы будем вызывать метод print и передавать какое-либо текстовое значение — оно у нас будет выводиться на экран.

Теперь изменим наши методы onn, off и load, чтобы они не сами выводили надпись, а передавали нашему внутреннему методу print свой текст.


  public void on(){
                   
       print("Я включился " + name);  
        
    }
    
      public void off(){
        
      print("Я выключился");  
          
    }
    
     public void load(){
         
      print("Я загружаюсь. Мой объём жесткого диска равен " + hdd + " ГБ");  
        
    }
     
  private void print (String str){
   
      System.out.println(str);
}

Теперь текст на экран выводит отдельный метод, который недоступен для внешнего пользования, поскольку у него модификатор доступа private. Метод print не доступен из файла MyFirstProgram.java, поскольку имеет модификатор private. Если мы запустим программу — она выведет те же самые значения, что и ранее. То есть функционал класса не поменялся, но изменилась внутренняя реализация.

В классе MyFirstProgram ничего не поменялось — это простейший пример интерфейса. При изменении внутренней реализации — для пользователя изменения незаметны.

В Netbeabs есть одно свойство, которое позволяет быстро просмотреть интерфейс любого класса, а аткже всю его внутреннюю реализацию. Для этого следует перейти в окно «Навигатор» (Меню Окно — Навигация — Навигатор). В навигаторе доступны все методы нашего класса. Методы, отмеченные замком слева означает private-метод, то есть скрытый метод. У метода print как раз такой значок в виде звонка. Метод print имеет модификатор доступа private.

Методы on(); off(); и load(); не имеют замка — данные методы имеют модификатор доступ public. Также отображаются переменные нашего класса. И в классе они также имеют модификатор доступ private. Переменные обозначаются синими квадратиками, а методы обозначаются кружками. Снизу можно переключать область видимости, например, чтобы сделать доступными только публичные методы. Можно также скрыть переменные. Если щелкнуть два раза по методу или переменной в навигаторе — курсор автоматически перейдёт к этой переменной или методу в самом коде.

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

Вы можете следить за ответами к этой записи через RSS 2.0 ленту.Вы можете оставить ответ, или архив с вашего сайта.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *