Podstawy programowania II 1


Podstawy programowania II
dr inż. Paweł Róg
1
Zagadnienia
%
Co to jest paradygmat programowania?
Ä…
Programowanie imperatywne
Ä…
Programowanie funkcyjne
Ä…
Programowanie logiczne
Ä…
Programowanie obiektowe
%
Cechy programowania obiektowego
Ä…
Abstrakcja
Ä…
Dziedziczenie
Ä…
Dynamiczne wiÄ…zania i polimorfizm
%
Język UML
Ä…
Geneza
Ä…
Perspektywy
Ä…
Diagramy
2
Co to jest paradygmat programowania?
%
 przyjęty sposób widzenia rzeczywistości w danej
dziedzinie, doktrynie itp. lub  zespół form fleksyjnych
(deklinacyjnych lub koniugacyjnych), właściwy
danemu typowi wyrazów; wzorzec, model deklinacyjny
lub koniugacyjny (Słownik języka polskiego PWN)
%
Ä„Ä…ÁŹ´µÄ…Å‚źÄ… (gr.) - wzorzec, przykÅ‚ad
%
zbiór mechanizmów, jakich programista używa, pisząc
program, i to, jak ów program jest następnie
wykonywany przez komputer
%
Paradygmat programowania to ogół oczekiwań
programisty wobec języka programowania
i komputera, na którym będzie działał program
3
Wybrane paradygmaty programowania
%
Programowanie imperatywne
%
Programowanie funkcyjne
%
Programowanie w logice (programowanie
logiczne)
%
Programowanie obiektowe
4
Programowanie imperatywne
%
Programowanie imperatywne to najbardziej pierwotny sposób
programowania, w którym program postrzegany jest jako ciąg
poleceń dla komputera
Ä…
Obliczenia rozumiemy tu jako sekwencję poleceń zmieniających
krok po kroku stan maszyny, aż do uzyskania oczekiwanego
wyniku.
Ä…
Stan maszyny należy z kolei rozumieć jako zawartość całej
pamięci oraz rejestrów i znaczników procesora.
Ä…
Ten sposób patrzenia na programy związany jest ściśle z budową
sprzętu komputerowego o architekturze von Neumanna, w którym
poszczególne instrukcje (w kodzie maszynowym) to właśnie
polecenia zmieniające ów globalny stan.
Ä…
Języki wysokiego poziomu  takie jak Fortran, Algol, Pascal, Ada
lub C  posługują się pewnymi abstrakcjami, ale wciąż
odpowiadajÄ… paradygmatowi programowania imperatywnego.
Ä…
Przykładowo, instrukcje podstawienia działają na danych
pobranych z pamięci i umieszczają wynik w tejże pamięci, zaś
abstrakcją komórek pamięci są zmienne.
5
Program w języku imperatywnym
program pierwszy;
var i, n, s: integer;
begin
read(n);
s := 1;
for i := 2 to n do
s := s * i;
write(s)
end.
6
Programowanie funkcyjne
%
W programowaniu funkcyjnym program to po prostu złożona
funkcja (w sensie matematycznym), która otrzymawszy dane
wejściowe wylicza pewien wynik
Ä…
Zasadniczą różnicą w stosunku do innych paradygmatów
jest brak stanu maszyny: nie ma zmiennych, a co za tym
idzie nie ma żadnych efektów ubocznych.
Ä…
Nie ma też imperatywnych z natury, tradycyjnie rozumianych
pętli (te wymagają np. zmiennych do sterowania ich
przebiegiem).
Ä…
Konstruowanie programów to składanie funkcji, zazwyczaj
z istotnym wykorzystaniem rekurencji. Charakterystyczne
jest również definiowanie funkcji wyższego rzędu, czyli
takich, dla których argumentami i których wynikami mogą
być funkcje (a nie tylko  proste dane jak liczby lub napisy).
7
Program w języku funkcyjnym
(DEFINE (suma m n)
(IF (> m n)
0
(+ m (suma (+ m 1) n))
)
)
8
Programowanie w logice
%
Na program składa się zbiór zależności
(przesłanki) i pewne stwierdzenie (cel)
Ä…
Wykonanie programu to próba udowodnienia celu
w oparciu o podane przesłanki.
Ä…
Obliczenia wykonywane sÄ… niejako  przy okazji
dowodzenia celu.
Ä…
Podobnie jak w programowaniu funkcyjnym, nie
 wydajemy rozkazów , a jedynie opisujemy, co
wiemy i co chcemy uzyskać.
9
Program w języku logicznym
ojciec(jan, jerzy).
ojciec(jerzy, janusz).
ojciec(jerzy, józef).
dziadek(X, Z) :- ojciec(X, Y), ojciec(Y, Z).
?- dziadek(X, janusz).
0
1
Programowanie obiektowe
%
W programowaniu obiektowym program to zbiór
porozumiewających się ze sobą obiektów, czyli jednostek
zawierających pewne dane i umiejących wykonywać na nich pewne
operacje
Ä…
Ważną cechą jest tu powiązanie danych (czyli stanu)
z operacjami na nich (czyli poleceniami) w całość, stanowiącą
odrębną jednostkę  obiekt.
Ä…
Cechą nie mniej ważną jest mechanizm dziedziczenia, czyli
możliwość definiowania nowych, bardziej złożonych obiektów, na
bazie obiektów już istniejących.
%
Zwolennicy programowania obiektowego uważają, że ten paradygmat
dobrze odzwierciedla sposób, w jaki ludzie myślą o świecie
Ä…
Nawet jeśli pogląd ten uznamy za przejaw pewnej egzaltacji, to
niewątpliwie programowanie obiektowe zdobyło ogromną
popularność i wypada je uznać za paradygmat obecnie
dominujÄ…cy.
1
1
Program w języku obiektowym
public class Hello {
public static void main(String[] args)
System.out.println("Hello, I am James B.");
}
}
2
1
Konkretny język programowania
ucieleśnia jeden lub więcej
paradygmatów
%
Fortran, Pascal i C to języki pozwalające
stosować paradygmat programowania
imperatywnego. Mówi się wręcz, że są to języki
imperatywne.
%
Java bądz C# to z kolei języki obiektowe,
w których typowe programowanie imperatywne
zostało mocno ograniczone.
%
Natomiast C++ jest językiem zarówno
obiektowym, jak i imperatywnym.
3
1
Programowanie obiektowe
%
Idea programowania zorientowanego obiektowo
swoimi korzeniami sięga języka Simula 67,
zaprojektowanego przez Ole-Johana Dahla
i Kristena Nygaarda jako język do zastosowań
symulacyjnych. W pełni rozwinięta została
w Smalltalku 80, zaprojektowanym jako język
 czysto obiektowy , o jednolitej, klarownej
