Иногда Вам может понадобиться провести регистрацию всех объектов, соединенных с данным объектом посредством портов. Это может использоваться впоследствии для "прямого общения" этих активных объектов: если у объекта есть список соединенных с ним объектов, то он может напрямую взаимодействовать с этими объектами, вызывая функции этих объектов, изменяя значения их параметров и т.д. Список соединенных объектов может быть использован и в качестве списка адресов при адресации сообщений каким-то определенным получателям.
Регистрация объектов может быть реализована различными способами. Следующий способ является простейшим: при запуске модели каждый активный объект посылает регистрационное сообщение, идентифицирующее этот объект (содержащее ссылку на самого себя), по всем соединениям порта этого объекта. Порт, получивший это сообщение, должен будет извлечь информацию о пославшем это сообщение объекте и сохранить ее в списке соединенных объектов.
Чтобы реализовать регистрацию соединенных объектов


Давайте изучим только что введенный код. Вначале идет конструктор класса, который по сути вызывает стандартный конструктор базового класса Port.
Метод receive()вызывается при получении сообщения. Здесь происходит проверка типа прибывшего сообщения. Если это регистрационное сообщение, то его отправитель будет добавлен в список соединенных объектов (наша коллекция connectedObjects). Если нет - то сообщение продолжит обрабатываться в соответствии с логикой модели.
Метод register() производит посылку регистрационного сообщения, содержащего ссылку на активный объект, возвращаемую методом порта getActiveObject().
Теперь мы закончили реализацию механизма регистрации соединенных объектов. Работать с содержимым списка объектов connectedObjects можно так же, как и с любой другой коллекцией, используя программный интерфейс коллекции.
Объект может иметь несколько портов. В этом случае Вам нужно будет
составить список соединенных с портом портов, а не объектов, чтобы
иметь возможность различать сообщения, приходящие от разных портов
одного объекта. Чтобы реализовать регистрацию портов, нужно
сделать незначительные изменения в описанном выше механизме: Ваш класс
порта должен иметь поле port типа MyPort, и метод register() должен посылать ссылку не на активный объект, а на сам порт-отправитель, которую можно получить с помощью оператора this.