inv [nazwa_invar iantu]: varunek_logiczny — mwariant 2 Przykład: Osoba ina co iiajnaiicj 18 lal
context Osobainvs
self.wiek> 18
context Osoba inv:
wiek > 18 — self opuszczony
context os: Osoba inv: -- os - jawna nazwa instancji klasy Osoba sel£.wiek> 18
context Osoba mvwiek_osoby: — mwariant na nazwę self.wiek> 18
Ograniczenia początkowe dla atrybutów - wartości początkowe atrybutu.
Przykład:
cont©xt Czytelnik Instytucjonalny::rzetelny:Wylicz init: if self.nazwa--'XXX' then # wysoka else #niska
Definicja ograniczeń dla operacji
contextNazwaKlasy::NazwaOperacji(parł : Typl, ... 1 : TypWyniku pre [nazwa_warunku]: parł > 0 ... — warunki wstępne post (nazwa_warunku]: result ■ parł + _
- result słowo zastrzeżone
- do definiowania wyniku operacji
context Dziennik::srednia_osoby(o : Osoba):Real post: result - 5
- to tylko przykład
- brak pre oznacza brak ograniczeń: pre : true
W warunku post możliwe jest tak/c odwoływanie się do poprzednich!początkowych) wartości parametrów wywołania operacji poprzczuzycic operatora ©pre.
Przykład
ob.imic@ pre oznacza wartość poprzednią (przed wykonaniem opcracji)atrybutu imię obiektu ob.
Ograniczenia: Nawigowanie po modelu
Szczególnymi własnościami klas są związki (asocjacji, agregacji) zinnymi klasami.Opisując ograniczenia powiązań klasy za pomocą OCL można sięodwolywać do obiektów na drugim końcu powiązania poprzez na/węroli.
Odwołanie do obiektu powiązanego przez nawigacjęza pomocą notacji kropkowej. Drugi koniec jest identyfikowany przez nazwę roli lub. gdy jej brak.przez nazwę klasy (pisaną małą literą).
context Rezerwacja inv: czytelnik, nazwao w -- czytelnik musi mieć nazwę:
Ograniczenia: Nawigowanie po modelu - kolekcje
Jeśli występuje pow iązanie obiektu z wieloma obicktanti klasy, toodwołania doty czą kolekcji obiektów.
Do w’łasnosci kolekcji odwohijc się poprzez notację
np. jeżeli X jest koiekcją.to X->sizeO jest wywołanian funkcji zwracającej rozmiarkolekcji.
Przykład:
context Czytelnik inv: self.rezerwacja->size() < 3
- czytelnik ma najwyżej 3 rezerwacje
Ty py języ ka OCL (cd)
Predefiniowane typy kolckcyjne CollectiontT) to
• zbiory - Sct(T)
• ciągi - Sequence(T)
• wielozbiory - Bag(T)
Typy specjalne
• OclAny nadtyp wszystkich innych typów OCL. ocUsTypeOf(T:Ocnypc):Boolean. ocIIsKindOf(t: Ocftype): Boolean
• OcIT^ pc. -- dowolny typ OCL.
Typy użytkownika modelowe:
Wszystkie klasy, interfejsy i inne typy utworzone przez użytkownika wmodclu UML Kolekcja
Definicje kolekcji - wyrażenia typu kolekcja Set(1, 2, 4, 5)
-- elementy zbioru nie są uporządkowane
Sequence{l, 2, 3, 2, 3)
- elementy ciągu są uporządkowane