Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие.doc
Скачиваний:
434
Добавлен:
04.06.2015
Размер:
2.33 Mб
Скачать
      1. Последовательности доступа к объектам в языкеOcl

Выражение OCL возвращает результат, который может быть: экземпляром одного из базовых типов; экземпляром одного из классов модели; метаинформацией (сведениями об определенном типе данных); набором или коллекцией экземпляров одного класса. Элементы такой коллекции могут быть упорядочены или неупорядочены. Внутри коллекции допускаются одинаковые экземпляры. Если к обычным, скалярным, значениям операции OCL применяются через точку (символ .), то к коллекциям — через комбинацию символов ->.

Для доступа к полям определенного объекта в языке OCL применяется запись, в которой сначала следует имя объекта, затем точка и имя поля объекта. Например, если имеется объект computer (экземпляр класса Computer), а в этом классе описано поле Mouse, то обращение к полю Mouse записывается следующим образом:

Computer.Mouse

Если у поля Mouse (экземпляра класса Mouse) в свою очередь имеются внутренние поля, то и к ним можно обращаться, продолжая запись через точку:

Computer.Mouse.Position

Поля объектов в выражении OCL могут быть не скалярными значениями, а коллекциями. Для того чтобы получить (выбрать) все существующие в программе на данный момент экземпляры определенного типа, используется стандартная операция allinstances. Например, все созданные в приложении экземпляры класса Computer можно получить следующим выражением:

Computer.allIinstances

Результатом такого выражения будет не один объект, а коллекция, набор экземпляров класса computer. Соответственно, запись:

Computer.allInstances.Mouse

формирует коллекцию значений — экземпляров класса Mouse, входящих, в свою очередь, в состав класса Computer (физически — в текущее множество экземпляров этого класса).

      1. Операции над коллекциями

Рассмотрим основные операции языка OCL, которые можно применять к коллекциям. Такие операции иногда называют итераторами. Они чаще всего задействуются в моделях ЕСО для описания логики работы программ и формирования наборов записей, отображаемых на экране. Эти операции записываются с использованием операции ->.

        1. Стандартные операции

Для выполнения операций над коллекциями язык OCL предлагает ряд стандартных функций:

  • Функция size возвращает число элементов коллекции

  • Функции MinValue,MaxValueвозвращают, соответственно, минимальное или максимальное значение из набора.

  • Функция Sumподсчитывает сумму всех элементов набора.

  • Функция countопределяет число элементов коллекции, удовлетворяющих условию, заданному в качестве параметра. Например, выражениеCount(Name=' Сергей') вычислит число элементов коллекции, у которых в полеNameсодержится строка 'Сергей'.

  • Функции isEmpty,NotEmptyвозвращают значениеTrue, если, соответственно, в анализируемом наборе нет ни одного элемента или есть хотя бы один элемент.

Функция, применяемая к коллекции, может возвращать скалярный результат (единственное значение) или вектор (набор значений). Результаты работы функций MinValue,MaxValue,CountИ некоторых других ОТНОСЯТСЯ К последнему типу. Результатом может быть коллекция из нескольких одинаковых значений, каждое из которых соответствует объекту исходной коллекции, отвечающему заданному условию. Если, например, в исходном наборе несколько минимальных величин с одинаковыми значениями, все они попадут в результирующую коллекцию. Чтобы гарантированно получить скалярный результат, надо применить к итоговому набору операциюfirst(см. далее).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]