AnyLogic
Развернуть
Размер шрифта

Параметры типа

У типа агентов могут быть объявлены параметры типа. Параметры типа позволяют абстрагироваться от конкретных типов. С их помощью вы можете настроить ваших агентов под конкретную задачу и таким образом существенно повысить гибкость вашего типа агента.

Вы можете изучить использование параметров типа на примере объектов Библиотеки Моделирования Процессов, поскольку почти у каждого объекта этой библиотеки есть параметры типа. Рассмотрим, например, блок Delay. Этот объект используется для моделирования того, как проходящие через этот блок агенты задерживаются на заданный промежуток времени.

Пусть в вашей модели все агенты — экземпляры одного и того же типа Customer (унаследованного от базового типа Agent), у которого есть свои собственные параметры. Предположим, что вы хотите выполнить какие-то действия в коде параметра действие При выходе, например, сохранить время задержки этого блока Delay в параметре serviceTime (этот параметр задан в типе агента Customer). Однако, хоть агенты в потоке теперь и будут типа Customer, блоки диаграммы процесса будут продолжать считать их агентами типа Agent и не позволят явно обращаться к дополнительной функциональности типа Customer.

Чтобы разрешить доступ к полям нестандартного типа агента в коде динамических параметров объектов потоковой диаграммы, вам нужно указать имя нестандартного типа агента в качестве Типа агента этого блока. Но вполне естественно, что вы не хотите явно приводить агентов к их фактическому типу каждый раз, когда вам нужно получить доступ к полям нестандартного типа в коде динамических параметров блока.

Раньше в таком случае вам пришлось бы написать ((Customer)agent).serviceTime = delayTime. Теперь же, если вы знаете, что через блок Delay будут проходить только агенты типа Customer, вы должны написать Customer в поле Тип агента этого блока Delay (так у этого блока называется поле задания параметров типа). Тогда вы сможете написать код agent.serviceTime = delayTime в действии блока При входе. Объявив параметр типа у блока Delay, вы как бы говорите блоку, что переменная agent, доступная в динамических параметрах этого блока, является экземпляром типа Customer, так что ее нестандартные поля (заданные в этом типе) будут доступны из кода напрямую.

Обратите внимание, что если какие-то агенты в вашем потоке агентов имеют тип Customer, а какие-то — скажем, Staff, то вы должны оставить в качестве параметра типа (Тип агента) значение по умолчанию (Agent) и самостоятельно анализировать тип поступающего агента, написав, например, if(agent instanceof Customer) ((Customer)agent).serviceTime = delayTime.

Чтобы объявить у типа агентов параметры типа

  1. Перейдите в секцию свойств Java для экспертов этого типа агентов, установите флажок Параметризованный тип и введите список имен параметров типа в поле Параметры типа ниже, например: T, T1.
  2. Теперь если вам понадобится использовать внутри типа параметр неопределенного типа, вы можете написать в качестве имени типа имя объявленного ранее параметра этого типа. Обычно это требуется при задании параметров и аргументов функций.
  3. Во всех экземплярах этого типа агентов, перейдите в панель Свойства и введите список фактических имен Java классов, которые будут использоваться в данном экземпляре типа вместо ранее заданных в типе имен — "заглушек", в поле, имя которого было указано в параметре Метка (в секции свойств Java для экспертов типа агентов), например: Teller, Customer. Имена фактических типов параметров должны быть перечислены в том же порядке, в каком вы перечисляли имена соответствующих им "заглушек": в описанном выше примере все параметры типа T в данном агенте будут восприниматься как параметры типа Teller, а все параметры T1 — как Customer.
Как мы можем улучшить эту статью?