głuchowski,inżynieria oprogramowania, OCL

OCL:


Reguła biznesowa jest stwierdzeniem, które definiuje lubogranicza pewne elementy/aspekty biznesu.Opisuje operacje definicje i ograniczenia, które stosuje się doorganizacji zapewniając osiągnięcie jej celów; jest abstrakcją politykii praktyk stosowanych w organizacji.

Kategorie reguł:

Definicja terminów biznesowych (np. obywatelpolski, posiadający adres zam. w POLSCE…)

Fakty pokazujące relacje między terminami (Czytelnik może wypozyczyćksiązkę)

Ograniczenia (określenie zachowania, wartość; mozna miećwypozycz. max 5 ksiązek w jednym czasie.)

Wnioskowania (wiedza z jednej postaci przekształcona w innąwiedzę- Czytelnik musi mieć PESEL)


stereotypy : Element klasyfikacyjny, używany do specjalizacji(uzupełnienia) semantyki elementu modelu jużzdefiniowanegow języku np.: (<<nazwa>>)

wartosci znakowane : Bezpośredni opis właściwości elementu modelu w postaci parynazwa – wartość (Name = Value ;Name)

Ograniczenia : Semantyczny warunek lub zawęzenienałozone na element modelu/restrykcja nałozona na jedną lub więcej wartości (części) modelu lubsystemu obiektowego

Składnia : Zdefiniowana przez OCL - Object Constraint Languagezapisywane w nawiasach klamrowych {ograniczenie}

Przykłady

{ subset } { x.a> 10 } { ordered }


Dzięki ograniczeniom uzyskuje się:

poprawienie jakości dokumentacji

zwiększenie precyzji diagramów

polepszenie zrozumienia miedzy klientem a projektantami

Dowolne elementy modelu UML (klasy, atrybuty, operacje) mogąbyć opatrzone ograniczeniami, zapisywanymi w nawiasach {}.


Ograniczenia na model system mogą przyjąć postać:

1. niezmienników dla atrybutów klasy

2. niezmienników dla asocjacji klasy

3. określenia warunków początkowych i końcowych realizacji operacji

4. ograniczeń dla relacji generalizacji

5. precyzowania sposobu postępowania z kolekcjami

W UML są zdefiniowane 3 stereotypy odpowiadające pojęciom 1-3:

«invariant», «precondition» oraz «postcondition>>


Język OCL –podstawy

Charakterystyka języka OCL:

- język deklaratywny

- kontekstowy język wyrażeń

- silnie typizowany z rozbudowaną hierarchią typów

- bez tzw. efektów ubocznych (nie zmienia stanu modelu)

- prosty (zgodnie z deklaracją autorów)

Wyrazenia OCL są wykorzystywane m.in. do definicji:

1) inwariantów (niezmienników) klas,

2) warunków pre i post dla operacji

3) specyfikacji wyrażeń nawigacyjnych

Ograniczenie OCl jest wyrażeniem OCL typu Boolean.

WyrazenieOCl to wyrazenie napisane zgodnie z regułami języka OCL.

Typy predefiniowane:

typy podstawowe

typy kolekcyjne

Predefiniowanetypypodstawowe to:

Integer, Real, String i Boolean

Boolean – true, false

Integer -–…-1, 0, 1, …

Real -– liczby rzeczywiste...

String -– ‘ciąg znaków’

Uwaga:

UML dopuszcza stosowanie typu wyliczeniowego.Aby odwołać sie do wartości takiego typu w języku OCL należypoprzedzić go symbolem #.


Inwariant (niezmiennik) klasy – wyrazenie logiczne, które powinno byćspełnione w kazdym momencie przez wszystkie obiekty danej klasy.

context [nazwa_obiektu:]nazwa_klasy

inv [nazwa_inwariantu]: warunek_logiczny -- inwariant 1

inv [nazwa_inwariantu]: warunek_logiczny -- inwariant 2

Przykład: Osoba ma co najmniej 18 lat

context Osobainv:

self.wiek> 18

context Osoba inv:

wiek > 18 -- self opuszczony

