ݺߣ

ݺߣShare a Scribd company logo
Основы Java для
                           AnyLogic
Эта презентация является
      частью стандартной
     программы обучения




                           © 2002-2012 ООО «Экс Джей Текнолоджис», www.xjtek.ru
Общие замечания
• Не требуется знать принципы объектно-ориентированного
 программирования
• Достаточно знать типы данных Java и понимать синтаксис
 выражений
• Обратите внимание на следующее:
   • Java учитывает регистр: переменная MyVar отлична от myVar!
   • Имена не могут содержать пробелов: имя “My Var” недопустимо!
   • Каждое действие должно заканчиваться “;”: MyVar = 150;
   • Каждая функция должна иметь скобки: time(), add(a)
   • Следует помнить о целочисленном делении: 3/2 = 1, а не 1.5
   • Булевские переменные могут принимать только значения true и false,
     использовать значения 1 и 0 нельзя
   • Точка “.” позволяет перейти “внутрь” объекта: agent.event.restart()
   • Элементы массивов имеют индексы от 0 до N-1


© 2002-2012 ООО «Экс Джей Текнолоджис», www.xjtek.ru                       2
Типы
• Примитивные типы
   double – вещественное число: 1.43, 3.6E18, ­14.0
   int – целое число: 12, 16384, -5000
   boolean – булево значение: true, false
• Составные типы – классы
   String – текстовая строка: “AnyLogic”, “Привет!”
   ArrayList, LinkedList – коллекции объектов
   HyperArray – многомерный массив вещественных чисел в
     системно-динамических моделях
   … и многие другие. См. справочник классов AnyLogic и
     Java

© 2002-2012 ООО «Экс Джей Текнолоджис», www.xjtek.ru   3
Выражения
• Арифметические операции
   +, –, *, /, % (остаток от деления)
   При целочисленном делении дробная часть отбрасывается, например: 3 / 2 равняется 1,
      2 / 3 равняется 0
   Операции типа умножение имеют приоритет над операциями типа сложение
   Оператор ‘+‘ также конкатенирует строки типа String

• Операции сравнения
   >, >=, <, <=, ==, !=

• Логические операции
   && (и), || (или), ! (не)

• Условный оператор                                           Операции одинакового
   условие ? рез-т-если-истина(true) : рез-т-если-ложь(false) приоритета выполняются
                                                              слева направо
• Присваивание и сокращения
   =, +=, -=, *=, /=, %=, ++, --                          Для управления
   Пример: a+=b равносильно a=a+b                         приоритетом используйте
                                                          скобки


© 2002-2012 ООО «Экс Джей Текнолоджис», www.xjtek.ru                             4
Примеры
5 % 2 ≡ 1?                                        “Any” + “Logic” ≡ “AnyLogic”
                                                                         ?

5 / 2 ≡ 2?                                        Пусть x = 14.3, тогда:
                                                   “x = ” + x ≡ “x = 14.3”
                                                                     ?
5. / 2 ≡ 5 / 2. ≡ 2.5
                    ?
                                                  “” ≡ пустая?
                                                             строка
(double)5 / 2 ≡ 2.5
                  ?
                                                  “” + x ≡ “14.3”
                                                              ?
a += b; ≡ a = a+b;
               ?
                                                  y=x>0?x:0
a++; ≡ a = a+1;
            ?                                      ≡ y = max( 0, x )
                                                            ?
                                                  x == 5 ≡ true если x равен
                                                                  ?
                                                    5, иначе false, тогда как:
                                                  x = 5 ≡ присвоить x значение 5
                                                                    ?



© 2002-2012 ООО «Экс Джей Текнолоджис», www.xjtek.ru                               5
Вызов методов и доступ к полям
• Вызов методов
   Чтобы вызвать метод, укажите имя метода и после
     имени поставьте скобки. Если необходимо, в скобках
     через запятую укажите параметры. Примеры:
      x = time();
      moveTo( getX(), getY() + 100 );
      traceln( “Population is increasing” );
• Доступ к полям и методам
   Чтобы обратиться к полю или методу элемента модели
     (стейтчарта, события, анимации), укажите имя этого
     элемента, добавьте точку ‘.’, а затем укажите имя
     поля или метода. Примеры:
      statechart.fireEvent( “go” );
      sum = sum + agents.get(i).x;


