Программирование на Java

         

Предназначение модификаторов доступа - часть 2


Напротив, если бы поле было объявлено как private, а для чтения и изменения его значения были бы введены дополнительные методы, ситуация поменялась бы в корне:

public class Human { private int age; // метод, возвращающий значение age public int getAge() { return age; } // метод, устанавливающий значение age public void setAge(int a) { age=a; } }

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

Получение величины возраста выглядело бы следующим образом:

human h = getHuman(); int i=h.getAge(); // обращение через метод

Рассмотрим, как выглядит процесс смены типа поля age:

public class Human {

// поле получает новый тип double private /*int*/ double age;

// старые методы работают с округлением // значения

public int getAge() { return (int)Math.round(age); } public void setAge(int a) { age=a; } // добавляются новые методы для работы // с типом double

public double getExactAge() { return age; } public void setExactAge(double a) { age=a; } }

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

human h = getHuman(); int i=h.getAge(); // корректно

остается верным, переменная i получает корректное целое значение. Однако изменения вводились для того, чтобы можно было работать с дробными величинами. Для этого были добавлены новые методы и во всех местах, где требуется точное значение возраста, необходимо обращаться к ним:

human h = getHuman(); double d=h.getExactAge(); // точное значение возраста

Итак, в класс была добавлена новая возможность, не потребовавшая никаких изменений кода.




Содержание  Назад  Вперед