12.7. Сообщения 273
Сообщение создания объекта обычно изображается как сплошная ли
ния с открытой стрелкой. Создание объекта можно показать с помо
щью сообщения со стереотипом «create» (создать). Или можно послать
конкретное именованное сообщение создания объекта, которое также
может быть обозначено стереотипом «create». В C++, C# или Java опе
рации создания объектов являются специальными операциями, кото
рые называют конструкторами. Имя конструктора совпадает с именем
класса. Конструкторы не имеют возвращаемого значения, они могут
иметь от нуля и более параметров. Например, для создания нового
объекта Account можно было бы послать сообщение Account() и инициа
лизировать его атрибут accountNumber некоторым значением. Однако
конструкторы есть не во всех языках программирования. Например,
в Smalltalk было бы послано сообщение «create» init: accountNumber.
Сообщение уничтожения объекта показывают сплошной линией с от
крытой стрелкой и стереотипом «destroy» (уничтожить). Уничтожение
означает, что экземпляр классификатора, на который ссылается целе
вая линия жизни, больше не доступен для использования. Если у ли
нии жизни есть «хвост», он должен завершаться большим крестом
в точке уничтожения. Для уничтожения объектов нет возвращаемого
значения.
В разных языках программирования семантика уничтожения различ
на. Например, в С++ уничтожение обычно явно обрабатывается про
граммистом, и при уничтожении объекта гарантированно иницииру
ется специальный метод (если он существует), называемый деструкто
ром. Этот метод часто используется для проведения операций очистки,
таких как высвобождение ресурсов, например файлов или соединений
с базой данных. Вызов деструктора высвобождает память, выделен
ную под объект.
В таких языках программирования, как Java и C#, уничтожение объ
ектов обрабатывается виртуальной машиной с помощью механизма под
названием «сборка мусора». Например, если на объект Javaпрограммы
больше не ссылается ни один другой объект, он помечается как готовый
к уничтожению. Уничтожение произойдет в некоторый момент време
ни в соответствии с алгоритмом сборки мусора, но вы не знаете, когда
это случится! У объектов в Java и C# могут быть методы«финализато
ры», которые будут исполняться в момент реального уничтожения, осу
ществляемого сборщиком мусора. Однако использовать этот метод опас
но, потому что мы точно не знаем, когда сборщик мусора вызовет его.
12.7.3. Найденные и потерянные сообщения
Обычно в анализе найденные и потерянные сообщения могут быть
проигнорированы. Мы рассматриваем их здесь в основном для полно
ты обсуждения.
Найденные сообщения могут быть полезны, если необходимо показать
получение сообщения классом, но неизвестно (в данный момент време