© 2002-2012 ООО «Экс Джей Текнолоджис», www.xjtek.ru      6
Комментарии в Java коде
Есть два вида комментариев:
    /* text */           Обычный комментарий: игнорируется весь текст,
                         находящийся между ASCII символами /* и */ (как в C и
                         C++).
    /**
     * The class represents AnyLogic 3D animation. It contains the canvas object.
     *
     * @author Daniil Chunosov
     * @version 5.0
     */
    public class Animation3DPanel extends javax.swing.JPanel …

    // text              Строчный комментарий: игнорируется весь текст от
                         ASCII символов // и до конца строки (как в
                         C++)

    // Prepare Engine for simulation:
    engine.start( root );
    engine.runFast(); // fast mode – no animation

© 2002-2012 ООО «Экс Джей Текнолоджис», www.xjtek.ru                                7
Реплицированные объекты
                   • Реплицированный объект
                    представляется массивом переменного
                    размера. Элементы массива имеют
                    индексы от 0 до N-1
                      Получение размера массива:
                        people.size()
                      Получение i-го элемента массива:
                        people.get( i )
                      Добавление нового объекта:
                        add_people();
                      Удаление объекта:
                        remove_people( person );
© 2002-2012 ООО «Экс Джей Текнолоджис», www.xjtek.ru     8
Встроенные функции
• Системные функции
     – getOwner(), pause(), traceln(), isStateActive(), и т.д.

• Функции для работы со временем
     – time(), date(), getHourOfDay(), minute(), и т.д.

• Математические функции
     – Базовые: sqrt(), sin(), cos(), exp(), log(), round(), и т.д.
• Специальные функции
     – Случайные числа: uniform(), exponential(), bernoulli(), и т.д.
     – Системная динамика: delay(), delay3(), smooth(), trend(), и т.д.

• И другие …
     – См. классы Utilities, Presentable, ActiveObject и Agent в
       справочнике классов AnyLogic


© 2002-2012 ООО «Экс Джей Текнолоджис», www.xjtek.ru                      9
Вероятностные распределения
   uniform( min, max )
                                  Описывает случайную величину, для которой
                                  вероятность попадания в любой интервал между min и
                                  max прямо пропорциональна длине этого интервала.
     min             max


                                                                     exponential( lambda )
                                                            lambda
Используется для моделирования временных
интервалов между случайными событиями. Важное
свойство: отсутствие последействия.



triangular( min, mode, max )
                                  Обычно используется в условиях недостатка
                                  данных о длительности какого-либо процесса.
     min        mode max




    © 2002-2012 ООО «Экс Джей Текнолоджис», www.xjtek.ru                             10
Основные конструкции языка
                               • Присваивание или вызов метода:
                                   y = f(x1,x2) + 5*z;
                                   event.restart( uniform( 10, 20 ) );

                               • Ветвление по условию:
                                     if ( friendsRatio > attackConstant )
                                         attack();
                                     else
                                         escape();
                               • Цикл:
                                     double total = 0;
                                     for ( Person p : people )
                                        total += p.income;
                                     for( int i=0; i<100; i++ )
                                        send( msg, RANDOM );
© 2002-2012 ООО «Экс Джей Текнолоджис», www.xjtek.ru                        11
Коллекции
 • Коллекции – это предопределенные классы, реализующие
  базовые структуры данных
 • Одна и та же операция для разных классов занимает разное
  время
                              ArrayList                  HashSet   SortedSet
                                            LinkedList
                               Vector                    HashMap   SortedMap

  Получение размера             Const         Const       Const     Const
Добавление элемента             Const         Const       Const         Log
  Удаление элемента            Linear         Linear      Const         Log
 Удаление по индексу           Linear         Linear      -         -
Получение по индексу            Const         Linear      -         -
      Поиск элемента           Linear         Linear      Const         Log
      Поиск мин/макс           Linear         Linear      Linear    Const


 © 2002-2012 ООО «Экс Джей Текнолоджис», www.xjtek.ru                          12
Источники информации
Справочник классов AnyLogic
   Раздел API Reference справочной системы AnyLogic
Спецификация Java API
   http://java.sun.com/javase/6/docs/api
Одна из лучших книг по Java:
   Bruce Eckel. Thinking in Java.
     Доступна по адресу:
      http://www.uic.rsu.ru/doc/programming/java/TIJ2e.ru/Contents.html




© 2002-2012 ООО «Экс Джей Текнолоджис», www.xjtek.ru                      13

