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

Автор: content Понедельник, Апрель 9th, 2012 Нет комментариев

Рубрика: Язык Java

Основой инкапсуляции в Java является класс. Класс определяет данные и код некоторого набора объектов. Объект является экземпляром класса. Таким образом, класс — это логическая конструкция, а объект – физическая реальность.

При составлении класса код и данные необходимо специфицировать. Все эти элементы называют членами класса. Члены-переменные или переменные экземпляра являются данными. Члены методы или просто методы – код, оперирующий этими данными.

Цель класса – инкапсуляция сложности. Для этого у методов и переменных внутри класса могут быть модификаторы доступа (public, private).

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

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

Модификатор доступа Область доступа
public Без ограничений
private Только из данного класса
protected Из данного класса и его потомков
Без модификатора Для всех классов данного пакета

Открытые члены класса составляют внешнюю функциональность, которая доступна другим классам. Закрытыми (private) обычно объявляются независимые от внешнего функционала члены, а также вспомогательные методы, которые являются лишь деталями реализации и неуниверсальны по своей сути. Благодаря сокрытию реализации класса можно менять внутреннюю логику отдельного класса, не меняя код остальных компонентов системы.

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

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

Автоупаковка (outboxing)

В Java 2 5.0 введена автоупаковка примитивов. Автоупаковка – это процесс автоматической инкапсуляции данных примитива (простого типа) в эквивалентную объектную оболочку типа. Автоупаковка примитива в объектную оболочку требуется потому, что примитивы лежат вне иерархии классов. Чаще всего процесс автоупаковки необходим при работе с коллекциями, так как коллекции оперируют объектами.

До появления автоупаковки процесс упаковки производился вручную с помощью операции new, например:

Integer iOb = new Integer(100);

С помощью автоупаковки, введенной в версии 5.0 создание объекта явно не происходит, инкапсуляция происходит автоматически:

Integer iOb = 100;

При этом нет необходимости в явном создании объекта нужного типа.

Источник: http://www.javaportal.ru/java/articles/incinjava.html
Автор: Загребин Виктор Александрович

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты