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

Операция select позволяет выбрать в коллекции подмножество объектов, свойства которых отвечают заданному условию. Это условие указывается после ключевого слова select в круглых скобках.

Пусть, например, в классе Computer (компьютер) имеется свойство Memory (объем оперативной памяти). Отбор всех объектов класса Computer, у которых объем оперативной памяти больше или равен 512 мегабайт (512 единицам, принятым в модели по умолчанию), выполняет следующее выражение OCL:

Computer.allInstances->select(Memory >= 512)

В дальнейшем по отношению к результирующей коллекции (в инфиксном порядке) можно применять другие допустимые операции OCL, в том числе и саму операцию select. Например, возможно такое обращение к полям текущего подмножества объектов:

Computer.allInstances->select(Memory >= 512).Mouse

Это выражение отбирает объекты, представляющие компьютерные мыши (свойство Mouse), которыми оснащены компьютеры с оперативной памятью не менее 512 мегабайт.

        1. Операция reject

Операция reject отбирает в выходную коллекцию только те объекты, которые не удовлетворяют заданному условию. По смыслу она противоположна операции select. В примере:

Computer.allInstances->reject(Memory < 512)

будет получен тот же результат, что и при использовании выражения:

Computer.allInstances->select (Memory >= 512)

        1. Выделение элементов коллекции

Для получения первого элемента в коллекции применяется операция First. Для получения последнего элемента в коллекции применяется операция Last. Выделение объекта по его номеру в коллекции выполняет операция At — номер нужного объекта задается в качестве параметра (нумерация начинается с единицы).

Например, следующее выражение получает последний элемент из коллекции компьютеров:

Computer.allInstances->last

Получить название (свойство Name) процессора (свойство Processor) первого элемента текущей коллекции компьютеров можно следующим образом:

Computer.allInstances->first.Processor.Name

Получить объект, представляющий мышь пятого компьютера текущего набора можно следующим образом:

Computer.allInstances->At(5).Mouse

        1. Упорядочение набора

Применение операций выделения первого и последнего элементов не всегда имеет смысл, если исходная коллекция не упорядочена. Упорядочение наборов данных производится операциями OrderBy и OrderDescending. Они выполняют сортировку по заданному параметру, причем операция OrderDescending выполняет сортировку «в порядке убывания» — способом, противоположным Order By. Конкретный способ сортировки коллекций с помощью операции OrderBy определяется реализацией.

Например, отсортируем набор объектов-компьютеров по именам:

Computer.allInstances->OrderBy(Name)

        1. Логические итераторы

Проверка выполнения логического условия для всех элементов коллекции осуществляется с помощью итератора ForAll. Пусть, например, в классе Computer имеется свойство Mouse (отдельный класс), а у него, в свою очередь, имеется логическое свойство isMiddleButton (наличие средней кнопки мыши). Тогда выражение:

Computer.allInstances->ForAll(Mouse.IsMiddleButton) вернет значение True, если все без исключения компьютеры коллекции оснащены трехкнопочными мышами.

Итератор Exists, схожий по смыслу с итератором ForAll, возвращает значение True, если хотя бы один из элементов коллекции соответствует заданному условию:

Computer.allInstances->Exists(Mouse.IsMiddleButton)

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