OpenU.Ru
Строка, содержащая утверждение, которое можно интерпретировать в определенном языке. Многие выражения при интерпретации вырабатывают значения, другие осуществляют некие действия. Например, результат вычисления выражения (7 + 5 * 3) имеет числовой тип и равен 22.
Семантика
Выражение содержит утверждение, с помощью которого, при выполнении его в определенном
контексте, вычисляется множество (возможно, пустое) экземпляров,
значений или же выполняется некое действие.
Выражение не наменяет окружение, в котором осуществляется вычисление. Оно состоит
из строки и имени языка вычислений. Элемент выражения
состоит из имени языка интерпретации и строки, которая содержит выражение, чей
синтаксис принадлежит этому языку. Принято считать, что у языка есть интерпретирующая
программа, которую должны предоставлять средства моделирования. Языком интерпретации
может служить язык ограничений (например, OCL), язык программирования
(C++ или Smalltalk) либо естественный язык. Конечно, если выражение написано
на естественном языке, инструмент моделирования не сможет вычислить его автоматически
- для этого понадобится человек.
Разные подклассы выражений дают разные типы значений. К ним относятся логические
выражения, выражения, описывающие множества объектов, выражения времени, а также
выражения процедур.
В UML-моделях выражения используются в качестве действий, ограничений,
сторожевых условий и т. п.
Нотация
Выражение имеет вид строки, написанной на определенном языке. Ответственность за синтаксис, используемый в этом выражении, лежит на инструменте моделирования и лингвистическом анализаторе. Предполагается, что анализатор сможет обрабатывать строки во время выполнения, и будет получать значения соответствующего типа либо сможет вырабатывать семантические структуры, передающие значение выражения. Например, в результате вычисления выражения для типа получается ссылка на классификатор, а в результате вычисления логического выражения - значение "истина" или "ложь". Инструменту моделирования указывается язык интерпретации, однако на диаграмме он не показан, так как считается, что форма выражения и так достаточно понятна.
Пример
self.cost < authorization.maxCost forall (k in targets) { k. update ( ) }Алфавитный указатель