Параметры класса

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

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

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

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

Пожалуйста, обратите внимание, что если какие-то заявки в Вашем потоке заявок имеют тип Customer, а какие-то - скажем, Staff, то Вы должны оставить в качестве параметра класса (Класс заявки) значение по умолчанию  (Entity), и самостоятельно анализировать класс поступающей заявки, написав, например if(entity instanceof Customer) ((Customer)entity).serviceTime = delayTime.

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

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