wykPIO 13 4i5


Podstawy Inżynierii Oprogramowania
Wykład 4-5
1. Modelowanie strukturalne
Pojęcia podstawowe: klasa, obiekt, zależność
Diagram klas
Proces modelowania struktury oprogramowania
Przykłady
2. Elementy języka OCL
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
1
Podstawy Inżynierii Oprogramowania
Perspektywy opisu systemu/oprogramowania
diagram przypadków użycia
diagram klas WIDOK FUNKCJONALNY
" diagramy
aktywności
" diagramy
CO!
maszyny stanów
Z CZYM! JAK!
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
2
2
WIDOK ZACHOWANIA
WIDOK STRUKTURALNY
Podstawy Inżynierii Oprogramowania
Rodzaje modelowania w UML
Modelowanie statyczne
 opisuje elementy i strukturę wnętrza systemu
 diagramy klas, obiektów, komponentów
i rozmieszczenia
Modelowanie funkcjonalności systemu
 opisuje co nowy system ma
robić (lub co robi system istniejący)
 diagramy przypadków użycia
Modelowanie dynamiczne
- opisuje zachowanie systemu w
terminach interakcji elementów systemu
- diagramy aktywności, stanu, sekwencji i
współdziałania
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Poziomy modelowania systemów informatycznych (MDA) 
aspekt statyczny
CIM PIM PSM
MODEL
MODEL BIZNESOWY MODEL SYSTEMU
TECHNOLOGICZNY
Reguły biznesowe
Konceptualny model danych Logiczny model danych
Ograniczenia dziedzinowe
MODEL WYMAGAC SZBD
Wymagania funkcjonalna
Fizyczny model danych
Wymagania niefunkcjonalna
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
4
Podstawy Inżynierii Oprogramowania
Model statyczny
" Opisuje statyczną strukturę systemu (wyrażony diagramem
klas)
" Elementy modelu
 Klasa
" opis własności (atrybuty, operacje, relacje, semantyka) zbioru
obiektów (jest ich  wzorcem )
" opis typu
 Obiekt
" jednoznacznie identyfikowany byt, ściśle rozgraniczony od swego
otoczenia, ukrywający własny stan i zachowanie;
" stan obiektu jest reprezentowany przez jego atrybuty oraz relacje z
innymi obiektami, a zachowanie przez operacje, metody oraz
maszyny stanów
" instancja pewnej klasy
 Relacje
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Klasa - struktura i prezentacja
" Klasa:
 nazwa
 atrybuty
 operacje