context os: Osoba inv: -- os – jawna nazwa instancji klasy Osoba

self.wiek> 18

context Osoba invwiek_osoby: -- inwariant ma nazwę

self.wiek> 18

Ograniczenia początkowe dla atrybutów – wartościpoczątkowe atrybutu.

Przykład:

context Czytelnik Instytucjonalny::rzetelny:Wylicz

init: if self.nazwa==‘XXX’ then # wysoka else #niska


Definicja ograniczeń dla operacji

contextNazwaKlasy::NazwaOperacji(par1 : Typ1, ... ) : TypWyniku

pre [nazwa_warunku]: par1 > 0 ... -- warunki wstępne

post [nazwa_warunku]: result = par1 + …

-- 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 mozliwe jest takze odwoływanie się do poprzednich(początkowych) wartości parametrów wywołania operacji poprzezuzycie operatora @pre.

Przykład:

ob.imie@pre oznacza wartość poprzednią (przed wykonaniem operacji)atrybutu imie 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ęodwoływać do obiektów na drugim końcu powiązania poprzez nazwę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.nazwa<> ‘’

-- czytelnik musi mieć nazwę;


Ograniczenia: Nawigowanie po modelu - kolekcje

Jeśli występuje powiązanie obiektu z wieloma obiektami klasy, toodwołania dotyczą kolekcji obiektów.

Do własności kolekcji odwołuje się poprzez notację „->”,

np. jeżeli X jest kolekcją,to X->size() jest wywołaniem funkcji zwracającej rozmiarkolekcji.

Przykład:

context Czytelnik inv:

self.rezerwacja->size() < 3

-- czytelnik ma najwyżej 3 rezerwacje


Typy języka OCL (cd)

Predefiniowane typy kolekcyjne Collection(T) to

zbiory – Set(T)

ciągi – Sequence(T)

wielozbiory – Bag(T)


Typy specjalne

OclAny -- nadtyp wszystkich innych typów OCL, oclIsTypeOf(T:OclType):Boolean, oclIsKindOf(t: OclType): Boolean

OclType, -- dowolny typ OCL,

Typy użytkownika modelowe:

Wszystkie klasy, interfejsy i inne typy utworzone przez użytkownika wmodelu UML


Kolekcja

Definicje kolekcji – wyrażenia typu kolekcja

Set{1, 2, 4, 5}

-- elementy zbioru nie są uporządkowane

Sequence{1, 2, 3, 2, 3}

-- elementy ciągu są uporządkowane

Sequence{1.. 3, 2 .. 3}

-- elementy ciągu są uporządkowane

Bag{1, 2, 3, 2, 3}

-- elementy wielozbioru nie są uporządkowane


Elementami kolekcji mogą być równieżkolekcje.

W przypadku zbioru zbiorów następuje automatyczne spłaszczeniedo jednego zbioru.Na przykład, podane zbiory są identyczne:

Set{Set{1,2},Set{3,4}} i Set{1..4}


Zgodność typów Typ t1 jest zgodny z typem t2 (jest podtypemtypu t2), gdy w dowolnym miejscu, w którym oczekiwana jestinstancja (wartość) typu t2, może ona zastąpiona przez instancjętypu t1.

Każdy typ jest zgodny ze swoim nadtypem.

Relacja zgodności typów jest przechodnia.

Typ jest zgodny zInteger Real

Set(T) Collection(T)

Sequence(T) Collection(T)

Bag(T) Collection(T)

Collection(T1) Collection(T2), gdy T1 jest podtypem T2


Operacje kolekcji

Podstawowe operacje dla kolekcji

collection->isEmpty() : Boolean

sprawdza czy kolekcja jest pusta,

collection->size() : Integer

zwraca rozmiar kolekcji (ilość jejelementów),

collection->includes(object : OclAny) : Boolean

sprawdza czy obiektobject jest w danej kolekcji

collection->sum() : T

zwraca sumę wszystkich elementów kolekcji,

collection->exists(expr : OclExpression) : Boolean

collection->forAll (expr : OclExpression) : Boolean