More Related Content

What's hot (20)

L6: Метод опорных векторов
L6: Метод опорных векторовL6: Метод опорных векторов
L6: Метод опорных векторов
Technosphere1
L3: Линейная и логистическая регрессия
L3: Линейная и логистическая регрессияL3: Линейная и логистическая регрессия
L3: Линейная и логистическая регрессия
Technosphere1
4. Многомерные массивы и массивы массивов в C#
4. Многомерные массивы и массивы массивов в C#4. Многомерные массивы и массивы массивов в C#
4. Многомерные массивы и массивы массивов в C#
Olga Maksimenkova
Лекция №5 "Обработка текстов, Naive Bayes"
Лекция №5 "Обработка текстов, Naive Bayes" Лекция №5 "Обработка текстов, Naive Bayes"
Лекция №5 "Обработка текстов, Naive Bayes"
Technosphere1
Решение краевых задач методом конечных элементов
Решение краевых задач методом конечных элементовРешение краевых задач методом конечных элементов
Решение краевых задач методом конечных элементов
Theoretical mechanics department
Лекция №8 "Методы снижения размерности пространства"
Лекция №8 "Методы снижения размерности пространства" Лекция №8 "Методы снижения размерности пространства"
Лекция №8 "Методы снижения размерности пространства"
Technosphere1
Лекция №7 "Машина опорных векторов"
Лекция №7 "Машина опорных векторов" Лекция №7 "Машина опорных векторов"
Лекция №7 "Машина опорных векторов"
Technosphere1
Лекция №3 "Различные алгоритмы кластеризации"
Лекция №3 "Различные алгоритмы кластеризации"Лекция №3 "Различные алгоритмы кластеризации"
Лекция №3 "Различные алгоритмы кластеризации"
Technosphere1
L2: Задача классификации и регрессии. Метрики ошибок
L2: Задача классификации и регрессии. Метрики ошибокL2: Задача классификации и регрессии. Метрики ошибок
L2: Задача классификации и регрессии. Метрики ошибок
Technosphere1
Основы С++ (массивы, указатели). Задачи с массивами
Основы С++ (массивы, указатели). Задачи с массивамиОсновы С++ (массивы, указатели). Задачи с массивами
Основы С++ (массивы, указатели). Задачи с массивами
Olga Maksimenkova
Структурное обучение и S-SVM
Структурное обучение и S-SVMСтруктурное обучение и S-SVM
Структурное обучение и S-SVM
romovpa
Лекция №6 "Линейные модели для классификации и регрессии"
Лекция №6 "Линейные модели для классификации и регрессии" Лекция №6 "Линейные модели для классификации и регрессии"
Лекция №6 "Линейные модели для классификации и регрессии"
Technosphere1
L11: Метод ансамблей
L11: Метод ансамблейL11: Метод ансамблей
L11: Метод ансамблей
Technosphere1
Лекция №4 "Задача классификации"
Лекция №4 "Задача классификации"Лекция №4 "Задача классификации"
Лекция №4 "Задача классификации"
Technosphere1
Лекция №10 "Алгоритмические композиции. Завершение"
Лекция №10 "Алгоритмические композиции. Завершение" Лекция №10 "Алгоритмические композиции. Завершение"
Лекция №10 "Алгоритмические композиции. Завершение"
Technosphere1
Обработка коллекций. Единая суть и множество проявлений
Обработка коллекций. Единая суть и множество проявленийОбработка коллекций. Единая суть и множество проявлений
Обработка коллекций. Единая суть и множество проявлений
corehard_by
Лекция №9 "Алгоритмические композиции. Начало"
Лекция №9 "Алгоритмические композиции. Начало"Лекция №9 "Алгоритмические композиции. Начало"
Лекция №9 "Алгоритмические композиции. Начало"
Technosphere1
Лекция №12 "Ограниченная машина Больцмана"
Лекция №12 "Ограниченная машина Больцмана" Лекция №12 "Ограниченная машина Больцмана"
Лекция №12 "Ограниченная машина Больцмана"
Technosphere1
2. java lecture syntax
2. java lecture syntax2. java lecture syntax
2. java lecture syntax
MERA_school
Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)
Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)
Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)
ScalaNsk
L6: Метод опорных векторов
L6: Метод опорных векторовL6: Метод опорных векторов
L6: Метод опорных векторов
Technosphere1
L3: Линейная и логистическая регрессия
L3: Линейная и логистическая регрессияL3: Линейная и логистическая регрессия
L3: Линейная и логистическая регрессия
Technosphere1
4. Многомерные массивы и массивы массивов в C#
4. Многомерные массивы и массивы массивов в C#4. Многомерные массивы и массивы массивов в C#
4. Многомерные массивы и массивы массивов в C#
Olga Maksimenkova
Лекция №5 "Обработка текстов, Naive Bayes"
Лекция №5 "Обработка текстов, Naive Bayes" Лекция №5 "Обработка текстов, Naive Bayes"
Лекция №5 "Обработка текстов, Naive Bayes"
Technosphere1
Решение краевых задач методом конечных элементов
Решение краевых задач методом конечных элементовРешение краевых задач методом конечных элементов
Решение краевых задач методом конечных элементов
Theoretical mechanics department
Лекция №8 "Методы снижения размерности пространства"
Лекция №8 "Методы снижения размерности пространства" Лекция №8 "Методы снижения размерности пространства"
Лекция №8 "Методы снижения размерности пространства"
Technosphere1
Лекция №7 "Машина опорных векторов"
Лекция №7 "Машина опорных векторов" Лекция №7 "Машина опорных векторов"
Лекция №7 "Машина опорных векторов"
Technosphere1
Лекция №3 "Различные алгоритмы кластеризации"
Лекция №3 "Различные алгоритмы кластеризации"Лекция №3 "Различные алгоритмы кластеризации"
Лекция №3 "Различные алгоритмы кластеризации"
Technosphere1
L2: Задача классификации и регрессии. Метрики ошибок
L2: Задача классификации и регрессии. Метрики ошибокL2: Задача классификации и регрессии. Метрики ошибок
L2: Задача классификации и регрессии. Метрики ошибок
Technosphere1
Основы С++ (массивы, указатели). Задачи с массивами
Основы С++ (массивы, указатели). Задачи с массивамиОсновы С++ (массивы, указатели). Задачи с массивами
Основы С++ (массивы, указатели). Задачи с массивами
Olga Maksimenkova
Структурное обучение и S-SVM
Структурное обучение и S-SVMСтруктурное обучение и S-SVM
Структурное обучение и S-SVM
romovpa
Лекция №6 "Линейные модели для классификации и регрессии"
Лекция №6 "Линейные модели для классификации и регрессии" Лекция №6 "Линейные модели для классификации и регрессии"
Лекция №6 "Линейные модели для классификации и регрессии"
Technosphere1
L11: Метод ансамблей
L11: Метод ансамблейL11: Метод ансамблей
L11: Метод ансамблей
Technosphere1
Лекция №4 "Задача классификации"
Лекция №4 "Задача классификации"Лекция №4 "Задача классификации"
Лекция №4 "Задача классификации"
Technosphere1
Лекция №10 "Алгоритмические композиции. Завершение"
Лекция №10 "Алгоритмические композиции. Завершение" Лекция №10 "Алгоритмические композиции. Завершение"
Лекция №10 "Алгоритмические композиции. Завершение"
Technosphere1
Обработка коллекций. Единая суть и множество проявлений
Обработка коллекций. Единая суть и множество проявленийОбработка коллекций. Единая суть и множество проявлений
Обработка коллекций. Единая суть и множество проявлений
corehard_by
Лекция №9 "Алгоритмические композиции. Начало"
Лекция №9 "Алгоритмические композиции. Начало"Лекция №9 "Алгоритмические композиции. Начало"
Лекция №9 "Алгоритмические композиции. Начало"
Technosphere1
Лекция №12 "Ограниченная машина Больцмана"
Лекция №12 "Ограниченная машина Больцмана" Лекция №12 "Ограниченная машина Больцмана"
Лекция №12 "Ограниченная машина Больцмана"
Technosphere1
2. java lecture syntax
2. java lecture syntax2. java lecture syntax
2. java lecture syntax
MERA_school
Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)
Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)
Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)
ScalaNsk

