Ограничения и OCL
Ограничение показывают в фигурных скобках у класса, свойства, ассоциации, перехода или другого элемента. Например, {оплаченный заказ нельзя редактировать}. Это не декоративная подпись: правило должно быть проверяемым и согласованным с моделями, где оно проявляется.
Кратность, защитное условие, предусловие, постусловие и ограничения множества обобщений также выражают правила. Одно правило полезно показывать там, где оно лучше всего читается, а затем связывать с требованиями и сценариями, а не переписывать дословно на каждой диаграмме.
OCL (Object Constraint Language) — выражения без побочных эффектов для проверки условий и вычисления значений. Наиболее частые виды:
context Orderinv: self.items->size() >= 1
context Order::cancel()pre: self.status <> OrderStatus::Delivered
context Order::cancel()post: self.status = OrderStatus::Cancelledinv задаёт инвариант корректного состояния, pre — условие вызова операции, post — результат успешного выполнения. В учебной модели естественного языка обычно достаточно; OCL нужен, когда естественная формулировка допускает разные прочтения.
В модели
Заголовок раздела «В модели»Источником ограничений служат бизнес-правила. Кратности и инварианты раскрываются на диаграмме классов, защитные условия — на диаграмме деятельности и диаграмме состояний, предусловия и постусловия — в спецификации варианта использования.