Spiral group
_________________________________________________________________________________
< Раздел “Язык Java” > <
Раздел “Технологии Java” > < Основная страница >
Инкапсуляция
в Java
Статья опубликована: 12.04.2006
Основой инкапсуляции в Java является класс. Класс определяет данные и код некоторого набора объектов. Объект является экземпляром класса. Таким образом, класс - это логическая конструкция, а объект – физическая реальность.
При составлении класса код и данные необходимо специфицировать. Все эти элементы называют членами класса. Члены-переменные или переменные экземпляра являются данными. Члены методы или просто методы – код, оперирующий этими данными.
Цель класса – инкапсуляция сложности. Для этого у методов и переменных внутри класса могут быть модификаторы доступа (public, private).
Инкапсуляция означает, что данные объекта недоступны его клиентам непосредственно. Вместо этого они инкапсулируются — скрываются от прямого доступа извне. Инкапсуляция предохраняет данные объекта от нежелательного доступа, позволяя объекту самому управлять доступом к своим данным.
Модификаторы доступа Модификаторы доступа можно рассматривать как с позиции инкапсуляции так и наследования. Если рассматривать с позиции инкапсуляции, то модификаторы доступа позволяют ограничить нежелательный доступ к членам класса извне.
Модификатор доступа |
Область доступа |
public |
Без ограничений |
private |
Только из данного класса |
protected |
Из данного класса и его потомков |
Без модификатора |
Для всех классов данного пакета |
Открытые члены класса составляют внешнюю функциональность, которая доступна другим классам. Закрытыми (private) обычно объявляются независимые от внешнего функционала члены, а также вспомогательные методы, которые являются лишь деталями реализации и неуниверсальны по своей сути. Благодаря сокрытию реализации класса можно менять внутреннюю логику отдельного класса, не меняя код остальных компонентов системы.
Очень
часто программистами используется доступ к свойствам класса только через его
методы (принцип bean
классов), который позволяет валидировать значения
полей, так как прямое обращение к свойствам отслеживать крайне сложно, а значит им могут присваиваться некорректные значения на этапе
выполнения программы. Такой принцип относится к управлению инкапсулированными
данными и позволяет быстро изменить способ хранения данных. Если данные станут
храниться не в памяти, а в файлах или базе данных, то потребуется изменить лишь
ряд методов одного класса, а не вводить эту функциональность во все части
системы.
Программный
код, написанный с использованием этого принципа легче отлаживать. Для того
чтобы узнать, в какой момент времени и кто изменил свойство интересующего нас
объекта, достаточно добавить вывод отладочной информации в тот метод объекта,
посредством которого осуществляется доступ к свойству этого объекта. При
использовании прямого доступа к свойствам объектов программисту бы пришлось
добавлять вывод отладочной информации во все участки кода, где используется
интересующий нас объект.
Автоупаковка (outboxing)
В Java 2 5.0 введена
автоупаковка примитивов. Автоупаковка
– это процесс автоматической инкапсуляции данных примитива (простого типа) в
эквивалентную объектную оболочку типа. Автоупаковка
примитива в объектную оболочку требуется потому, что примитивы лежат вне
иерархии классов. Чаще всего процесс автоупаковки
необходим при работе с коллекциями, так как коллекции оперируют объектами.
До
появления автоупаковки процесс упаковки производился
вручную с помощью операции new, например:
Integer iOb = new Integer(100);
С
помощью автоупаковки, введенной в версии 5.0 создание
объекта явно не происходит, инкапсуляция происходит автоматически:
Integer iOb = 100;
При этом нет необходимости в явном создании объекта нужного типа.
Ссылки:
1. Шилдт Г. Java 2, v5.0 (Tiger). Новые возможности: Пер. с англ. – СПб.: БХВ-Петербург, 2005. – 208 с.
Автор: |
< Раздел “Язык Java” > < Раздел “Технологии Java” > < Основная страница >