Порты используются в библиотечных блоках в качестве интерфейсных элементов, через которые агенты (заявки) передаются между блоками по диаграмме процесса. Способы пересылки агентов (заявок) через порт описаны здесь.
Чтобы добавить в объект порт
- Перетащите элемент Порт из палитры Агент в то место графического редактора, где вы хотите его нарисовать.
- Основные
-
Имя — Имя порта. Имя используется для идентификации порта и доступа к нему из кода.
Отображать имя — Если опция выбрана, то имя порта будет отображаться в графическом редакторе.
Исключить — Если опция выбрана, то порт будет исключен из модели.
Отображается на верхнем агенте — Если опция выбрана, то порт будет виден на презентации типа агента, в который будет вложен данный объект.
Видимость — Если опция выбрана, то порт будет отображаться на презентации во время выполнения модели.
- Действия обработки сообщений
-
Действие при получении — Код, выполняемый при получении сообщения (при вызове пользователем метода receive() этого порта, или при поступлении в порт сообщения из порта вложенного объекта). Только что полученное сообщение доступно здесь как msg (локальная переменная типа Object).*
Действие при отправке — Код, выполняемый при отправке сообщения (при вызове пользователем метода send() этого порта, или при поступлении в порт сообщения из порта агента, находящегося выше или на том же уровне иерархии, что и агент-владелец этого порта). Сообщение доступно здесь как msg (локальная переменная типа Object).*
* Если поле будет оставлено пустым, или введенный в поле код будет возвращать true, то сообщение будет перенаправляться дальше согласно правилам пересылки сообщений, в противном случае оно будет уничтожено.
- Специфические
-
Порт пользовательского класса — Если опция выбрана, то порт будет экземпляром пользовательского класса порта, вызов конструктора которого должен быть написан в поле Код конструктора.Такая возможность требуется в том случае, если у вас в модели(моделях) несколько портов с одинаковой нестандартной функциональностью (например, одинаковое Действие при получении сообщений), и вы хотите задать эту функциональность только один раз с помощью своего класса порта, а в дальнейшем просто создавать экземпляры этого класса.
Тип входящего сообщения — Тип сообщений, которым разрешено поступать в этот порт. Сообщения, которые не смогут быть приведены к указанному типу, будут проигнорированы и удалены. Если вы оставите в поле Object, то фильтрация сообщений по типу производиться не будет и портом смогут приниматься сообщения всех типов.
Тип исходящего сообщения — Тип сообщений, которым разрешено отсылаться через этот порт. Сообщения, которые не смогут быть приведены к указанному типу, будут проигнорированы и удалены. Если вы оставите в поле Object, то фильтрация сообщений по типу производиться не будет и через порт смогут посылаться сообщения всех типов.
Вы можете изменить поведение порта, задав Действие при получении и Действие при отправке сообщений. Однако, если заданная вами функциональность требуется сразу в нескольких портах, то лучше создать свой класс порта. Тогда вместо написания одного и того же кода в свойствах всех портов в вашей модели, вам нужно будет просто создать свой класс порта и сделать порты в вашей модели экземплярами этого класса.
Чтобы создать класс порта
- В панели Проекты, щелкните правой кнопкой мыши по модели и выберите Создать > Java класс… из контекстного меню.
- Откроется диалоговое окно Новый Java класс.
- Введите имя нового класса в поле Имя.
- Задайте имя базового класса. Введите Port в поле Базовый класс. Класс Port является базовым классом для всех классов портов в AnyLogic. Этот класс обеспечивает основную функциональность по отправке и приему сообщений, и если вы хотите изменить заданное по умолчанию поведение порта, создав свой собственный класс порта, то вам нужно будет унаследовать его от класса Port.
- Щелкните мышью по кнопке Готово.
- Вы увидите окно редактора кода только что созданного класса. Здесь вы можете редактировать код вашего класса порта, например, переопределить какие-то функции базового класса Port.
- Когда вы закончите, нужно будет сделать те порты, которые должны обладать функциональностью созданного класса, экземплярами этого класса.
Вы можете создать класс порта не только так, как это описано здесь, с помощью Java класса, но и во внешнем файле или в библиотеке. Создавая класс в библиотеке или во внешнем файле, вы сможете в дальнейшем использовать этот класс и в других моделях.
Чтобы сделать порт экземпляром созданного класса порта
- Выделите порт на диаграмме.
- Перейдите в секцию Специфические панели свойств порта и установите флажок Порт пользовательского класса.
- В поле Код конструктора добавьте вызов конструктора созданного класса порта, например, MyPort(this)
-
Как мы можем улучшить эту статью?
-