ситуации. Он имеет имя и набор именованных слотов. Слот может
быть не заполнен или заполнен, т. е. содержать конкретное значение,
процедуру или (ссылку на) другой фрейм. Несмотря на внешнюю
простоту этой идеи, она оказалась удивительно плодотворной, как в
смысле конкретной разработки искусственно интеллектуальных
программ, так и в смысле развития фундаментальных понятий в других
областях информатики и программирования.
Второй из рассмотренных случаев, т. е. когда на диаграмме подразумевается слот
объекта, подлежащий заполнению объектом, называется в UML ролью
классификатора.
124
Синтаксически роль классификатора и конкретный объект
почти неразличимы: в обоих случаях изображается стандартная фигура
классификатора (прямоугольник), в которой вписано имя и классификатор,
разделенные двоеточием. Различие заключается в том, что в случает роли
классификатора имя предлагается не подчеркивать.
ЗАМЕЧАНИЕ
К сожалению, данное тонкое семантическое различие многие инструменты
игнорируют и подчеркивают имя роли классификатора. В использованный при
подготовке книги трафарет Visio, хотя и правильно называет фигуру — Classifier
Role — но изображает ее неправильно, с подчеркиванием имени. Впрочем,
поскольку также поступают и многие другие инструменты, данная неправильность
стала уже правилом. Вообще говоря, вопрос о подчеркивании имени роли
классификатора является спорным. С одной стороны, это не конкретный объект: в
слот может быть подставлен любой подходящий объект (имя не нужно
подчеркивать), с другой стороны, это все-таки слот объекта (имя объекта). В таких
спорных случаях проще полагаться на инструмент (оставляя в уме собственное
мнение). В частности, на некоторых наших диаграммах имена подчеркнуты, а на
других — нет.
Семантически объект и слот объекта —это разные вещи. В случае конкретного
объекта имя — это личное имя объекта, а в случае роли классификатора имя — это
имя слота (или, как пишут авторы языка, имя роли, которую объект данного
классификатора играет во взаимодействии). Самое замечательное состоит в том,
что с прагматической точки зрения, это
и не важно: ведь схема взаимодействия
остается одной и той же, она не зависит от того, чем именно заполнен слот (лишь
бы там был объект подходящего класса и посылал те сообщения, которые от него
требуются).
Мы не уверены в абсолютной правомерности следующей аналогии, но все же
приведем ее. Мы надеемся, что следующие две фразы для читателей прозвучат как
цитаты (может из забытого источника). От перемены мест слагаемых сумма не
меняется: 2+3=3+2. Сложение коммутативно: a+b=b+a. Первый пример — это
экземпляр, второй — дескриптор. По нашему мнению, использование роли
классификатора на диаграмме взаимодействия аналогично использованию
алгебраической переменной a при описании арифметических законов.
Совершенно аналогично понятию роли классификатора вводится понятие роли
ассоциации. Отношения между объектами (ролями классификаторов) — это
124
Название, прямо скажем, не очень удачное, а потому трудно переводимое. Все-таки речь идет об
объекте, хотя и являющегося экземпляром определенного классификатора.