Как мы убедились, AnyLogic позволяет быстро создавать модели из базовых графических компонентов в режиме drag-and-drop. Поэтому простые модели могут быть готовы уже через несколько минут после начала их разработки. Однако разработка реально полезных моделей всегда требует использования в той или иной степени программного кода.
Необходимость использования программного кода является свойством всех инструментов моделирования: в любом из них для разработки серьезной модели требуется писать код на встроенном в этот симулятор языке программирования — либо на специализированном языке, либо на одном из универсальных языков программирования, с которым интегрирован симуля-тор. "Нормальной считается ситуация, когда после 10 минут манипуляции мышкой программист будет 10 часов писать и отлаживать тексты программ, которые придадут модели все желаемые им свойства", — замечает один из экспертов в области имитационного моделирования [ЮТ02]. Некоторые авторы считают, что разработчику имитационных моделей абсолютно необходимо профессиональное знание программирования: "Работа в области при-кла дной математики без уверенного владения техникой программирования не только бессмысленна, но и опасна (и для общества, и для самого горе-специалиста). К сожалению, в последнее десятилетие увлечение "информационными технологиями" и демагогия о "непрограммирующих пользователях"заметно ухудшили программист-ску ю подготовку будущих математиков и инженеров" [ЮР04].
Конечно, без использования программного кода разработать полезную ими-тационную модель нельзя. Однако вопрос заключается в том, сколько строк кодa нужно писать при разработке модели, насколько сложной является интеграция программного кода в среду разработки, до какого уровня разработчик моделей, который обычно не является программистом, должен знать тон-кости программирования на базовом языке симулятора и т. п. В AnyLogic базовым языком, совмещенным со средой разработки моделей, является Java.
Включение программного кода в модель в AnyLogic является органичным и естественным, тексты языка Java интегрируются в модель чрезвычайно просто и элегантно. Если разработчик глубоко владеет приемами программирования, то он может с успехом использовать при построении модели всю мощь языка. Однако для построения даже сложных моделей на AnyLogic от разработчика требуются лишь самые общие, поверхностные знания об алгоритмизации и программировании, которые позволят ему построить фра--менты кода на языке Java в специально определенных полях.
Не пытаясь заменить существующие многочисленные руководства по языку Java, мы очень кратко рассмотрим в этой главе лишь некоторые типы данных, правила синтаксиса, операторы и базовые концепции этого языка, не обходимые для того, чтобы разработчик моделей на AnyLogic яснее понимал возможности данного инструмента и те ограничения (в основном, синтак сические), которые необходимо соблюдать при включении фрагментов Ko гда в модель.
Примитивные типы данных и переменные
В языках программирования используются данные и операции над ними. Данные в Java могут быть примитивными (базовыми, не структурными) и сложными, которые строятся из других типов данных.
Числовые типы
Любая переменная в Java должна иметь объявленный тип. Целые переменные в Java могут быть нескольких типов, но в большинстве моделей для целых переменных достаточно использовать только тип int. В Java для величины этого типа на любой платформе отводится 32 разряда, потому целые переменные типа int могут иметь диапазон порядка ±2*109. Целые константы записываются всегда без точки.
Для вещественных переменных наиболее практичным при построении моделей является использование типа double, что дает достаточную точность представления.
При построении модели на AnyLogic для вводимых в окне графического редактора переменных и параметров нужно выбрать из выпадающего меню тип — integer, real или boolean, хотя разработчик может использовать любой тип — либо любой из примитивных типов языка Java, либо сложный, определенный пользователем. Типы integer и real в действительности в программе на Java будут представлены как примитивные типы int и double. Названия integer и real используются в AnyLogic для удобства, их можно использовать, только когда они предлагаются в выпадающем меню.
Булевский тип
Использование булевского (boolean) типа очевидно — он применяется всегда, когда необходимы логические значения ИСТИНА и ЛОЖЬ. Константами булевского типа являются true и false. Если в модели AnyLogic в поле начального значения переменной или параметра булеского типа не стоит никакого значения, это интерпретируется как значение false.
Символьный тип
Константой символьного типа будет любой символ, взятый в одинарные кавычки, например, 'f'' или 'я' В двойных кавычках записываются константы типа строка, т. е. последовательности символов. Частными случаями строки являются пустая строка и односимвольная строка. Константа "Ь" в двойных кавычках — не символьная константа, это односимвольная строка. Символьный тип основан на двухбайтовой кодировке символов Unicode, что позволяет использовать любой символ всех языков мира, в том числе и кириллицу, а также специальные символы. Символы в Unicode наиболее часто выражаются в виде кода из четырех шестнадцатеричных цифр, записывающихся после пары /и. Например в кодировке Unicode символ ™ имеет вид /и2122. Вставим в окно анимации модели Heart указание на торговую марку. Откройте в этой модели окно анимации и вставьте в левом верхнем углу статический текст "Марка", а в поле динамического значения этого текста — в двойных кавычках текст (см. рис. 7.1):
"AnyLogic\u2122"
Запустите модель. Вы увидите, что текст "AnyLogic™" отображается в окне анимации при работе модели. В папке Model Examples\Part II это добавление содержится В модели Heart4.
Кодировки Unicode можно найти на сайте www.unicode.org/charts/.
Переменные
Тип переменной должен быть определен в объявлении переменной до ее использования. В активном объекте при построении модели на AnyLogic это требование удовлетворяется просто — используется кнопка панели инструментов для переноса иконки переменной в поле редактора проекта. Параметры модели с точки зрения языка Java также являются переменными. Дополнительные переменные объекта могут быть введены также в поле Дополнительный код класса окна Код. Свое окно Код ассоциировано с каждым активным объектом, анимацией и т. п.
Имена переменных начинаются с буквы и должны быть последовательностью букв или цифр. Заглавные и строчные буквы в именах различаются. Переменные можно объявлять в любом месте в коде Java. Одна и та же переменная не может быть объявлена более одного раза в области ее действия. Слова double, int, boolean и т. п., появляющиеся в тексте Java, являются ключевыми, все они автоматически выделяются редактором синим цветом. Эти ключевые слова Java, как и ключевые слова AnyLogic (например. parent, index и др.), нельзя использовать как имена.
После объявления переменной она должна быть инициализирована. При отсутствии явной инициализации переменной или параметра в AnyLogic им присваивается некоторое значение по умолчанию. Как уже указывалось, для численных типов это 0, для булевского типа — значение false. Инициализация может быть выполнена либо отдельным оператором присваивания:
int i; i = 10;
либо непосредственно при объявлении типа:
int i = 10;