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

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

Вы можете изучить использование параметров типа на примере объектов Библиотеки Моделирования Процессов, поскольку почти у каждого объекта этой библиотеки есть параметры типа. Рассмотрим, например, объект 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 для экспертов этого типа агентов, установите флажок Параметризованный тип и введите список имен параметров типа в поле Пaраметры типа ниже, например: T, T1.
  2. Теперь если вам понадобится использовать внутри типа параметр неопределенного типа, вы можете написать в качестве имени типа имя объявленного ранее параметра этого типа. Обычно это требуется при задании параметров и аргументов функций.
  3. Во всех экземплярах этого типа агентов, перейдите в панель Свойства и введите список фактических имен Java классов, которые будут использоваться в данном экземпляре типа вместо ранее заданных в типе имен - "заглушек", в поле, имя которого было указано в параметре Метка (в секции свойств Java для экспертов типа агентов), например: Teller, Customer. Имена фактических типов параметров должны быть перечислены в том же порядке, в каком вы перечисляли имена соответствующих им "заглушек": в описанном выше примере все параметры типа T в данном агенте будут восприниматься как параметры типа Teller, а все параметры T1 - как Customer.