Similar to основы Java для_any_logic (20)

CV2015. Лекция 4. Классификация изображений и введение в машинное обучение.
CV2015. Лекция 4. Классификация изображений и введение в машинное обучение.CV2015. Лекция 4. Классификация изображений и введение в машинное обучение.
CV2015. Лекция 4. Классификация изображений и введение в машинное обучение.
Anton Konushin
Статический и динамический полиморфизм в C++, Дмитрий Леванов
Статический и динамический полиморфизм в C++, Дмитрий ЛевановСтатический и динамический полиморфизм в C++, Дмитрий Леванов
Статический и динамический полиморфизм в C++, Дмитрий Леванов
Yandex
1 вводное занятие
1 вводное занятие1 вводное занятие
1 вводное занятие
luis_blanco_rau
Статический и динамический полиморфизм в C++, Дмитрий Леванов
Статический и динамический полиморфизм в C++, Дмитрий ЛевановСтатический и динамический полиморфизм в C++, Дмитрий Леванов
Статический и динамический полиморфизм в C++, Дмитрий Леванов
Yandex
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013
ScalaNsk
Николай Паламарчук "Functional Programming basics for PHP developers"
Николай Паламарчук "Functional Programming basics for PHP developers"Николай Паламарчук "Functional Programming basics for PHP developers"
Николай Паламарчук "Functional Programming basics for PHP developers"
Fwdays
Python и его тормоза
Python и его тормозаPython и его тормоза
Python и его тормоза
Alexander Shigin
Java.fundamentals
Java.fundamentalsJava.fundamentals
Java.fundamentals
Asya Dudnik
Java.fundamentals
Java.fundamentalsJava.fundamentals
Java.fundamentals
Asya Dudnik
Фундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоФундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел Тайкало
Stanfy
Зачем обычному программисту знать языки, на которых почти никто не пишет. Але...
Зачем обычному программисту знать языки, на которых почти никто не пишет. Але...Зачем обычному программисту знать языки, на которых почти никто не пишет. Але...
Зачем обычному программисту знать языки, на которых почти никто не пишет. Але...
yaevents
Технологии анализа бинарного кода приложений: требования, проблемы, инструменты
Технологии анализа бинарного кода приложений: требования, проблемы, инструментыТехнологии анализа бинарного кода приложений: требования, проблемы, инструменты
Технологии анализа бинарного кода приложений: требования, проблемы, инструменты
Positive Development User Group
Принципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioПринципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-Studio
Andrey Karpov
8
88
8
ssusera868ff
[JAM 1.1] Clean Code (Paul Malikov)
[JAM 1.1] Clean Code (Paul Malikov)[JAM 1.1] Clean Code (Paul Malikov)
[JAM 1.1] Clean Code (Paul Malikov)
Evgeny Kaziak
Архитектура в Agile: слабая связность
Архитектура в Agile: слабая связностьАрхитектура в Agile: слабая связность
Архитектура в Agile: слабая связность
Andrey Bibichev
C#. От основ к эффективному коду
C#. От основ к эффективному кодуC#. От основ к эффективному коду
C#. От основ к эффективному коду
Vasiliy Deynega
CV2015. Лекция 4. Классификация изображений и введение в машинное обучение.
CV2015. Лекция 4. Классификация изображений и введение в машинное обучение.CV2015. Лекция 4. Классификация изображений и введение в машинное обучение.
CV2015. Лекция 4. Классификация изображений и введение в машинное обучение.
Anton Konushin
Статический и динамический полиморфизм в C++, Дмитрий Леванов
Статический и динамический полиморфизм в C++, Дмитрий ЛевановСтатический и динамический полиморфизм в C++, Дмитрий Леванов
Статический и динамический полиморфизм в C++, Дмитрий Леванов
Yandex
1 вводное занятие
1 вводное занятие1 вводное занятие
1 вводное занятие
luis_blanco_rau
Статический и динамический полиморфизм в C++, Дмитрий Леванов
Статический и динамический полиморфизм в C++, Дмитрий ЛевановСтатический и динамический полиморфизм в C++, Дмитрий Леванов
Статический и динамический полиморфизм в C++, Дмитрий Леванов
Yandex
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013
ScalaNsk
Николай Паламарчук "Functional Programming basics for PHP developers"
Николай Паламарчук "Functional Programming basics for PHP developers"Николай Паламарчук "Functional Programming basics for PHP developers"
Николай Паламарчук "Functional Programming basics for PHP developers"
Fwdays
Фундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоФундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел Тайкало
Stanfy
Зачем обычному программисту знать языки, на которых почти никто не пишет. Але...
Зачем обычному программисту знать языки, на которых почти никто не пишет. Але...Зачем обычному программисту знать языки, на которых почти никто не пишет. Але...
Зачем обычному программисту знать языки, на которых почти никто не пишет. Але...
yaevents
Технологии анализа бинарного кода приложений: требования, проблемы, инструменты
Технологии анализа бинарного кода приложений: требования, проблемы, инструментыТехнологии анализа бинарного кода приложений: требования, проблемы, инструменты
Технологии анализа бинарного кода приложений: требования, проблемы, инструменты
Positive Development User Group
Принципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioПринципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-Studio
Andrey Karpov
[JAM 1.1] Clean Code (Paul Malikov)
[JAM 1.1] Clean Code (Paul Malikov)[JAM 1.1] Clean Code (Paul Malikov)
[JAM 1.1] Clean Code (Paul Malikov)
Evgeny Kaziak
Архитектура в Agile: слабая связность
Архитектура в Agile: слабая связностьАрхитектура в Agile: слабая связность
Архитектура в Agile: слабая связность
Andrey Bibichev
C#. От основ к эффективному коду
C#. От основ к эффективному кодуC#. От основ к эффективному коду
C#. От основ к эффективному коду
Vasiliy Deynega