operacje reprezentujące kwantyfikatory ogólne dla kolekcji– jeżeli dla każdego elementu kolekcji wyrażenie expr jest prawdziwe to operacjaforAll zwraca True, jeżeli istnieje choć jeden element dla którego prawdziwe jestwyrażenie expr, to operacja exists zwraca TrueOperacja collect tworzy nową kolekcję na podstawie informacji z kolekcjipierwotnej, wstawiając do wynikowej kolekcji obliczone wyrażenia

collection->collect( expression )

collection->collect( v : Type | expression-with-v )

collection->collect( v : Type | expression-with-v )

Operacja select tworzy nową kolekcję będącą podkolekcjąkolekcji, dlaktórej wywołana została operacja.

collection->select( boolean-expression )

collection->select( v | boolean-expression-with-v )

collection->select( v : Type | boolean-expression-with-v)

Wynikiem tej operacji jest nowa kolekcja z tymi elementami zkolekcji źródłowej, dla których wyrażenie logiczne w operacji selectbyło prawdziwe.

Przykład

Rezerwacja.pozycja->select(k: pozycja.Książka | k.autor =”Pressman”)


Iteracja po elementach kolekcji

Operacja iterate – uniwersalna operacja dla kolekcji; za jej pomocąmozna zdefiniować inne operacje, np. collect, sum, average, itp.Ogólnapostaćoperacji iterate:

collection->iterate( elem : Type; acc : Type = <expression> |expression-with-elem-and-acc )


Operacja ta przebiega całą kolekcję z iteratoremelem.

Acc jest akumulatorem, który może być na początku zainicjowany wartościąpoczątkową (expression).

Dla każdej wartości iteratora, czyli dla wszystkich elementów kolekcjiobliczane jest wyrażenie expression-with-elem-and-acc, a jego wynik jestpodstawiany do akumulatora.

Przykład:

operacja sumowania wartości kolekcji (elementy typu Integer)zdefiniowana jako iteracja mogłaby wyglądać następująca:

collection->iterate(x : Integer; acc : Integer = 0; acc + x)


OCL - podsumowanie

Modele UML mogą być doprecyzowane przez formalniewyrażone ograniczenia w OCL.

OCL jest językiem tekstowy, kontekstowym, silnietypizowanym.Istnieje wiele narzędzi, w tym generatory kodu (sprawdzające„w locie” ograniczenia) przeznaczone dla OCL.



Wyszukiwarka

Podobne podstrony:
głuchowski,inżynieria oprogramowania, Modelowanie konceptualne
głuchowski,inzynieria oprogramowania ,modelowanie struktury i dzialania cz2(1)
głuchowski,inzynieria oprogramowania ,modelowanie struktury i dzialania(1)
głuchowski,inżynieria oprogramowania, Modelowanie konceptualne
głuchowski,inżynieria oprogramowania, Weryfikacja i walidacja
głuchowski,inżynieria oprogramowania, Struktura modelu CMM
głuchowski,inzynieria oprogramowania ,specyfikacja slowna(1)
głuchowski,inzynieria oprogramowania ,diagramy czynnosci(1)
głuchowski,inzynieria oprogramowania ,funkcjonalnosc systemu(1)
głuchowski,inżynieria oprogamowania S, METODYKI I PROCESY PRODUKCJI OPROGRAMOWANIA
Inzynieria oprogramowania w ujeciu obiektowym UML wzorce projektowe i Java iowuje
ZadanieNaZaliczenie, WAT, semestr IV, Inżynieria oprogramowania
Rafał Polak 12k2 lab8, Inżynieria Oprogramowania - Informatyka, Semestr III, Systemy Operacyjne, Spr
zagadnienia egzaminacyjne z przedmiotu inżynieria oprogramowania zIO
Inżynieria oprogramowania Diagramy ERD
2006 06 Wstęp do Scrum [Inzynieria Oprogramowania]
sciąga moja, Informatyka SGGW, Semestr 4, Inżynieria oprogramowania, Od starszego rocznika
Tworzenie oprogramowania, Semestr 5, Inżynieria oprogramowania

więcej podobnych podstron