składni. Prawdziwa powszechność i sukces
komercyjny przyszły natomiast wraz z językiem
C++, a pózniej Java.
4
1
Programowanie obiektowe
%
Język obiektowy musi posiadać trzy
podstawowe cechy:
Ä…
Abstrakcyjne typy danych.
Ä…
Dziedziczenie.
Ä…
Dynamiczne wiązania wywołań metod z metodami
(ściślej: z definicjami metod).
5
1
Klasy, obiekty i podklasy
%
Abstrakcyjne typy danych w językach obiektowych zwykle
nazywane sÄ… klasami.
%
Instancje klas sÄ… nazywane obiektami.
%
Klasa, która zdefiniowana została poprzez dziedziczenie z innej
klasy, nazywana jest klasÄ… pochodnÄ… bÄ…dz podklasÄ….
%
Klasa, z której wywiedziono podklasę, nazywana jest klasą
bazowÄ… lub nadklasÄ….
%
Podprogramy, które definiują operacje na obiektach klasy, to
metody.
%
Odwołania do metod czasem nazywa się komunikatami.
%
Zbiór wszystkich metod danego obiektu nazywany jest
protokołem komunikatów tegoż obiektu.
6
1
O obiektach słów parę
1.Wszystko jest obiektem
2.Program jest zbiorem obiektów, które poprzez
wysyłanie komunikatów mówią sobie nawzajem, co
robić
3.Każdy obiekt posiada własną pamięć, na która
składają się inne obiekty
4.Każdy obiekt posiada swój typ
5.Wszystkie obiekty danego typu mogą otrzymywać
te same komunikaty
Obiekt ma stan, zachowanie i tożsamość
Obiekt ma stan, zachowanie i tożsamość
7
1
Obiekt posiada interfejs
Nazwa typu
Żarówka
zapal()
zgaÅ›()
Interfejs
rozjaśnij()
przyciemnij()
Zarowka zr = new Zarowka();
zr.zapal();
8
1
Obiekt dostarcza usługi
%
Program świadczy pewne usługi dla użytkownika,
realizując je przy pomocy usług oferowanych przez
inne obiekty
%
Naszym celem jest stworzenie grupy obiektów (lub
odszukanie istniejÄ…cej biblioteki zawierajÄ…cej takie
obiekty!) udostępniających usługi, które optymalnie
nadajÄ… siÄ™ do rozwiÄ…zania problemu
%
Obiekty powinny się cechować wysoką spójnością
 dostarczać wyspecjalizowane usługi  realizować
