Определение выражений

Для определения обозначений необходимо использовать выражения. Агент разрешает эти выражения, чтобы назначить обозначениям значения.

Использование данных в выражении

Выражение может использовать следующие данные:
  • Входные обозначения данных для типа требования
  • Другие обозначения, описанные в том же определении средства отображения требований
  • Числовые константы
  • Строковые константы (разграниченные с помощью ", например, "строка")
  • Логические константы (true, TRUE, false, FALSE)
  • Константа null
Дополнительную информацию о входных обозначениях данных смотрите в разделе Табл. 2.

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

Чтобы сослаться на статическое поле или метод класса, можно использовать имя_класса.имя_поля и имя_класса.имя_метода(параметры).

Если обозначение относится к объекту массива, выражение может выбрать элемент (обозначение[селектор]) и определить длину массива (обозначение.length)

Операторы

В выражениях можно использовать следующие операторы:
  • Логические операторы: AND, &, OR, |, NOT, !
  • Сравнение: ==, !=, GT, >, LT, <, GE, >=, LE, <=
  • Числовые операторы: +, -, *, /
  • Скобки для принудительного определения порядка вычислений: (, )
Важное замечание: В файле XML необходимо избегать обозначений <, > и &. Вместо них можно использовать операторы GT (больше), GE (больше или равно), LT (меньше), LE (меньше или равно) и AND.
Выражение может оценить, представляет ли значение экземпляр класса, используя оператор instanceof:
выражение instanceof java.class.имя
Этот оператор, аналогично оператору Java instanceof, порождает логическое значение. В данном примере это значение - true, если класс, к которому принадлежит значение выражение, удовлетворяет одному из следующих условий:
  • Называется java.класс.имя
  • Представляет из себя непосредственный или косвенный подкласс класса, определенного как java.класс.имя.
  • Реализует непосредственно или косвенно интерфейс, определенный классом java.класс.имя.
Выражение может конкретизировать также новый объект класса Java, используя оператор new. Этот оператор аналогичен оператору Java new:
new java.класс.имя(выражение1, выражение2, ... выражениеN)

Приоритет операторов

Операторы могут разрешаться в порядке приоритета. Операторы одинакового уровня приоритета разрешаются слева направо. Порядок разрешения можно изменить с помощью скобок ( и ).
Очередность выполнения следующая:
  1. . оператор (вызов метода или ссылка на поле)
  2. [ ] (селектор элемента массива)
  3. new
  4. !, NOT
  5. *, /
  6. +, -
  7. GT, >, LT, <, GE, >=, LE, <=, instanceof
  8. ==, !=
  9. AND, &
  10. OR, |

Пример

$s1 >= ( 2 * ($s2.sampMethod($s3, true) + 1))
Агент оценивает это выражение следующим образом:
  1. Вычисляется обозначение $s1. Должно создаваться числовое значение.
  2. Вычисляется обозначение $s2. Должен создаваться объект Java.
  3. Вычисляется обозначение $s3.
  4. Вызывается метод sampMethod для объекта, получаемого при разрешении $s2. Результат разрешения $s3 передается как первый параметр, а логическое значение true - как второй. Вызов sampMethod должен возвращать числовое значение.
  5. 1 добавлен к результату шага 4.
  6. Результат шага 5 умножается на 2.
  7. Результат шага 1 сравнивается с результатом шага 6. Если результат шага 1 не меньше результата шага 6, возвращается значение true. В ином случае возвращается false.