" Prezentacja
Figura
+
rozmiar
pos : Pozycja
Widzialność
#
widoczna : Boolean = true
licznik : Number = 0
Wartości domyślne
Sygnatura
rysuj()
skaluj(p : Procent = 100)
wez_obszar() : Obszar
-
integruj()
Elementy klasowe
Ile() : Number
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Klasa  Składnia atrybutu
[widoczność][/] nazwa [krotność] [:typ] [= wartość_domyślna]
[{określenie_właściwości}]
gdzie:
widoczność: {+, - ,#, ~} oznaczające odpowiednio: public, private,
protected i package
/ oznacza atrybut pochodny
typ: typ atrybutu, np. klasa, albo typ wbudowany
krotność: liczba egzemplarzy atrybutu, (domyślnie 1) np. [2], [0..1], [*]
UWAGA:
dla atrybutów o krotności większej niż jeden, można dodatkowo podać
informacje o uporządkowaniu i unikatowości:
{ ordered } atrybuty są posortowane (domyślnie są {unordered})
{ unique }  atrybuty są unikalne (domyślna właściwość) przeciwieństwo:
{nonunique}.
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Klasa  Składnia atrybutu (cd)
wartość_domyślna : domyślna wartość atrybutu
{określenie_właściwości}: wskazuje wartości właściwości, które
mogą być stosowane dla atrybutu:
{readOnly}, {union},
{subsets },
{redefines },
{ordered}, {bag},
{seq} lub {sequence},
{composite}.
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Klasa  Składnia operacji
[widoczność] nazwa [(lista_parametrów)] [:typ_wyniku]
[{określenie-właściwości}]
gdzie:
widoczność: {+, - ,#} oznaczające odpowiednio: public, private,
protected
typ wyniku: typ zwracany przez funkcje (lub void); opcjonalny
Składnia deklaracji parametru ma postać:
[tryb] nazwa : typ [= wartość_początkowa]
Tryb może być postaci:
in - parametr wejściowy; nie może być modyfikowany
out - parametr wyjściowy; może być modyfikowany w celu
przekazania informacji wywołującemu
inout - parametr wejściowy; może być modyfikowany
wartość_początkowa : domyślna wartość parametru
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Klasa  Składnia operacji (cd)
{określenie_właściwości} może przyjąć jedną z pięciu postaci:
ØðisQuerry - oznacza klasycznÄ… funkcjÄ™;
Øðleaf - operacja, która odpowiada funkcjom niewirtualnym
Øðsequential, guarded, concurent  sÅ‚użą do modelowania operacji
współbieżnych, zapewniają odpowiedni przepływ sterowania.
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Klasa - zobowiÄ…zania
Atrybuty i operacje klasy służą do wypełniania przez nią
zobowiązań
Zobowiązania można umieszczać albo w dodatkowej (np.
czwartej) części prostokąta klasy, albo w dołączonej do niego
notatce.
-- klasa przechowuje
informacje o
zamówionych książkach
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Klasa abstrakcyjna
Klasa abstrakcyjna to klasa, która nie posiada swoich obiektów.
Stosuje się ją, by zdefiniować przodka (generalizację) dla innych
klas, których obiekty będą wykorzystywane w systemie.
Klasę abstrakcyjną wyróżnia się pisząc jej nazwę kursywą.
Klasa aktywna
Klasa, której instancje są obiektami aktywnymi tzn. obiektami
posiadającymi własny wątek sterowania i mogącymi inicjować
sterowanie.
Jest oznaczana jako:
Sterowanie
czujnikiem
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Klasy  zalecane konwencje nazewnicze
Nazwa klasy:
" pisana z dużej litery
" wyśrodkowana w górnej
Atrybuty klasy:
części
" rzeczowniki pisane z małej litery,
" pisana  tłustym drukiem
" jeśli nazwa atrybutu składa się z
" nazwy klas abstrakcyjnych
więcej niż jednego słowa, to łączy się
pisane kursywÄ…
je,
a każde kolejne jest pisane z dużej
litery np.: dataOtrzymania
Operacje klasy:
" zazwyczaj wyrażenie czasownikowe,
" pisane z małej litery,
" jeśli nazwa atrybutu składa się z więcej
niż jednego słowa, to łączy się je a każde
kolejne jest pisane z dużej litery np.:
wyslijRezerwacje()
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Notacje klasy
różne poziomy specyfikacji
skrócony
implementacyjny
analityczny
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Relacje w UML
" Zależność (dependency)
 semantyczna relacja pomiędzy dwoma elementami podstawowymi, w
której zmiana jednego elementu (niezależnego) może wpływać na
semantykę elementu drugiego (zależnego)
" Asocjacja (association)
 strukturalna zależność opisująca zbiór połączeń;
 semantyczna zależność pomiędzy dwoma lub więcej klasyfikatorami,
która pociąga powiązania pomiędzy instancjami tych klasyfikatorów
" Generalizacja (generalization)
 związek pomiędzy elementem ogólnym i jego specjalizacją
 zależność, w której obiekty będące instancjami elementu specjalizacji
(dziecko) mogą zastępować obiekty będące instancjami elementu
ogólnego - generalizacji (rodzica)
 element specjalizacji może zawierać jedynie dodatkowe własności
" Realizacja (realization)
 semantyczna relacja pomiędzy dwoma klasyfikatorami, w którym jeden z
klasyfikatorów specyfikuje kontrakt gwarantowany przez inny
klasyfikator.
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Relacja zależności
semantyczna relacja pomiędzy dwoma elementami
podstawowymi, w której zmiana jednego elementu
(niezależnego) może wpływać na semantykę elementu
drugiego (zależnego)
zależność
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Wybrane zależności między klasami
Klasa zródłowa wywołuje czynności w klasie docelowej
«call
Klasa zródłowa tworzy instancję klasy docelowej
«create
Klasa zródłowa jest pochodną klasy docelowej
«derive
Klasa zródłowa jest instancją klasy docelowej
«instantiate
Klasa docelowa zezwala klasie zródłowej na dostęp do swoich prywatnych
«permit
danych.
Klasa zródłowa klasy jest implementacją specyfikacji lub interfejsu
«realize
zdefiniowanego przez klasÄ™ docelowÄ…
Relacje miedzy różnymi poziomami semantycznymi (np. klasa zródłowa jest
«refine
klasÄ… projektu a klasa docelowa - klasÄ… analizy)
Klasa zródłowa jest substytutem dla klasy docelowej
«substitute
Stosowane do śledzenia zmian elementów w różnych modelach
«trace
Do zaimplementowania klasy zródłowej jest wymagana klasa docelowa
«use
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Relacja generalizacji
" Relacja pomiędzy klasami - dziedziczenie (inheritance)
 klasa specjalizacja (podklasa) dziedziczy wszystkie elementy:
atrybuty, operacje, relacje od generalizacji (nadklasy)
Pojazd
Aódz
Samochód
Wyścigówka Ciężarówka Motorówka Żaglówka
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Relacja generalizacji (cd)
Standardowe ograniczenia na relacjÄ™ generalizacji :
complete disjoint  wszystkie specjalizacje w generalizacji zostały
uwzględnione i specjalizacje nie mają wspólnych instancji;
incomplete disjoint  nie wszystkie specjalizacje zostały w
generalizacji uwzględnione i specjalizacje nie mają wspólnych
instancji;
complete overlapping - wszystkie specjalizacje zostały w
generalizacji uwzględnione i specjalizacje nie mają wspólnych
instancji;
incomplete overlapping- nie wszystkie specjalizacje zostały w
generalizacji uwzględnione i specjalizacje współdzielą instancje;
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Relacja generalizacji
- przykład ograniczenia
Osoba może być
Osoba może być
albo kobietÄ…
także
albo mężczyzną
pracownikiem
albo nie
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Relacja asocjacji
" strukturalna zależność opisująca zbiór połączeń;
" semantyczna zależność pomiędzy dwoma lub więcej
klasami, która pociąga powiązania pomiędzy obiektami
(instancje tych klas)
samochód
Osoba
3ð wÅ‚aÅ›ciciel
samochód kierowca
nazwa
nazwisko
0..*
nazwa()
nazwisko()
Rola
Krotność Nazwa
Krotność:
1 ; *
OK
0..1 ; 0..* ; 1..*
Okno
Przycisk
Cancel
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Klasa asocjacji
asocjacja może być reprezentowana przez klasę, aby umożliwić
opisanie atrybutów i operacji związanych z asocjacją
3ðPracownicy 0
..*
Firma Osoba
Zatrudnienie
Zarobki
Autoryzowany na 4ð
użytkownik
Osoba Komputer
0..* 0..
0..*
Autoryzacja
priorytet
uprawnienia
rozpocznij_sesje( )
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Klasa asocjacji
przekształcenie na asocjacje binarne
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Asocjacja N-arna
Dana klasa może być w asocjacji z wieloma innymi klasami
Pokój
1..1
1..1
Nauczyciel
Student
1..*
1..*
Kurs
poczÄ…tek: Time
koniec :Typ
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Relacja agregacji
klub 3ðczÅ‚onkowstwo
członek Osoba
Drużyna
0..* 1..*
1..*
0..*
Agregacja
 opisuje relację  całość-część pomiędzy
instancjami
Samochód
 ta sama część może być składową różnych
agregatów
0..1
Agregacja pełna (kompozycja)
4
4
 relacja całkowitej własności;
Koło Silnik
 jedność czasu życia całości i części:
części powstają po utworzeniu całości,
a po jej usunięciu są także usuwane.
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Relacja realizacji
Realizacja  semantyczna relacja pomiędzy dwoma klasami, w
którym jedna z klas specyfikuje kontrakt gwarantowany przez drugą
klasÄ™ ; jest specjalizacjÄ… relacji abstrakcji.
<>
Uważana za pewnego rodzaju relację zależności,
z innej zaś strony przypomina generalizację więc może być
prezentowana jako:
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Relacje
zestawienie symboli graficznych
a..b
B
A
Asocjacja
rolaB rolaA
Generalizacja
Realizacja
«rodzaj
Zależność
Agregacja
Agregacja pełna
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Wzorce strukturalne  pętle relacji
*
B
B
B
1
A
*
A
*
A
Rozszczepienie relacji: proces dekompozycji pętli relacji na
agregacjÄ™ i dziedziczenie (dwa diagramy)
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Wzorce strukturalne  przykłady pętli relacji
ojciec
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Interfejs
deklaracja podzbioru operacji, które łącznie definiują pewien zestaw
usług oferowanych przez instancję (klasy, przypadku użycia,
komponentu)
Figura
Klonowalny
Skalowalny
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Diagramy klas - przeznaczenie
" Służą do obrazowania składników modelowanego systemu i
zachodzących pomiędzy nimi powiązań statycznych
" PrzedstawiajÄ… fizycznÄ… strukturÄ™ systemu
" Należą do najczęściej używanych diagramów
Diagramy takie mogą powstawać w różnych sytuacjach projektowych,
np. podczas tworzenia słownika pojęć, budowy modelu domenowego
modelowania logicznego danych itp.
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Diagram klas -przykład
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Diagram klas -przykład
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Interfejs  przykład zastosowania
interfejs Klasa
abstrakcyjna
zależność Metoda
abstrakcyjna
implementacja
przeciążenie
private Lista pozycjeZamowienia =
[Fowler, 2005]
new ListaTablicowa();
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Diagram klas - podsumowanie
Øð Diagram powinien mieć nazwÄ™ okreÅ›lajÄ…cÄ… jego przeznaczenie
Øð Umieszczać na diagramie tylko szczegóły istotne dla danego
aspektu systemu
Øð Zachować równowagÄ™ pomiÄ™dzy diagramami obrazujÄ…cymi
statyczne i dynamiczne właściwości systemu
Øð Unikać zbyt dużych diagramów (do 15 elementów
maksymalnie!)
Øð Nie przesadzać z iloÅ›ciÄ… zwiÄ…zków na jednym diagramie
Øð Elementy diagramu powinny być uÅ‚ożone tak, aby zminimalizować
liczbÄ™ przecinajÄ…cych siÄ™ linii
ØðElementy zbliżone znaczeniowo powinny znajdować siÄ™ z pobliżu
siebie
ØðMożna (a nawet należy) używać kolorów i notatek
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Obiekt  egzemplarz klasy
Każdy egzemplarz może mieć własną nazwę, ale często na
diagramach używa się obiektów anonimowych
Nazwy obiektów są podkreślone
Jeśli zachodzi potrzeba można  łączyć diagramy.
Np. klasy i obiekty na jednym diagramie:
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Opis systemu rzeczywistego  diagram obiektów
" Instancja modelu statycznego
" Elementy
 obiekty
 połączenia (links)
Diagram Obiektów pokazuje zbiór obiektów i ich związków w ustalonej
chwili. Podobnie jak inne diagramy może zawierać ograniczenia, notatki,
pakiety/podsystemy.
Fiat:Samochód
BMW: Samochód
Ford/Służbowy
rej_no : WRC4321 rej_no : WOE1234
rej_nr : WRC5678
data : 1998 data : 1996
data : 1997
A/Manager: Osoba : Osoba
nazwisko : Kowalski nazwisko : Nowak
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Diagram pakietów - przykład
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
38
Podstawy Inżynierii Oprogramowania
Modelowanie statyczne - podsumowanie
Przedstawione:
" pojęcia: klasa, obiekt, relacja
" diagramy klas
" typy relacji
stosuje siÄ™ podczas
procesu modelowania struktury:
1. odnalezć obiekty w systemie i jego otoczeniu,
2. opisać ich strukturę,
3. dokonać klasyfikacji obiektów Ä…ð klasy,
4. opisać strukturę powiązań między klasami.
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Wszystko co można sobie wyobrazić, da się wymodelować za pomocą
UML&
ale diagramy UML nie mówią nam wszystkiego!!!
(formalnie)
Ale to nie jest semantycznie poprawne!!!
{nie może być własnym
następnikiem ani
poprzednikiem}
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
40
Podstawy Inżynierii Oprogramowania
Język definiowania ograniczeń OCL
1. Przeznaczenie i charakterystyka języka OCL
2. Ograniczenia w OCL
3. Operacje na kolekcjach
4. Przykłady
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
41
Podstawy Inżynierii Oprogramowania
Przykład diagramu klas
 Dziennik szkolny
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Dodatkowe informacje dla przykładowego systemu
 Dziennik lekcyjny
Reguły ( w tym ograniczenia)
- osoby będące uczniami są wpisane dokładnie do jednego dziennika,
liczba osób w dzienniku musi zawierać się w przedziale [20,40],
- dziennik zawiera określone przedmioty, a ich liczba musi wynosić
przynajmniej 10;
- osoba musi mieć niepuste dane tj. imię i nazwisko
- jeżeli osoba nie jest w dzienniku, to nie może posiadać w nim ocen.
- ocena musi być wystawiona dla przedmiotu i osoby z tego samego
dziennika, w którym znajduje się ta ocena,
-ocena z danego przedmiotu może być wystawiona tylko przez osobę,
która ten przedmiot prowadzi oraz ocena jest z zakresu [1..6]
-wszystkie oceny, które zostały wystawione przez nauczyciela są z
przedmiotów, które ten nauczyciel prowadzi,
- każda z ocen wystawionych dla przedmiotu jest w dzienniku, w
którym jest ten przedmiot oraz osoba prowadząca dany przedmiot jest
osobą, która wystawiła ocenę,
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Dodatkowe informacje dla przykładowego systemu
 Dziennik lekcyjny (cd)
Dodatkowo zdefiniowane powinny być warunki dla następujących
trzech operacji:
1. sredniaOsoby (o : Osoba):Real  operacja oblicza średnią
arytmetycznÄ… z wszystkich ocen danej osoby  operacja klasy Dziennik
2. wpiszOcene (komu:Osoba, z_czego:Przedmiot, jaka:Integer):Ocena
 operacja wpisywania oceny z przedmiotu (z_czego) osobie (komu) o
wartości (jaka)  jest to operacja klasy Nauczyciel; w wyniku tej
operacji zwracany jest obiekt klasy Ocena  jest to nowo stworzona
ocena,
3. poprawOcene(o : Ocena, nowa_wartosc : Integer):oclAny  popraw
ocenę (o) na nową wartość - jest to operacja klasy Nauczyciel; operacja
nie zwraca wyniku, stąd dowolny typ oclAny (wyrażenie zawsze
posiada wartość).
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Reguły biznesowe
Reguła biznesowa jest stwierdzeniem, które definiuje lub
ogranicza pewne elementy/aspekty  biznesu (rzeczywistości).
Kategorie reguł:
" Definicja terminów biznesowych (słownik: czytelnik-obywatel
polski, posiadajÄ…cy adres zam. w POLSCE& )
" Fakty pokazujące relacje między terminami (czytelnik może
wypożyczyć książkę)
" Ograniczenia (określenie zachowania, wartość; można mieć
wypożycz. max 5 książek w jednym czasie.)
" Wnioskowania (wiedza z jednej postaci przekształcona w inna
wiedzę- czytelnik musi mieć PESEL)
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Ograniczenia na diagramach UML
Ograniczenie  restrykcja nałożona na jedną lub więcej wartości
(części) modelu lub systemu obiektowego.
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 elementom
1-2: «invariant,
3 : «precondition oraz «postcondition.
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Mechanizmy rozszerzeń UML - ograniczenia
Definicja
Semantyczny warunek lub zawężenie nałożone na element modelu/
restrykcja nałożona na jedną lub więcej wartości (części) modelu lub
systemu obiektowego
Składnia
Zdefiniowana przez OCL - Object Constraint Language
zapisywane 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
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
OCL- wprowadzenie
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)
Wyrażenia 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.
Wyrażenie OCl to wyrażenie napisane zgodnie z regułami języka OCL.
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Typy języka OCL
Typy predefiniowane:
" typy podstawowe
" typy kolekcyjne
Predefiniowane typy podstawowe 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ży
poprzedzić go symbolem #.
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Ograniczenia  definicja niezmienników (1)
Inwariant (niezmiennik) klasy  wyrażenie logiczne, które powinno być
spełnione zawsze przez każdy obiekt 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 Osoba inv:
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 inv wiek_osoby: -- inwariant ma nazwÄ™
self.wiek > 18
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Zastosowanie OCL w przykładzie - niezmienniki
--------------------------------------------------------------------------------------------
context Dziennik
inv: self.uczen->size()>=20
inv: self.uczen->size()<=40
inv: self.przedmiot->size()>=10
--------------------------------------------------------------------------------------------
context Osoba
inv: not imie = ''
inv: not nazwisko = ''
inv: self.dziennik->isEmpty() implies self.ma->isEmpty()
--------------------------------------------------------------------------------------------
context Ocena
inv: not self.osoba.dziennik->isEmpty()
and self.osoba.dziennik=self.przedmiot.dziennik
and self.osoba.dziennik = self.dziennik
inv: self.przedmiot.nauczyciel->exists( p | p = self.prowadzacy )
inv: self.wartosc>0 and self.wartosc<7
--------------------------------------------------------------------------------------------
context Prowadzacy
inv: self.wystawil->forAll( o | self.przedmiot = o.przemiot )
--------------------------------------------------------------------------------------------
context Przedmiot
inv: self.ocena->forAll ( o | self.dziennik->exists(d | d = o.dziennik) )
inv: self.ocena->forAll ( o | self. nauczyciel->exists(p | p = o.nauczyciel) )
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Niezmienniki dla asocjacji klas
Opisując ograniczenia powiązań obiektu klasy można się odwoływać
do obiektów na drugim końcu powiązania poprzez nazwę roli ( lub,
gdy jej brak, przez nazwę klasy , pisaną małą literą
Odwołanie do obiektu powiązanego przez nawigację:
za pomocÄ… notacji kropkowej:
context Rezerwacja inv:
czytelnik.nazwa < >   -- czytelnik musi mieć nazwę;
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Niezmienniki dla asocjacji klas (cd)
Jeśli istnieje powiązanie obiektu z wieloma obiektami innej klasy, to
odwołania dotyczą kolekcji obiektów.
Do własności kolekcji odwołuje się poprzez notację  -> ,
Przykład:
1. jeżeli X jest kolekcją to X->size() jest wywołaniem funkcji
zwracajÄ…cej rozmiar kolekcji.
2. context Czytelnik inv:
self.rezerwacja->size() < 3 -- czytelnik ma najwyżej 2 rezerwacje
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Typy złożone języka OCL
Predefiniowane typy kolekcyjne Collection(T) to
" zbiory  Set(T)
" ciÄ…gi  Sequence(T)
" wielozbiory  Bag(T)
Elementami kolekcji mogą być również kolekcje.
W przypadku zbioru zbiorów następuje automatyczne spłaszczenie do
jednego zbioru.
Typy specjalne
" OclAny -- nadtyp wszystkich innych typów OCL,
oclIsTypeOf(T:OclType):Boolean,
oclIsKindOf(t: OclType): Boolean
" OclType, -- dowolny typ OCL,
Typy modelowe użytkownika :
wszystkie klasy, interfejsy i inne typy utworzone przez użytkownika w
modelu UML
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Operacje kolekcji
Podstawowe operacje dla kolekcji
" collection->isEmpty() : Boolean  sprawdza czy kolekcja jest pusta,
" collection->size() : Integer  zwraca rozmiar kolekcji (liczbÄ™ jej
elementów),
" collection->includes(object : OclAny) : Boolean  sprawdza czy obiekt
object 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 operacja
forAll zwraca True, jeżeli istnieje choć jeden element dla którego prawdziwe jest
wyrażenie expr , to operacja exists zwraca True.
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Iteracja po elementach kolekcji
Operacja iterate  uniwersalna operacja dla kolekcji;
collection->iterate( elem : Type; acc : Type = |
expression-with-elem-and-acc )
" Operacja ta przebiega całą kolekcję z iteratorem elem.
" 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 kolekcji
obliczane jest wyrażenie expression-with-elem-and-acc, a jego wynik jest
podstawiany do akumulatora.
Pseudokod:
rezultat = ;
while (kolekcja.notEmpty()) do
element = kolekcja.nextElement();
rezultat =
endwhile
return rezultat;
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Warunki początkowe i końcowe realizacji
operacji
context NazwaKlasy::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
Przykład
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że odwoływanie się do poprzednich
(początkowych) wartości parametrów wywołania operacji poprzez
użycie operatora @pre.
Przykład:
o.imie@pre oznacza wartość poprzednią (przed wykonaniem operacji)
atrybutu imie obiektu o
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013
Podstawy Inżynierii Oprogramowania
Zastosowanie OCL w przykładzie  pre/post operacji
--------------------------------------------------------------------------------------------
context Dziennik::sredniaOsoby(o : Osoba):Real
pre: not o.dziennik->isEmpty()
post: let ile_ocen:Integer = o.ma->size() in
if ile_ocen = 0 then
result = 0.0 else
result = o.ma->sum() / ile_ocen
end if
--------------------------------------------------------------------------------------------
context Nauczyciel::poprawOcene(o : Ocena, nowa_wartosc : Integer):oclAny
pre: nowa_wartosc>0 and
nowa_wartosc<7 and
o.wystawil = self
post: o.osoba@pre = o.osoba and
o.przedmiot@pre = o.przedmiot and
o.dziennik@pre = o.dziennik and
o.wystawil@pre = o.wystawil and
o.wartosc = nowa_wartosc
--------------------------------------------------------------------------------------------
context Nauczyciel::wpiszOcene(komu:Osoba, z_czego:Przedmiot, jaka:Integer):Ocena
pre: not komu.dziennik->isEmpty() and
komu.dziennik.przedmiot->exists(p | p.nauczyciel = self and p = z_czego)
post: oclIsNew(result) and result.osoba = komu and
result.przedmiot = z_czego and result.dziennik = komu.dziennik and
result.wystawil = self and result.wartosc = jaka
Instytut Informatyki, Wydział Informatyki i Zarządzania,
2012/2013


Wyszukiwarka

Podobne podstrony:
wykPIO 13 1
wykPIO 13 10
wykPIO 13 6i7
wykPIO 13 2
UAS 13 zao
er4p2 5 13
Budownictwo Ogolne II zaoczne wyklad 13 ppoz
ch04 (13)
model ekonometryczny zatrudnienie (13 stron)
Logistyka (13 stron)

więcej podobnych podstron