Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Язык объектных ограничений OCL.Назначение и основные конструкции



OCL предназначен для записи различного рода ограничений и условий. Ориентирован на ОО среду во всех направлениях.

Основные элементы выражений языка – классы, объекты, типы.

Автор языка – Joss Warrence (IBM). Язык является формальным, строго типизируемым, но не интерпретируемый (программы писать нельзя). Позволяет строго и точно записать различные условия и ограничения по классам, атрибутам, методам, имеет понятный синтаксис.

Основной конструкцией языка является выражение (context –ключевое слово).

В выражении и записывается все условия и ограничения, действующие в системе.

Каждое выражение языка является контекстно-зависимым – привязанным к окружающей обстановке или к некоторому типу, классу, который указывается после слова context.

Имеется 3 типа ограничений:

Inv – инвариант

Pre - предусловие

Post – постусловие

Инвариант – некоторое условие, которое сохраняется в определенном контексте. Условий может быть много.

Пред и пост условия – используется для записи ограничений по использованию определенных методов и классов.

Pre – условие, которое должно быть выполнено перед операцией.

Post – условие, которое должно быть выполнено после операции.

Self. – разыменование - ссылка на тот тип или класс, который оговорен в контексте (на экземпляр).

Выражение может формулировать некоторое ограничение или запрос. Но никакое выражение не изменяет состояние контекста. Носит только информативный характер.

Выражение не расширяет семантику UML, может лишь ограничить.

Пример:

Context компания (класс) inv:

Self.numberOfEmp (атрибут) >0 или

Context b: компания inv:

b.numberOfEmp>0 или

Context b: компания inv ОгрПоПерсоналу (имя ограничения):

b.numberOfEmp>0

На диаграммах строки выражений OCL могут привязываться к элементам диаграмм пунктирной линией. В языке определены все основные типы данных:

Boolean, Integer, Real, String

Основные операции:

Boolean: And, or, xor, not, implies(импликация), if-then-else-endif

Integer: +,-,*,/, div, abs, mod,max, min

Real: +,-,*, abs,floor, round, max, min

String: concat, size(), toUpper, toLower(переход в верхний, нижний регистр)

Используются: (), <,>,<>,=,<=,>=.

/-при условии

Приоритеты операций:

@pre – ссылка на предыдущее условие

. или -> для выражений и работы с коллекциями

Not или унитарный

*, /

+, -

If _ then_ else_endif

>,<,>=, <=

=,<>

And, or, xor

Implies

-- комментарий

Операция может быть записана в 2 формах:

- обычной: a+b,

Инфиксной: a.+(b),

Пример:

b1 xor b2 b1.xor b2

true=b1=true,b2=false; false =b1=true,b2= true;

нельзя смешивать разные типа данных. Исключение Integer и Real.

Работа с коллекциями:

· Неупорядоченное множество без повторов (set): {1,5,7,3,9}

· упорядоченное множество без повторов (ordered set): {1,3,5,7,9}

· Мультимножество (Bag) – неупорядоченное с повторами: {1,5,7,1,3,3}

· Последовательность (sequence)- упорядоченное мультимножество: {1,1,3,3,6,7}

Операции с коллекциями:

· Select – отбор элементов для которых условие выполняется

· reject - отбор элементов для которых не выполняется

· Exists – проверка на существование того или иного элемента.

Пример записи выражения:

1) Context компания inv:

self сотрудник -> reject (имеет семью) -> empty(пусто) – т.е. компания состоит только из семейных сотрудников;

2) Context b:Банк inv:

b.клиент -> forall(счет>=100$) – т.е. для любого клиента счет должен быть >100;

3) Context В: банк inv:

B. клиент ->forAll(x1,x2:Клиент| X1<>x2 implies X1.имя <>x2.имя) – условие уникальности имен клиента. Если х1 их2 –клиенты, и х1<>х2, то имена должны быть различны.

4) context x: Компания inv контроль_пакет_акций:

x.акционер ->exists(a: Акционер | а. количество_акций>=50% ‘от общего числа’) – т.е. если у акционера > 50% акций, то он акционер.

5) Определение возраста сотрудника:

Set возраст: integer = t.Date – Self.b_Date

Context Сотрудник.возраст()

Post: if t_Date>=b_Date then

Возраст=возраст@pre +1

Else возраст = возраст@pre end if

t_date – текущая дата

b_date – дата рождения





Дата публикования: 2015-02-18; Прочитано: 1062 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.014 с)...