-- - komentarz jednolinijkowy /* */

Transkrypt

-- - komentarz jednolinijkowy /* */
-/* */
-
package
komentarz jednolinijkowy
komentarz
pakiet, określa pakiet(przestrzeń nazw) w której znajduje się dany kontekst
package Package::Firma
…
endpackage
context
kontekst, określa obiekt do którego się odnosimy coś definiując
if
then
else
endif
słowa używane w wyrażeniach warunkowych
inv
context Pracownik:: plec:Plec
init:
if( plec == “M” )
then …
else
…
endif
-
inwariant, niezmiennik – ustala zakres wartości, ogranicza daną wielkość
context Pracownik
inv: nazwa <> ””
inv: stawka > 0
init
-
inicjalizacja atrybutu – ustala wartość początkową danego atrybutu
context Pracownik:: godziny:Integer
init: 0 -- ustawia godziny wyrobione przez pracownika na 0
derive -
ustala wartość atrybutu pochodnego na podstawie atrybutu bazowego –
atrybut pochodny jest oznaczony jako „/atrybut” na diagramie klas w UMLu
context Pracownik:: nadGodziny:Integer
derive:
if(godziny > 200)
then godziny-200
else 0
endif
def
-
definiuje zmienną globalną w danym kontekście
context Pracownik
def: pensjaPodstawowa:Real = 1200
self
-
odniesienie do obiektu na którym jest wywoływana dana operacja –
analogiczny do this w językach programowania
context Integer:: dodaj(drugi:Integer):Integer
body: self + drugi
pre
-
warunek początkowy operacji wywoływanej na rzecz danego obiektu
context Integer:: Silnia():Integer
pre:
body -
self >= 0
konstruktywnie definiuje operacje, NIE zmienia wartości żadnego z atrybutów
obiektu, wynik operacji MUSI być znany
context Pracownik:: wyplata():Real
body: pensjaPodstawowa + dodatekStazowy – podatek()
-- gdzie, obie zmienne są globalne, a podatek to zdefiniowana funkcja
post
-
opisowo definiuje operacje, MOŻE zmieniać wartości atrybutów, wynik NIE
musi być jednoznaczny
context Pracownik:: dodajGodziny(ile:Integer):Integer
pre: ile > 0
post: godziny = godziny@pre + ile and
result = godziny -- gdzie „result” jest wynikiem zwracanym przez funkcję
let … in-
definiuje zmienną lokalną dla danego wyrażenia
context Pracownik:: wyplata():Real
body:
let
dodatek:Real =
if( stanowisko = Stanowiska::Kierownik )
then 200 * stawka
else
0,5*stawka + nadGodziny
Endif
in
stawka * godziny + dodatek
Tuple -
złożony typ wyniku, potrafiący skumulować więcej niż jeden wynik, jeżeli
rezultat funkcji ma być związany z parametrem, to parametr musi być typu
wyjściowego(out) lub wejściowo-wyjściowego(inout).
Context Pracownik:: wyplata(out podatek:Real):Real
post:
result = Tuple{ result:Real = podstawowaPensja + dodatek – podatek()
pod:Real = podatek }
-- i przykładowe odwołanie
prac.wyplata(pod).result
prac.wyplata(pod).pod
Aksjomaty:
true
false
false
undefined
or
and
implies
implies
undefined
undefined
undefined
true
≡
≡
≡
≡
true
false
true
true
Priorytety:
najwyższy
najniższy
::
@pre
. ->
-(unarny) not
* /
+ if-then-else-endif
< > <= =>
= <>
and or xor
implies
↓
Predefiniowane typy w OCL:
Typ
Boolean
Integer
Real
String
Wartość
true, false
1, -5, 2, 34, 26524, ...
1.5, 3.14, ...
“To be or not to be...”
Operacje na typach predefiniowanych:
Typ
Integer
Real
Boolean
String
Operacja
*, +, -, /, abs()
*, +, -, /, floor()
and, or, xor, not, implies, if-then-else
concat(), size(), substring()
Element
Collection
Set(T)
OrderedSet(T)
Bag(T)
Sequence(T)
isUnique
(element niepowtarzalny)
Tak
Tak
Nie
Nie
isOrdered
(element uporządkowany)
Nie
Tak
Nie
Tak

Podobne dokumenty