основы Java для_any_logic

  • 1. Основы Java для AnyLogic Эта презентация является частью стандартной программы обучения © 2002-2012 ООО «Экс Джей Текнолоджис», www.xjtek.ru
  • 2. Общие замечания • Не требуется знать принципы объектно-ориентированного программирования • Достаточно знать типы данных Java и понимать синтаксис выражений • Обратите внимание на следующее: • Java учитывает регистр: переменная MyVar отлична от myVar! • Имена не могут содержать пробелов: имя “My Var” недопустимо! • Каждое действие должно заканчиваться “;”: MyVar = 150; • Каждая функция должна иметь скобки: time(), add(a) • Следует помнить о целочисленном делении: 3/2 = 1, а не 1.5 • Булевские переменные могут принимать только значения true и false, использовать значения 1 и 0 нельзя • Точка “.” позволяет перейти “внутрь” объекта: agent.event.restart() • Элементы массивов имеют индексы от 0 до N-1 © 2002-2012 ООО «Экс Джей Текнолоджис», www.xjtek.ru 2
  • 3. Типы • Примитивные типы double – вещественное число: 1.43, 3.6E18, ­14.0 int – целое число: 12, 16384, -5000 boolean – булево значение: true, false • Составные типы – классы String – текстовая строка: “AnyLogic”, “Привет!” ArrayList, LinkedList – коллекции объектов HyperArray – многомерный массив вещественных чисел в системно-динамических моделях … и многие другие. См. справочник классов AnyLogic и Java © 2002-2012 ООО «Экс Джей Текнолоджис», www.xjtek.ru 3
  • 4. Выражения • Арифметические операции +, –, *, /, % (остаток от деления) При целочисленном делении дробная часть отбрасывается, например: 3 / 2 равняется 1, 2 / 3 равняется 0 Операции типа умножение имеют приоритет над операциями типа сложение Оператор ‘+‘ также конкатенирует строки типа String • Операции сравнения >, >=, <, <=, ==, != • Логические операции && (и), || (или), ! (не) • Условный оператор Операции одинакового условие ? рез-т-если-истина(true) : рез-т-если-ложь(false) приоритета выполняются слева направо • Присваивание и сокращения =, +=, -=, *=, /=, %=, ++, -- Для управления Пример: a+=b равносильно a=a+b приоритетом используйте скобки © 2002-2012 ООО «Экс Джей Текнолоджис», www.xjtek.ru 4
  • 5. Примеры 5 % 2 ≡ 1? “Any” + “Logic” ≡ “AnyLogic” ? 5 / 2 ≡ 2? Пусть x = 14.3, тогда: “x = ” + x ≡ “x = 14.3” ? 5. / 2 ≡ 5 / 2. ≡ 2.5 ? “” ≡ пустая? строка (double)5 / 2 ≡ 2.5 ? “” + x ≡ “14.3” ? a += b; ≡ a = a+b; ? y=x>0?x:0 a++; ≡ a = a+1; ? ≡ y = max( 0, x ) ? x == 5 ≡ true если x равен ? 5, иначе false, тогда как: x = 5 ≡ присвоить x значение 5 ? © 2002-2012 ООО «Экс Джей Текнолоджис», www.xjtek.ru 5
  • 6. Вызов методов и доступ к полям • Вызов методов Чтобы вызвать метод, укажите имя метода и после имени поставьте скобки. Если необходимо, в скобках через запятую укажите параметры. Примеры: x = time(); moveTo( getX(), getY() + 100 ); traceln( “Population is increasing” ); • Доступ к полям и методам Чтобы обратиться к полю или методу элемента модели (стейтчарта, события, анимации), укажите имя этого элемента, добавьте точку ‘.’, а затем укажите имя поля или метода. Примеры: statechart.fireEvent( “go” ); sum = sum + agents.get(i).x; © 2002-2012 ООО «Экс Джей Текнолоджис», www.xjtek.ru 6
  • 7. Комментарии в Java коде Есть два вида комментариев: /* text */ Обычный комментарий: игнорируется весь текст, находящийся между ASCII символами /* и */ (как в C и C++). /** * The class represents AnyLogic 3D animation. It contains the canvas object. * * @author Daniil Chunosov * @version 5.0 */ public class Animation3DPanel extends javax.swing.JPanel … // text Строчный комментарий: игнорируется весь текст от ASCII символов // и до конца строки (как в C++) // Prepare Engine for simulation: engine.start( root ); engine.runFast(); // fast mode – no animation © 2002-2012 ООО «Экс Джей Текнолоджис», www.xjtek.ru 7
  • 8. Реплицированные объекты • Реплицированный объект представляется массивом переменного размера. Элементы массива имеют индексы от 0 до N-1 Получение размера массива: people.size() Получение i-го элемента массива: people.get( i ) Добавление нового объекта: add_people(); Удаление объекта: remove_people( person ); © 2002-2012 ООО «Экс Джей Текнолоджис», www.xjtek.ru 8
  • 9. Встроенные функции • Системные функции – getOwner(), pause(), traceln(), isStateActive(), и т.д. • Функции для работы со временем – time(), date(), getHourOfDay(), minute(), и т.д. • Математические функции – Базовые: sqrt(), sin(), cos(), exp(), log(), round(), и т.д. • Специальные функции – Случайные числа: uniform(), exponential(), bernoulli(), и т.д. – Системная динамика: delay(), delay3(), smooth(), trend(), и т.д. • И другие … – См. классы Utilities, Presentable, ActiveObject и Agent в справочнике классов AnyLogic © 2002-2012 ООО «Экс Джей Текнолоджис», www.xjtek.ru 9
  • 10. Вероятностные распределения uniform( min, max ) Описывает случайную величину, для которой вероятность попадания в любой интервал между min и max прямо пропорциональна длине этого интервала. min max exponential( lambda ) lambda Используется для моделирования временных интервалов между случайными событиями. Важное свойство: отсутствие последействия. triangular( min, mode, max ) Обычно используется в условиях недостатка данных о длительности какого-либо процесса. min mode max © 2002-2012 ООО «Экс Джей Текнолоджис», www.xjtek.ru 10
  • 11. Основные конструкции языка • Присваивание или вызов метода: y = f(x1,x2) + 5*z; event.restart( uniform( 10, 20 ) ); • Ветвление по условию: if ( friendsRatio > attackConstant ) attack(); else escape(); • Цикл: double total = 0; for ( Person p : people ) total += p.income; for( int i=0; i<100; i++ ) send( msg, RANDOM ); © 2002-2012 ООО «Экс Джей Текнолоджис», www.xjtek.ru 11
  • 12. Коллекции • Коллекции – это предопределенные классы, реализующие базовые структуры данных • Одна и та же операция для разных классов занимает разное время ArrayList HashSet SortedSet LinkedList Vector HashMap SortedMap Получение размера Const Const Const Const Добавление элемента Const Const Const Log Удаление элемента Linear Linear Const Log Удаление по индексу Linear Linear - - Получение по индексу Const Linear - - Поиск элемента Linear Linear Const Log Поиск мин/макс Linear Linear Linear Const © 2002-2012 ООО «Экс Джей Текнолоджис», www.xjtek.ru 12
  • 13. Источники информации Справочник классов AnyLogic Раздел API Reference справочной системы AnyLogic Спецификация Java API http://java.sun.com/javase/6/docs/api Одна из лучших книг по Java: Bruce Eckel. Thinking in Java. Доступна по адресу: http://www.uic.rsu.ru/doc/programming/java/TIJ2e.ru/Contents.html © 2002-2012 ООО «Экс Джей Текнолоджис», www.xjtek.ru 13