52
ГЛАВА 3. ОБЪЕКТЫ
мусора, с одной стороны, помогает справляться с проблемой утечки
ресурсов; с другой стороны, не позволяет точно предсказать произво-
дительность Java приложений
4
. В Java есть конструкторы, в том числе
и конструкторы по умолчанию, но нет явных деструкторов. Для обес-
печения операций клонирования в языке и языковой библиотеке есть
специализированный механизм, а для освобождения ресурсов объекта
перед удалением используется специализированный метод finalize().
Для высвобождения ресурсов при работе распределенных Java прило-
жений,в частности основанных на использовании JavaRMI, существу-
ет механизм удаленной сборки мусора.
Следует упомянуть, что в Java нет свободных подпрограмм (функ-
ций).Для реализации эквивалентной функциональности можно (и нуж-
но) пользоваться статическими методами классов-утилит
5
. Желатель-
но использовать подобный подход и в C++, так как он способствует
более легкой расширяемости программного продукта.
К сожалению, в Java нет средств языковой поддержки защиты дан-
ных при написании функций-селекторов
6
.Внимательный читатель мо-
жет обнаружить,что в таких классах стандартной библиотеки Java, как
String, Integer, Float и подобных, попросту отсутствуют методы позво-
ляющие изменить содержимое объекта.
3.3.2 Роли объектов
Совокупность всех методов и свободных процедур, относящихся к кон-
кретному объекту, образуют протокол этого объекта. Протокол, таким
образом, определяет поведение объекта, охватывающее все его ста-
4
Современные реализации Java машины, такие например как Java HotSpot версии
1.3.1 от фирмы Sun, имеют достаточно мощный адаптивный алгоритм реализации
сборщика мусора
5
Класс-утилита это класс, в котором присутствуют только статические методы вы-
полняющие роль обычных алгоритмов или подпрограмм
6
Это связано с особенностями платформы, и, в частности, с тем, что в Java нет
объектов
, создаваемых в автоматической памяти (на стеке). Переменные могут быть
только встроенных или ссылочных типов
.