dobrze jedno zadanie, nie robić zbyt wiele
9
1
Dziedziczenie
Figura
narysuj()
wymaż()
przesuń()
zwróćKolor()
ustawKolor()
OkrÄ…g
Kwadrat Trójkąt
odwróćPoziomo()
odwróćPionowo()
0
2
Przesłonięcie
Figura
narysuj()
wymaż()
przesuń()
zwróćKolor()
ustawKolor()
Okrąg Kwadrat Trójkąt
narysuj() narysuj() narysuj()
wymaż() wymaż() wymaż()
1
2
Ukrywanie implementacji
%
Twórcy klas (ang. class creators)
i programiści-klienci (ang. client
programmers)
%
Programista-klient nie powinien dotykać
delikatnego wnętrza obiektu
%
Projektant biblioteki powinien móc wymienić
wewnętrzne mechanizmy klasy, nie psując
programu programisty-klienta
%
Poziomy dostępu: public, private i protected
2
2
Sterowanie dostępem
%
W najprostszym przypadku klasa dziedziczy wszystkie byty
swojej nadklasy.
%
Sterowanie dostępem pozwala programiście na ukrycie części
typu abstrakcyjnego przed klientem poprzez zadeklarowanie
pewnych bytów jako publiczne (public), a innych jako prywatne
(private).
%
Trzeciej kategorii sterowania dostępem, chroniony (protected),
używa się, aby umożliwić dostęp do bytów klasom pochodnym,
a jednocześnie zabronić dostępu do nich klientom.
%
Klasa pochodna może modyfikować dziedziczone metody.
Zmodyfikowana metoda ma tę samą nazwę; często także ten
sam protokół. Mówi się wówczas o przedefiniowaniu
odziedziczonej metody
3
2
Dziedziczenie pojedyncze i wielokrotne
%
Jeżeli nowa klasa jest podklasą tylko jednej
klasy bazowej, to taki proces derywacji
nazywany jest dziedziczeniem pojedynczym.
%
Jeżeli nowa klasa ma więcej niż jedną
nadklasÄ™, to proces nazywamy dziedziczeniem
wielokrotnym.
4
2
Metody i klasy abstrakcyjne
%
Zdarza się, że klasa jest na tyle wysoko w hierarchii
dziedziczenia, że nie ma sensu tworzyć dla niej
instancji.
%
Podobnie, nie ma sensu implementować metody,
która jest zbyt wysoko w hierarchii (jako że została już
zaimplementowana w podklasach).
%
Taka metoda nazywana jest metodÄ… abstrakcyjnÄ….
%
Klasa, która zawiera przynajmniej jedną metodę
abstrakcyjnÄ…, nazywana jest klasÄ… abstrakcyjnÄ….
5
2
Metody i zmienne obiektu i klasy
%
Klasy mogą mieć metody i zmienne instancyjne lub metody
i zmienne klasowe.
%
W tym pierwszym przypadku każdy obiekt z danej klasy ma
swój własny zbiór instancji zmiennych, w których
przechowywany jest stan obiektu.
%
W drugim przypadku, metody i zmienne przynależą do całej
klasy i w klasie jest tylko jedna ich kopia. Mówi się
o metodach/zmiennych klasowych lub statycznych.
%
Metody instancyjne sÄ… zazwyczaj przechowywane w jednym
egzemplarzu (tak jak statyczne), ale wywołać je można tylko za
pomocÄ… instancji obiektu.
%
Wywołanie metody statycznej nie wymaga powoływania do
życia instancji obiektu.
6
2
Polimorfizm i dynamiczne wiÄ…zania
%
Zmienne typu klasy bazowej mogą odwoływać
się także do obiektów dowolnej podklasy tejże
klasy bazowej.
%
Nadklasa może definiować metody, które są
przedefiniowywane przez jej podklasy.
%
Kiedy taka przedefiniowana metoda jest
wywoływana przez zmienną klasy bazowej, to
wywołanie to jest dynamicznie wiązane
z właściwą metodą.
%
Jest to rodzaj polimorfizmu: dynamiczne
wiązanie wywołań z definicjami metod.
7
2
Polimorfizm
SterownikPtaka Ptak
przemieść() poruszaj()
Gęś Pingwin
poruszaj() poruszaj()
8
2
Czy wszystko jest obiektem?
%
W czystym modelu obliczeń zorientowanych obiektowo wszystkie
typy sÄ… klasami.
%
Nie ma rozróżnienia pomiędzy klasami predefiniowanymi w języku
a klasami definiowanymi przez użytkownika.
%
Wszystkie obliczenia realizowane sÄ… poprzez przekazywanie
komunikatów, czyli wywołania metod.
%
Jest to rozwiązanie eleganckie, ale nawet proste operacje muszą być
wówczas wykonywane przy użyciu mechanizmu przekazywania
komunikatów.
%
Jedną z alternatyw jest zachowanie imperatywnego modelu typów
i dodanie modelu obiektowego, tak jak np. w C++. To bywa
kłopotliwe.
%
Inny pomysł to imperatywna struktura typów dla prostych typów
skalarnych, a obiektowa dla pozostałych (np. w Javie). To również
bywa mylÄ…ce...
9
2
Czy podklasy sÄ… podtypami?
%
Innymi słowy, czy można powiedzieć, że obiekt z podklasy jest też
obiektem jej klasy bazowej?
%
Przykład: Mamy klasę zwierzę i dwie podklasy z niej wywiedzione:
pies i kot. Czy zatem każdy obiekt typu pies jest również obiektem
typu zwierzÄ™? A co z kotem...?
%
Owa relacja  bycia obiektem nadklasy gwarantowałaby, że wszędzie
tam, gdzie może pojawić się obiekt z klasy bazowej, może się
również pojawić (bez wystąpienia błędu typu) obiekt z podklasy.
%
Wywiedziona klasa może być nazwana podtypem, jeżeli jej obiekty
są w powyższej relacji z klasą bazową.
%
Podklasa ma w tej sytuacji ograniczone pole manewru: może jedynie
dodawać zmienne i metody oraz przedefiniowywać dziedziczone
metody w sposób zapewniający zgodność typów.
%
Relacje bycia podtypem i dziedziczenia nie są tożsame (do tego
jeszcze wrócimy).
0
3
Sprawdzanie zgodności typów i polimorfizm
%
Polimorfizm rozumiemy tu jako użycie polimorficznego wskaznika
(referencji) do wywołania metody, która została przedefiniowana w
jednej z klas pochodnych.
%
Mówi się także, że metoda została nadpisana.
%
Owa polimorficzna zmienna (wskaznik lub referencja) jest typu klasy
bazowej. W klasie tej znajduje się przynajmniej deklaracja protokołu
wołanej metody, przedefiniowanej następnie w klasie pochodnej.
%
Zmienna polimorficzna może wskazywać na obiekty zarówno klasy
bazowej, jak i pochodnej. StÄ…d konkretnego typu wskazywanego
obiektu nie da się określić statycznie.
%
Wiązanie wywołań realizowanych za pomocą zmiennych
polimorficznych z metodami musi się zatem odbywać dynamicznie.
%
Kiedy następuje sprawdzenie zgodności typów dla takiego
wywołania?
%
W języku silnie typowanym sprawdzenie powinno być statyczne. W
konsekwencji trzeba narzucić istotne ograniczenia, np.
przedefiniowana metoda musi zachować taki sam protokół.
%
Alternatywą jest dynamiczne sprawdzanie zgodności typów, czyli
wykonywane dopiero w chwili, gdy następuje wywołanie.
1
3
Dziedziczenie pojedyncze i wielokrotne
%
Czy język pozwala na dziedziczenie wielokrotne?
%
Jeśli tak, to jak rozstrzygamy odwołania do bytów (o takiej
samej nazwie) mających definicje w dwóch klasach
bazowych?
%
Rozstrzyganie takich wieloznaczności może być jawne, jak
np. w C++ za pomocÄ… operatora zakresu ::.
%
Jeśli ta sama zmienna jest dziedziczona z klasy położonej
o dwa poziomy wyżej w hierarchii dziedziczenia za
pośrednictwem dwóch klas bazowych, to czy dziedziczone
jest jedno wcielenie, czy dwa?
2
3
%
Załóżmy, że klasa A zawiera pole x:
class A {
...
int x;
...
};
%
Dwie klasy, B1 i B2, sÄ… podklasami klasy A, dziedziczÄ…c pole x:
class B1 : A {...};
class B2 : A {...};
%
Kolejna klasa, powiedzmy C, jest podklasÄ… dziedziczÄ…cÄ… po B1
i B2:
class C : B1, B2 {...};
%
Ile pól x jest zatem w klasie C?
3
3
Alokacja i dealokacja obiektów
%
Załóżmy, że:
Ä…
Klasa B jest podklasÄ… i podtypem klasy A.
Ä…
Zmienna xb jest typu B.
Ä…
Zmienna xa jest typu A.
%
Podstawienie  xa := xb jest zatem prawidłowe.
%
Zauważmy, że obiekt xb jest większy niż obiekt xa (gdyż może mieć
dodatkowe pola).
%
Co zrobić, jeśli obiekt xa jest na stosie i niemożliwe jest powiększenie
zaalokowanego dla niego obszaru pamięci?
%
Drugie pytanie, związane z pamięcią: Czy obiekty alokowane na
stercie sÄ… dealokowane jawnie czy niejawnie?
%
Zauważmy, że dla obiektów alokowanych na stosie ta kwestia nie jest
istotna: zachowują się one tak samo jak zwykłe zmienne lokalne,
alokowane przy wejściu do podprogramu i dealokowane przy wyjściu.
4
3
WiÄ…zanie statyczne i dynamiczne
%
Czy wiązanie wywołań z metodami zawsze jest
dynamiczne?
%
Innymi słowy  czy tam, gdzie to możliwe,
kompilator wiąże wywołania z metodami
statycznie?
%
Być może programista powinien mieć
możliwość wskazania, o jakie wiązanie chodzi.
5
3
Implementacja konstrukcji obiektowych
%
Dwa zasadnicze problemy:
Ä…
Alokacja pamięci dla zmiennych
instancyjnych.
Ä…
Dynamiczne wiązanie wywołań z metodami.
6
3
Przechowywanie danych instancyjnych
%
Zmienne należące do instancji obiektu są
przechowywane w rekordzie instancyjnym.
%
Jako że jego struktura jest statyczna, jest
tworzona w czasie kompilacji.
%
W czasie wykonania struktura ta używana jest
jako wzorzec do tworzenia danych w
instancjach.
%
Podklasy rozszerzajÄ… strukturÄ™ rekordu
instancyjnego.
7
3
Dynamiczne wiązanie wywołań z metodami
%
Metody wiÄ…zane statycznie nie wymagajÄ…
obsługi w rekordzie instancyjnym.
%
Metody wiązane dynamicznie, które mogą być
wywoływane z danej klasy, są zapisane
w tablicy metod wirtualnych (określanej zwykle
mianem vtable).
%
Rekord instancyjny każdego obiektu zawiera
wskaznik do vtable.
%
Podstawienia pod zmiennÄ… polimorficznÄ…
muszą dodatkowo ustawiać odpowiednio ów
wskaznik
8
3
Wielokrotne wykorzystanie
implementacji
%
Kompozycja  umieszczenie obiektów innych
klas wewnÄ…trz nowej klasy (tworzenie
obiektu składowego)
%
Dziedziczenie  utworzenie nowej klasy na
podstawie klasy już istniejącej  nowa klasa
przejmuje właściwości klasy bazowej, może
je modyfikować i dodawać nowe
9
3
Obiektowe i strukturalne metody analizy
%
Metody strukturalne
Ä…
Tradycyjne, rozwijane od lat 60-tych XX w.
Ä…
Wyróżniają w analizowanym systemie dwie składowe:
"'
Pasywne (dane)
"'
Aktywne (operacje)
%
Metody obiektowe
Ä…
Pojawiły się w latach 80-tych XX w., nadal intensywnie
rozwijane
Ä…
Wyróżniają w analizowanym systemie składowe (klasy
obiektów), które łączą w sobie możliwość
przechowywania danych (stan obiektu) oraz
wykonywania pewnych operacji (metody obiektu).
0
4
Analiza strukturalna
%
Rozpoczyna się od budowy dwóch różnych
modeli systemu:
Ä…
Modelu danych (pasywna część systemu)
Ä…
Modelu funkcji (aktywna część systemu)
%
Te dwa modele są następnie integrowane:
powstaje model przepływu danych
1
4
Analiza strukturalna
%
Budowa dwóch różnych modeli systemu
ułatwia zrozumienie jego różnorodnych
aspektów
%
Integracja dwóch różnych modeli może być
bardzo trudna
%
Skuteczne, jeśli jeden z aspektów (pasywny
lub aktywny) jest wyraznie bardziej istotny
%
Mało skuteczne, jeśli system ma realizować
skomplikowane funkcje na złożonych danych
2
4
Analiza obiektowa
%
Obiekt posiada:
Ä…
Tożsamość (da się jednoznacznie wyróżnić w
ramach systemu)
Ä…
Stan
Ä…
Zachowanie
%
Obiekty są grupowane w klasy złożone
z obiektów o podobnych stanach i
zachowaniu
3
4
Analiza obiektowa
%
Przyczyny popularności:
Ä…
Umożliwia analizę złożonych systemów
Ä…
Ułatwia implementację systemów w obiektowych
językach programowania
Ä…
Model obiektowy można zaimplementować np.
stosując języki proceduralne i relacyjną bazę
danych
Ä…
Trudna jest implementacja modelu
strukturalnego w obiektowych językach
programowania
4
4
Notacje obiektowe
%
Lata 80-te XX w.  pojawienie się obiektów
%
1988  1992  burzliwy rozwój metod analizy
obiektowej: OMT (Rumbaugh, 1991), OOA i OOD
(Coad i Yourdon, 1994), OOAD (Booch, 1994),
OOSE (Jacobson, 1992) ...
%
1994  1995  Grady Booch i Jim Rumbaugh
pracujÄ… nad MetodÄ… ZunifikowanÄ…
%
1996  Grady Booch, Jim Rumbaugh i Ivar
Jacobson pracujÄ… nad UML
%
1997  wersja 1.0 UML
5
4
UML
%
Zunifikowany Język Modelowania (ang. Unified
Modeling Language  UML) jest następcą obiektowych
metod analizy i projektowania, które pojawiły się na
przełomie lat osiemdziesiątych i dziewięćdziesiątych.
%
Jest standardem OMG (Object Managment Group) 
organizacji standaryzujÄ…cej w dziedzinie technik
obiektowych.
%
Jest językiem modelowania, a nie metodą. Większość
metod składa się z języka modelowania (notacja
graficzna) i procesu (kroki projektowania i tworzenia
oprogramowania).
%
Jest powiÄ…zany z Rational Unified Process (RUP)
6
4
Perspektywy UML
SÅ‚ownictwo Scalanie systemu
Funkcjonalność Zarządzanie konfiguracją
Perspektywa Perspektywa
projektowa implementacyjna
Perspektywa
przypadków
Zachowanie
użycia
Perspektywa Perspektywa
procesowa wdrożeniowa
Opracowanie układu systemu
Efektywność
Rozmieszczenie
Skalowalność
Dostarczenie
Przepustowość
Instalacja
7
4
Perspektywa przypadków użycia
W perspektywie tej bierze siÄ™ pod uwagÄ™
zachowanie systemu widziane oczami
użytkowników, analityków i osób
wykonujÄ…cych testy. Nie definiuje siÄ™
rzeczywistej organizacji systemu, a opisuje
się czynniki wpływające na kształt
architektury systemu. W UML aspekty
statyczne tej perspektywy wyraża się za
pomocą diagramów przypadków użycia, a
dynamiczne za pomocą diagramów
interakcji, diagramów stanu i diagramów
czynności
8
4
Perspektywa projektowa
W perspektywie tej kładzie się nacisk na klasy,
interfejsy i kooperacje, które razem składają
się na słownictwo danego zadania i na
rozwiÄ…zanie tego zadania. Perspektywa ta
pomaga w zapisywaniu wymagań
funkcjonalnych, czyli usług, które system
powinien udostępniać swoim użytkownikom.
W UML aspekty statyczne tej perspektywy
wyraża się za pomocą diagramów klas i
diagramów obiektów, a dynamiczne za
pomocą diagramów interakcji, diagramów
stanów i diagramów czynności.
9
4
Perspektywa procesowa
W perspektywie tej zwraca siÄ™ uwagÄ™ na wÄ…tki
i procesy, które kształtują mechanizmy
współbieżności i synchronizacji w systemie.
Dotyczy ona głównie efektywności,
skalowalności i przepustowości systemu.
W UML aspekty statyczne i dynamiczne tej
perspektywy sÄ… przedstawiane na takich
samych rodzajach diagramów jak w
przypadku perspektywy projektowej, z tÄ…
tylko różnicą, że główny nacisk kładzie się na
klasy aktywne, które reprezentują procesy i
wÄ…tki.
0
5
Perspektywa implementacyjna
W perspektywie tej znaczenie majÄ…
komponenty i pliki, użyte do scalenia i
udostępnienia systemu fizycznego. Wiąże się
ona z zarzÄ…dzaniem konfiguracjÄ…
poszczególnych wersji systemu, złożonych z
rozmaitych niezależnych komponentów i
plików, które można zepolić na wiele
sposobów, aby otrzymać działający system.
W UML aspekty statyczne tej perspektywy
wyraża się za pomocą diagramów
komponentów, a dynamiczne za pomocą
diagramów interakcji, diagramów stanów i
diagramów czynności.
1
5
Perspektywa wdrożeniowa
W perspektywie tej kładzie się nacisk na węzły,
składające się na sprzęt, na którym system
będzie uruchamiany. Wiąże się ona głównie
z rozmieszczeniem, dostarczeniem i
instalacją części systemu fizycznego. W
UML aspekty statyczne tej perspektywy
wyraża się za pomocą diagramu wdrożenia,
a dynamiczne za pomocą diagramów
interakcji, diagramów stanów i diagramów
czynności.
2
5
Perspektywy UML (II)
%
Pojęciowa
Reprezentuje pojęcia analizowanej dziedziny. Pojęcia te będą
związane z klasami je implementującymi, ale często nie będzie między nimi
pełnej odpowiedniości. Model pojęciowy powinien być tworzony niezależnie od
oprogramowania, które może implementować ten model, tak aby można go było
traktować jako niezależny językowo.
%
Specyfikacyjna
Dotyczy już oprogramowania, ale raczej interfejsów niż
implementacji. Mimo że programowanie obiektowe kładzie duży nacisk na
różnicę między interfejsem a implementacją, to w praktyce często się o tym
zapomina, bo pojęcie klasy w językach programowania obiektowego łączy
pojęcia interfejsu i implementacji. Nie powinno tak być  kluczem do
efektywnego programowania obiektowego jest programowanie sterowane
interfejsem klasy, a nie sposobem implementacji.
%
Implementacyjna
Dokładnie ukazuje całą implementację. Jest to prawdopodobnie
najczęściej używana perspektywa, ale w wielu przypadkach lepiej przyjąć
perspektywÄ™ specyfikacyjnÄ….
3
5
Rodzaje diagramów UML
%
Diagramy struktury
służą do obrazowania, specyfikowania,
tworzenia i dokumentowania statycznych
aspektów systemu
%
Diagramy zachowania
służą do obrazowania, specyfikowania,
tworzenia i dokumentowania dynamicznych
aspektów systemu
4
5
Rodzaje diagramów UML
%
Diagramy struktury
Ä…
Diagram klas
Ä…
Diagram obiektów
Ä…
Diagram pakietów
Ä…
Diagramy fizyczne
"'
Diagram komponentów
"'
Diagram wdrożenia
%
Diagramy zachowania
Ä…
Diagram przypadków użycia
Ä…
Diagramy interakcji
"'
Diagram przebiegu (sekwencji)
"'
Diagram kooperacji (współdziałania)
Ä…
Diagram stanów
Ä…
Diagram czynności
5
5
Diagram klas
Na diagramie klas mogą znalezć się klasy,
interfejsy, kooperacje i związki między nimi.
Jest to najczęściej spotykany diagram w
modelach obiektowych. Odnosi siÄ™ do
statycznych aspektów perspektywy
projektowej. Diagram klas uwzględniający
klasy aktywne dotyczy statycznych aspektów
perspektywy procesowej.
6
5
Diagram klas
%
Opisuje typy obiektów w systemie i różne
rodzaje statycznych relacji między nimi. Są
dwa główne rodzaje relacji statycznych:
Ä…
asocjacje (np. klient może wypożyczyć kilka
kaset wideo)
Ä…
podtypy (np. pielęgniarka jest osobą)
%
Diagram klas pokazuje również atrybuty
i operacje klas oraz ograniczenia tego, w jaki
sposób obiekty mogą być powiązane.
7
5
Diagramy klas
Zamówienie Klient
1
nazwa
DataOtrzymania
adres
przedpłata
*
numer: String
WiarygodnośćKredytowa(): String
cena: waluta
wyślij()
zamknij()
Klient firmowy Klient indywidualny
1
numerKartyKredytowej
osobaDoKontaktów
{jeśli Zamówienie.klient.
wiarygodnośćKredytowa
wiarygodnośćKredytowa
limitKredytowy
jest  niska , to Zamówienie.
przedpłata musi być
prawdziwe}
przypomnij()
{wiarygodnośćKredytowa()
obciążZaMiesiąc(Integer)
==  niska }
pozycje
* *
przedstawiciel
Pozycja zamówienia
handlowy
0..1
ilość: Integer
Pracownik
cena: waluta
zapewniona: Boolean
1
*
Towar
8
5
Diagramy klas
klasa
Zamówienie Klient
1
nazwa
DataOtrzymania
adres
przedpłata
*
numer: String
WiarygodnośćKredytowa(): String
cena: waluta
wyślij()
zamknij()
Klient firmowy Klient indywidualny
1
numerKartyKredytowej
osobaDoKontaktów
{jeśli Zamówienie.klient.
wiarygodnośćKredytowa
wiarygodnośćKredytowa
limitKredytowy
jest  niska , to Zamówienie.
przedpłata musi być
prawdziwe}
przypomnij()
{wiarygodnośćKredytowa()
obciążZaMiesiąc(Integer)
==  niska }
pozycje
* *
przedstawiciel
Pozycja zamówienia
handlowy
0..1
ilość: Integer
Pracownik
cena: waluta
zapewniona: Boolean
1
*
Towar
9
5
Diagramy klas
atrybuty
Zamówienie Klient
1
nazwa
DataOtrzymania
adres
przedpłata
*
numer: String
WiarygodnośćKredytowa(): String
cena: waluta
wyślij()
zamknij()
Klient firmowy Klient indywidualny
1
numerKartyKredytowej
osobaDoKontaktów
{jeśli Zamówienie.klient.
wiarygodnośćKredytowa
wiarygodnośćKredytowa
limitKredytowy
jest  niska , to Zamówienie.
przedpłata musi być
prawdziwe}
przypomnij()
{wiarygodnośćKredytowa()
obciążZaMiesiąc(Integer)
==  niska }
pozycje
* *
przedstawiciel
Pozycja zamówienia
handlowy
0..1
ilość: Integer
Pracownik
cena: waluta
zapewniona: Boolean
1
*
Towar
0
6
Diagramy klas
Zamówienie Klient
1
operacj
nazwa
DataOtrzymania
adres
e
przedpłata
*
numer: String
WiarygodnośćKredytowa(): String
cena: waluta
wyślij()
zamknij()
Klient firmowy Klient indywidualny
1
numerKartyKredytowej
osobaDoKontaktów
{jeśli Zamówienie.klient.
wiarygodnośćKredytowa
wiarygodnośćKredytowa
limitKredytowy
jest  niska , to Zamówienie.
przedpłata musi być
prawdziwe}
przypomnij()
{wiarygodnośćKredytowa()
obciążZaMiesiąc(Integer)
==  niska }
pozycje
* *
przedstawiciel
Pozycja zamówienia
handlowy
0..1
ilość: Integer
Pracownik
cena: waluta
zapewniona: Boolean
1
*
Towar
1
6
Diagramy klas
Diagramy klas
Zamówienie Klient
1
nazwa
DataOtrzymania
adres
przedpłata
*
numer: String
WiarygodnośćKredytowa(): String
cena: waluta
uogólnienie
wyślij()
zamknij()
Klient firmowy Klient indywidualny
1
numerKartyKredytowej
osobaDoKontaktów
{jeśli Zamówienie.klient.
wiarygodnośćKredytowa
wiarygodnośćKredytowa
limitKredytowy
jest  niska , to Zamówienie.
przedpłata musi być
prawdziwe}
przypomnij()
{wiarygodnośćKredytowa()
obciążZaMiesiąc(Integer)
==  niska }
pozycje
* *
przedstawiciel
Pozycja zamówienia
handlowy
0..1
ilość: Integer
Pracownik
cena: waluta
zapewniona: Boolean
1
*
Towar
2
6
Diagramy klas
asocjacja
Zamówienie Klient
1
nazwa
DataOtrzymania
adres
przedpłata
*
numer: String
WiarygodnośćKredytowa(): String
cena: waluta
wyślij()
zamknij()
Klient firmowy Klient indywidualny
1
numerKartyKredytowej
osobaDoKontaktów
{jeśli Zamówienie.klient.
wiarygodnośćKredytowa
wiarygodnośćKredytowa
limitKredytowy
jest  niska , to Zamówienie.
przedpłata musi być
prawdziwe}
przypomnij()
{wiarygodnośćKredytowa()
obciążZaMiesiąc(Integer)
==  niska }
pozycje
* *
przedstawiciel
Pozycja zamówienia
handlowy
0..1
ilość: Integer
Pracownik
cena: waluta
zapewniona: Boolean
1
*
Towar
3
6
Diagramy klas
Krotność:
obowiÄ…zkowe
Zamówienie Klient
1
nazwa
DataOtrzymania
adres
przedpłata
*
numer: String
WiarygodnośćKredytowa(): String
cena: waluta
wyślij()
zamknij()
Klient firmowy Klient indywidualny
1
numerKartyKredytowej
osobaDoKontaktów
{jeśli Zamówienie.klient.
wiarygodnośćKredytowa
wiarygodnośćKredytowa
limitKredytowy
jest  niska , to Zamówienie.
przedpłata musi być
prawdziwe}
przypomnij()
{wiarygodnośćKredytowa()
obciążZaMiesiąc(Integer)
==  niska }
pozycje
* *
przedstawiciel
Pozycja zamówienia
handlowy
0..1
ilość: Integer
Pracownik
cena: waluta
zapewniona: Boolean
1
*
Towar
4
6
Diagramy klas
Krotność:
wiele
Zamówienie Klient
1
nazwa
DataOtrzymania
adres
przedpłata
*
numer: String
WiarygodnośćKredytowa(): String
cena: waluta
wyślij()
zamknij()
Klient firmowy Klient indywidualny
1
numerKartyKredytowej
osobaDoKontaktów
{jeśli Zamówienie.klient.
wiarygodnośćKredytowa
wiarygodnośćKredytowa
limitKredytowy
jest  niska , to Zamówienie.
przedpłata musi być
prawdziwe}
przypomnij()
{wiarygodnośćKredytowa()
obciążZaMiesiąc(Integer)
==  niska }
pozycje
* *
przedstawiciel
Pozycja zamówienia
handlowy
0..1
ilość: Integer
Pracownik
cena: waluta
zapewniona: Boolean
1
*
Towar
5
6
Diagramy klas
Zamówienie Klient
1
nazwa
DataOtrzymania
adres
przedpłata
*
numer: String
WiarygodnośćKredytowa(): String
cena: waluta
wyślij()
zamknij()
Klient firmowy Klient indywidualny
1
numerKartyKredytowej
osobaDoKontaktów
{jeśli Zamówienie.klient.
wiarygodnośćKredytowa
wiarygodnośćKredytowa
limitKredytowy
jest  niska , to Zamówienie.
przedpłata musi być
prawdziwe}
przypomnij()
{wiarygodnośćKredytowa()
obciążZaMiesiąc(Integer)
==  niska }
pozycje
* *
przedstawiciel
Pozycja zamówienia
handlowy
0..1
ilość: Integer
Pracownik
cena: waluta
zapewniona: Boolean Krotność:
1
* opcjonalny
Towar
6
6
Diagramy klas
Zamówienie Klient
1
nazwa
DataOtrzymania
adres
przedpłata
*
numer: String
WiarygodnośćKredytowa(): String
cena: waluta
wyślij()
zamknij()
Klient firmowy Klient indywidualny
1
numerKartyKredytowej
osobaDoKontaktów
{jeśli Zamówienie.klient.
wiarygodnośćKredytowa
wiarygodnośćKredytowa
Nazwa roli
limitKredytowy
jest  niska , to Zamówienie.
przedpłata musi być
prawdziwe}
przypomnij()
{wiarygodnośćKredytowa()
obciążZaMiesiąc(Integer)
==  niska }
pozycje
* *
przedstawiciel
Pozycja zamówienia
handlowy
0..1
ilość: Integer
Pracownik
cena: waluta
zapewniona: Boolean
1
*
Towar
7
6
Diagramy klas
Zamówienie Klient
1
nazwa
DataOtrzymania
adres
przedpłata
*
numer: String
WiarygodnośćKredytowa(): String
cena: waluta
wyślij()
zamknij()
Klient firmowy Klient indywidualny
1
numerKartyKredytowej
osobaDoKontaktów
{jeśli Zamówienie.klient.
wiarygodnośćKredytowa
wiarygodnośćKredytowa
limitKredytowy
jest  niska , to Zamówienie.
przedpłata musi być
prawdziwe}
przypomnij()
{wiarygodnośćKredytowa()
obciążZaMiesiąc(Integer)
==  niska }
pozycje
* *
przedstawiciel
Pozycja zamówienia
handlowy
0..1
ilość: Integer
Pracownik
ograniczeni
cena: waluta
e
zapewniona: Boolean
1
*
Towar
8
6
Diagramy klas
nawigowalność
Zamówienie Klient
1
nazwa
DataOtrzymania
adres
przedpłata
*
numer: String
WiarygodnośćKredytowa(): String
cena: waluta
wyślij()
zamknij()
Klient firmowy Klient indywidualny
1
numerKartyKredytowej
osobaDoKontaktów
{jeśli Zamówienie.klient.
wiarygodnośćKredytowa
wiarygodnośćKredytowa
limitKredytowy
jest  niska , to Zamówienie.
przedpłata musi być
prawdziwe}
przypomnij()
{wiarygodnośćKredytowa()
obciążZaMiesiąc(Integer)
==  niska }
pozycje
* *
przedstawiciel
Pozycja zamówienia
handlowy
0..1
ilość: Integer
Pracownik
cena: waluta
zapewniona: Boolean
1
*
Towar
9
6
Diagram obiektów
%
Diagram obiektów jest obrazem obiektów
w systemie w określonej chwili
%
Jest bardzo przydatny, gdy możliwe
powiązania między obiektami są
skomplikowane
Element struktury
organizacyjnej
* dzieci
siedziba
Osoba Organizacja
1 rodzic
0
7
Diagram obiektów
Element struktury
organizacyjnej
* dzieci
siedziba
Osoba Organizacja
1 rodzic
dział oprogramowania: Organizacja
siedziba =  Warszawa
rodzic
narzędzia: Organizacja aplikacje: Organizacja
siedziba =  Poznań siedziba =  Paryż
rodzic
Anna: Osoba Jan: Osoba
siedziba =  Kraków siedziba =  Kraków
1
7
Operacje i atrybuty w zasięgu klasy
Zamówienie
zasięg
instancji
zasięg
pobierzNumer()
klasy
pobierzNastępnyNowyNumer()
%
UML określa operację lub atrybut, których
obszar działania to klasa, a nie instancja tej
klasy, jako będące w zasięgu klasy.
%
Jest to równoważne statycznym składowym
w C++ lub Javie
2
7
Klasyfikacja wielokrotna
Chirurg
wyróżnik
Lekarz
Kobieta
Lekarz
domowy
Rola
Osoba Pielęgniarz
Płeć
{complete}
Pacjent
Mężczyzna
Fizjo-
terapeuta
Pacjent
3
7
Klasyfikacja dynamiczna
Lekarz
Kobieta
Zawód
<>
Osoba Pielęgniarz
Płeć
{complete}
Mężczyzna
Fizjo-
terapeuta
4
7
Agregacja i zawieranie
zawieranie
{ordered}
Punkt
1
3..*
Koło
WielokÄ…t
promień
*
*
Styl
1 1
kolor
agregacja
jestWypełniony
5
7
Alternatywna notacja dla zawierania
Koło
Koło Wielokąt
{ordered} 3..*
1
1
Punkt
Punkt Punkt
*
*
Styl
1 1
6
7
Asocjacje i atrybuty pochodne
asocjacja
atrybut
pochodna
{saldo = suma wartości zapisów}
pochodny
komponenty
Rachunek Zapis
{hierarchy} /Zapisy
*
*
/saldo: Waluta wartość: Waluta
Rachunek Rachunek
skrócony szczegółowy
0..1
1
uwaga
Rola zapisów pochodzi
z komponenty.zapisy
7
7
Klasy abstrakcyjne
Okno w Windows
pierwszyPlan()
ostatniPlan()
Okno
Okno w X11
{abstract}
Edytor
tekstów
pierwszyPlan() pierwszyPlan()
ostatniPlan() ostatniPlan()
zależność
Okno w MacIntoshu
pierwszyPlan()
ostatniPlan()
8
7
Klasy abstrakcyjne
<>
InputStream CzytnikZamówień
DataInput
uogólnienie
zależność
DataInputStream
realizacja
9
7
Notacja  lizakowa
interfejs
CzytnikZamówień
DataInput
DataInputStream
zależność
InputStream
0
8
Zbiory dla wielokrotnych stron asocjacji
%
Strona wielokrotna asocjacji to ta, której
górne ograniczenie krotności jest większe niż
1(na przykład *)
%
Zwykle strony wielokrotne traktujemy jako
zbiory (nieuporzÄ…dkowane, nie powtarzajÄ…
siÄ™)
%
Inne możliwości:
Ä…
{ordered}
Ä…
{bag}
Ä…
{hierarchy}
Ä…
{dag}
1
8
Asocjacje kwalifikowane
Pozycja zamówienia
0..1
Zamówienie Ilość: Liczba
Towar
Pozycja
2
8
Klasy asocjacyjne
Pracodawca
*
Osoba Przedsiębiorstwo
0..1
Zatrudnienie
okres: zakresDat
3
8
Klasy asocjacyjne
/Pracodawca
Zatrudnienie
0..1
*
1 0..1 1
*
Osoba okres: zakresDat Przedsiębiorstwo
4
8
Klasy asocjacyjne
Pracodawca
*
Osoba Przedsiębiorstwo
*
Zatrudnienie
okres: zakresDat
5
8
Klasy asocjacyjne
* *
Osoba Umiejętności
Kwalifikacje
poziom
6
8
Klasy asocjacyjne
Pracodawca
<>
*
Osoba Przedsiębiorstwo
0..1
7
8
Klasy parametryzowane
T
T
Zbiór
Zbiór
wstaw(T)
wstaw(T)
usuń(T)
usuń(T)
<>

Zbiór ZbiórPracowników
8
8


Wyszukiwarka

Podobne podstrony:
Podstawy programowania II 2
Podstawy programowania II 4
Podstawy programowania II 3
Podstawy programowania II 5
Podstawy programowania II 6
zestawy cwiczen przygotowane na podstawie programu Mistrz Klawia 6
Podstawy Programowania Wersja Rozszerzona
Visual C 6 0 Podstawy programowania
matlab podstawy programowania
JP SS 2 algorytmy i podstawy programowania
podstawy programowania 5
Podstawy programowania  11 2013
podstawa programowa
podstawa programowa
ciurla,Podstawy ZarzÄ…dzania II, ZarzÄ…dzanie zasobami ludzkimi
Podstawy Programowania
Delphi podstawy programowania rejestr systemowy
wychowanie fizyczne w nowej podstawie programowej

więcej podobnych podstron