Функции

AnyLogic позволяет пользователям создавать свои собственные функции. С помощью функций Вы можете единожды задать определенную последовательность действий (обычно - вычислений, возвращающих результат), которую нужно будет выполнять из разных мест (или в разные моменты жизни) модели. Функции пишутся на языке Java, поэтому в Вашем распоряжении имеются все преимущества этого языка, такие, как, например, условные операторы (if-then-else), циклические операторы (while, for), операторы ветвления (switch) и т.д. 

AnyLogic поддерживает диаграммы действий - структурированные блок-схемы, позволяющие задавать алгоритмы графически в стиле структурированного программирования. Диаграммы действий облегчают задание алгоритмов, делая необязательным знание синтаксиса Java операторов. Использование диаграмм действий дает еще одно преимущество: с их помощью Вы можете визуализировать алгоритмы, делая их более понятными для других пользователей модели.

AnyLogic поддерживает специальный тип функций – табличные функции. Табличная функция – это функция, заданная в табличной форме. Она может быть сделана непрерывной с помощью интерполяции и экстраполяции. Табличные функции обычно используются для задания сложных нелинейных зависимостей, которые не могут быть описаны с помощью стандартных функций, или для приведения собранных с какой-то периодичностью и заданных в виде таблицы экспериментальных данных к непрерывному виду.

 Чтобы задать функцию
  1. Перетащите элемент Функция  из палитры Основная на диаграмму класса активного объекта (или эксперимента).
  2. Перейдите на страницу Основные панели Свойства и задайте свойства функции.
  3. Введите имя функции в поле Имя
  4. Если Ваша функция только выполняет какие-то действия, но не возвращает никакого результат проведенных вычислений, укажите, что эта функция не возвращает ничего, выбрав в группе кнопок Тип возвращаемого значения void.
  5. Если Вам нужно, чтобы функция возвращала результат проведенных ею вычислений, то Вам нужно будет указать, какого типа будет возвращаемое значение. Функция может возвращать как значение одного из наиболее часто используемых типов (intdouble, booleanString), так и значение любого другого Java класса (в этом случае Вам нужно будет выбрать опцию Другой и ввести имя класса в расположенном справа поле).
  6. Функция может быть объявлена статической. Статическая функция не требует создания экземпляров того класса активного объекта, в котором она задана. Статическая функция мояфункция, объявленная в классе активного объекта MyClass, будет доступна из любого места модели как MyClass.мояфункция(). Чтобы сделать функцию статической, установите флажок Статическая.
  7. Перейдите на страницу Код панели Свойства и введите тело функции в поле Тело функции. Последняя строка должна возвращать значение с помощью оператора return:
    return <выражение, возвращающее значение заданного типа>;
Основные свойства

Имя – Имя функции

Отображать имя – Если опция выбрана, то имя функции будет отображаться в графическом редакторе.

Исключить – Если опция выбрана, то функция будет исключена из модели.

На презентации – Если опция выбрана, то функция будет отображаться на презентации во время выполнения модели.

Уровень доступа – Уровень доступа к функции. Есть четыре уровня доступа:
    private – функция доступна только из этого класса активного объекта
    protected
функция доступна из этого класса активного объекта и его подклассов
    default
функция доступна из любого места модели
    public
функция доступна из всех открытых моделей.

Статическая – Если опция выбрана, то функция будет статической. Статическая функция не требует создания экземпляров того класса активного объекта, в котором она задана. Статическая функция мояфункция, объявленная в классе активного объекта MyClass, будет доступна из любого места модели как MyClass.мояфункция().

Тип возвращаемого значения– Тип возвращаемого функцией значения. Если Вам нужно, чтобы функция возвращала результат проведенных ею вычислений, то Вам нужно будет указать здесь, какого типа будет возвращаемое значение. Функция может возвращать как значение одного из наиболее часто используемых типов (intdouble, booleanString), так и значение любого другого (и это уникальная особенность AnyLogic) Java класса (в этом случае Вам нужно будет выбрать опцию Другой и ввести имя класса в расположенном справа поле).
Если функция не возвращает ничего, выберите void.

Использовать единицы измеренияЕсли опция выбрана, то Вы можете задать единицы измерения для возвращаемого функцией значения (в расположенном справа поле Единица измерения). 

Аргументы функции – Здесь Вы можете задать аргументы функции, с помощью которых Вы сможете передавать функции данные, необходимые для вычислений. Каждый аргумент задается в отдельной строке таблицы. 

Код

Тело функции – Введите здесь тело функции. Функции пишутся на языке Java, поэтому в Вашем распоряжении имеются все преимущества этого языка, такие, как, например, условные операторы (if-then-else), циклические операторы (while, for), операторы ветвления (switch) и т.д. Также Вы можете оперировать здесь аргументами функции.
Последняя строка должна возвращать значение с помощью оператора return.

Аргументы функции

Если Вам будет нужно передавать функции какие-то данные, необходимые для проведения вычислений, Вы можете использовать для этого аргументы функции.

 Чтобы задать аргументы функции
  1. Выберите функцию в графическом редакторе или в панели Проект.
  2. Задайте аргументы в таблице Аргументы функции на странице Основные панели Свойства. Каждый аргумент задается в отдельной строке таблицы. 
  3. Введите имя аргумента в ячейке Имя.
  4. Укажите тип аргумента в ячейке Тип. Щелкните мышью в ячейке и выберите нужный Вам тип из выпадающего списка, либо же введите его самостоятельно.

Если Вы зададите у функции аргументы, то при каждом вызове этой функции Вам будет нужно передавать ей значения этих аргументов (в том же порядке, в каком они заданы в таблице Аргументы функции).

AnyLogic позволяет изменять порядок следования аргументов в таблице с помощью кнопок    и  . Чтобы удалить аргумент, выделите соответствующую строку в таблице и щелкните по кнопке .

Уровень доступа к функции

По умолчанию функции могут вызываться из любого места модели, в которой они заданы. Вы можете ограничить доступ к функции, изменив ее уровень доступа с помощью выпадающего списка Уровень доступа.

Есть четыре уровня доступа:

private – функция доступна только из этого класса активного объекта

protectedфункция доступна из этого класса активного объекта и его подклассов

defaultфункция доступна из любого места модели

publicфункция доступна из всех открытых моделей.


См. также

 Визуальное задание алгоритмов с помощью диаграмм действий

 Табличные функции