Bartosz Walter. Zaawansowane projektowanie obiektowe. Metryki obiektowe. Prowadzący: Bartosz Walter. Metryki obiektowe 1
|
|
- Lech Maciejewski
- 6 lat temu
- Przeglądów:
Transkrypt
1 Metryki obiektowe Prowadzący: Bartosz Walter Metryki obiektowe 1
2 Plan wykładu ZłoŜoność cyklomatyczna McCabe'a Zestaw MOOD Metryki Chidamber&Kemerer Metryki R. C. Martina Prawo Demeter Metryki obiektowe (2) Wykład jest poświęcony ilościowej ocenie jakości programów. Podczas wcześniejszych wykładów mówiliśmy jedynie o zasadach projektowania obiektowego, wskazując co jest dobrym rozwiązaniem, a co złym. Jednak wówczas omówiono tylko podstawowe dwa kryteria oceny projektu obiektowego: spójności i powiązaniach, i to jedynie w kategoriach jakościowych. Dlatego obecny wykład wprowadza metryki obiektowe, słuŝące do obiektywnej i ilościowej oceny jakości projektu obiektowego. Podczas wykładu zostanie przypomniana metryka złoŝoności programu McCabe'a oraz wprowadzone trzy zestawy metryk: MOOD autorstwa e Abreu, zestaw Chidambera i Kemerera oraz metryki zaproponowane przez R. Martina. Pozornie te trzy zestawy metryk dotyczą tego samego zagadnienia, a zatem są redundantne. Jednak bliŝsza ich poznanie pozwala stwierdzić, Ŝe kaŝdy zestaw kieruje się nieco innymi zasadami konstrukcji i interpretacji tych metryk dlatego warto poznać je wszystkie. Ostatnim elementem wykładu będzie przedstawienie prawa Demeter, określającego dopuszczalny stopień powiązań między obiektami. Metryki obiektowe 2
3 ZłoŜoność cyklomatyczna McCabe'a CC słuŝy do oceny wewnętrznej złoŝoności metody CC CC = d = E V E liczba krawędzi grafu (moŝliwych przejść) V liczba wierzchołków w grafie (instrukcji) d liczba węzłów decyzyjnych w grafie CC jest liczbą niezaleŝnych ścieŝek w grafie przepływu sterowania metody McCabe (1976) Metryki obiektowe (3) ZłoŜoność cyklomatyczna (CC), mimo swojej długiej historii została zdefiniowana w 1976 roku z myślą o programowaniu strukturalnym jest nadal podstawową miarą złoŝoności dowolnego fragmentu kodu. Ogólna definicja mówi, Ŝe CC to liczba niezaleŝnych ścieŝek w grafie reprezentującym przepływ sterowania w metodzie. Istnieją dwa wzory określające tę wartość: pierwszy opiera się na liczbie wierzchołków i łuków w grafie, natomiast drugi jedynie na liczbie węzłów decyzyjnych. Istnieją następujące interpretacje wartości tej metryki niŝsza wartość CC moŝe wskazywać na lepszą czytelność metody lub odsunięcie w niej decyzji poprzez delegację, jednak niekoniecznie dowodzi, metoda jest prosta; CC słuŝy do pomiaru złoŝoności metod, a nie klas (metody mogą zostać odziedziczone), ale w powiązaniu z innymi metrykami moŝe posłuŝyć do oceny klas; wartości przekraczające 20 wskazują na zbytnią złoŝoność badanej metody. Metryki obiektowe 3
4 Interpretacja metryki CC CC > 50 Interpretacja prosta metoda metoda złoŝona metoda bardzo złoŝona testowanie niemal niemoŝliwe Metryki obiektowe (4) Optymalne wartości tej metryki wynoszą poniŝej 50. NaleŜy jednak pamiętać, Ŝe są to wartości podane dla programowania strukturalnego, dlatego w przypadku programów obiektowych warto przyjąć nieco obniŝony próg. Metryki obiektowe 4
5 Przykład START CC =? STOP Metryki obiektowe (5) Na slajdzie przedstawiono graf sterowania pewnej metody. Aby przypomnieć sobie sposób obliczania metryki CC, proszę obliczyć ją korzystając z obu wzorów podanych na poprzednim slajdzie. Owalami oznaczono stany początkowy i końcowy, rombami punkty decyzyjne, natomiast instrukcje prostokątami. Metryki obiektowe 5
6 Zestaw MOOD Zdefiniowane przez F. Brito e Abreu w 1995 r Zestaw 6 metryk Ocena całego systemu, a nie pojedynczych elementów Bezwymiarowe, wyraŝane w procentach licznik: rzeczywiste wykorzystanie mechanizmu mianownik: maksymalne moŝliwe wykorzystanie mechanizmu NiezaleŜne od rozmiaru oprogramowania NiezaleŜne od języka programowania Metryki obiektowe (6) Pierwszym omawianym zestawem metryk jest MOOD Metrics for Object-Oriented Design. Został on zaproponowany przez F. Brito e Abreu w 1995 roku. Składa on się z 6 metryk, których celem jest ocena stopnia wykorzystania poszczególnych mechanizmów obiektowych: hermetyzacji, dziedziczenia, powiązań i polimorfizmu oraz związku tych wielkości z zewnętrznymi atrybutami oprogramowania: jakością, testowalnością etc. Ich charakterystyczną cechą jest bezwymiarowość są one wyraŝone w procentach reprezentujacych stopień wykorzystania badanej cechy w systemie. Licznik procentu odzwierciedla faktyczny stopień uŝycia mechanizmu, natomiast mianownik maksymalny, teoretycznie moŝliwy stopień. Obiektem pomiaru nie są zatem pojedyncze klasy i ich relacje, ale cały system, dlatego metryki te pozwalają oceniać projekt obiektowy na znacznie wyŝszym poziomie abstrakcji niŝ poziom klasy. Co waŝne, metryki te dobrze się skalują (ich wartości z załoŝenia nie zaleŝą od rozmiaru badanego oprogramowania), a takŝe nie zaleŝą od języka programowania (moŝliwe jest porównanie wyników metryk dla języka strukturalnego i języka obiektowego oczywiście jeŝeli projekt systemów stworzonych w tych językach ma cechy obiektowości). Metryki obiektowe 6
7 Metryki z zestawu MOOD Podstawowe mechanizmy programowania obiektowego polimorfizm Polymorphism Factor (PF) hermetyzacja Attribute Hiding Factor (AHF) Method Hiding Factori (MHF) dziedziczenie Attribute Inheritance Factor (AIF) Method Inheritance Factor (MIF) przekazywanie komunikatów Coupling Factor (CF) Metryki obiektowe (7) Metryki wchodzące w skład tego zestawu badają cztery kluczowe mechanizmy obiektowe: polimorfizm, hermetyzację, dziedziczenie oraz wysyłanie i obsługa komunikatów. W przypadku hermetyzacji i dziedziczenia istnieją osobne metryki słuŝące do oceny badanej wielkości w odniesieniu do atrybutów (pól) i metod. Celem twórcy tych metryk była ogólna ocena jakości całego systemu, a nie pojedynczych jego elementów: klas lub komponentów. Metryki te i ich interpretacja okazują się (zresztą zgodnie z intuicją) zawodne w przypadku systemów w duŝej mierze opartych o formularze, generację kodu i moduły współdzielone przez wszystkie elementy systemu, w których przydział odpowiedzialności do klas zachodzi w oparciu o inne kryteria. Metryki obiektowe 7
8 Metryki dotyczące hermetyzacji AHF i MHF mierzą stopień ukrycia informacji osiągnięty poprzez hermetyzację dostępu do składowych AHF MHF = = TC i= 1 h TC i= 1 TC A ( Ci ) = 1 A ( C ) d i M ( ) 1 h C = i = 1 M ( C ) i TC i= 1 d i TC i= 1 TC i= 1 TC i= 1 TC i= 1 A ( C ) v d i A ( C ) M M v d i ( C ) i ( C ) i A d dowolny atrybut M d dowolna metoda A h atrybut niewidoczny M h metoda niewidoczna A v atrybut widoczny M v metoda widoczna A d = A h + A v M d = M h + M v Metryki obiektowe (8) Dwie metryki hermetyzacji: AHF dla atrybutów i MHF dla metod, oceniają stopień ukrycia składowych. Wszystkie atrybuty/metody znajdujące się w całym systemie są dzielone na dwie klasy: widocznych i niewidocznych dla klientów. Obie metryki mają podobną strukturę: w liczniku znajduje się liczba atrybutów/metod widocznych (czyli takich, do których moŝna poprawnie się odwołać) dla klientów, natomiast w mianowniku liczba wszystkich atrybutów/metod we wszystkich klasach rozwaŝanego systemu. Ich wartość jest zatem procentowym udziałem atrybutów/metod widocznych w całym systemie Metryki obiektowe 8
9 Attribute Hiding Factor (AHF) F.B. e Abreu (1995) Metryki obiektowe (9) Wykres ten przedstawia wartości metryki AHF zmierzone dla kilku znanych systemów obiektowych o dostępnym kodzie źródłowym. Warto zauwaŝyć, Ŝe systemy te zostały stworzone przy pomocy róŝnych języków programowania, w tym takŝe nieobiektowych (np. Motif). Wynika z tego, Ŝe wartości uzyskane za pomocą zestaw MOOD faktycznie nie zaleŝą od zastosowanego języka programowania. W tym przypadku współczynnik ukrycia atrybutów wyniósł pomiędzy 67 (MFC) i 96 procent (Motif). Zatem moŝna się spodziewać, Ŝe w dobrze zaprojektowanych systemach metryka ta nie powinna przyjmować wartości niskich. Metryki obiektowe 9
10 Optymalne wartości metryki AHF Atrybuty powinny być ukryte w jak największym stopniu. Optymalnym rozwiązaniem jest brak bezpośredniego dostępu do atrybutów. F.B. e Abreu (1995) Metryki obiektowe (10) Optymalny rozkład tej metryki przyjmuje przedstawiony na wykresie kształt: jednym z kryteriów dobrego projektu jest ukrycie jak największej liczby pól, i ew. udostępnienie ich poprzez metody. Optymalnym rozwiązaniem byłoby osiągnięcie pełnego ukrycia wszystkich atrybutów, co jednak w praktyce, ze względu na rzeczywistą jakość projektu lub wygodę programowania, okazuje się niemoŝliwe lub bardzo trudne do osiągnięcia. Metryki obiektowe 10
11 Method Hiding Factor (MHF) F.B. e Abreu (1995) Metryki obiektowe (11) Na slajdzie przedstawiono zmierzone w rzeczywistych projektach wartości drugiej z metryk dotyczącej hermetyzacji MHF. Wahają się one od 10% (ET++) do 37% (Motif). Płynie stąd wniosek, Ŝe w przypadku tej metryki 100% nie jest optymalną wartością. Metryki obiektowe 11
12 Optymalne wartości metryki MHF Niski poziom ukrycia metod wskazuje na niewystarczająco abstrakcyjną implementację. Wysoki poziom niską funkcjonalność systemu i jego klas składowych. F.B. e Abreu (1995) Metryki obiektowe (12) Na wykresie przedstawiono optymalne wartości metryki MHF. Zgodnie z intuicją opisaną na poprzednim slajdzie, celem nie jest osiągnięcie ani zbyt wysokiego, ani zbyt niskiego ukrycia składowych, a poŝądane wartości mieszą się w przedziale 10%-25%. Obserwację tę moŝna interpretować następująco: niski poziom ukrycia oznacza, Ŝe większość metod jest dostępna dla kaŝdego klienta. Wskazuje to na niewystarczająco skuteczne wykorzystanie hermetyzacji jako mechanizmu abstrakcji. Z drugiej strony skuteczne ukrycie metod przed klientem uniemoŝliwia mu dostęp do nich i ich wywołanie zatem z punktu widzenia uŝyteczności klasa o małej liczbie dostępnych metod posiada małą funkcjonalność. Metryki obiektowe 12
13 Przykład MHF =? AHF =? PropertiesConfiguration (from configurat... SEPARATORS[] : char = new char [] {'=',':'} WHITE_SPACE[] : char = new char [] {' ','\t','\f'} DEFAULT_ENCODING : Logical View::java::lang::String = "ISO " LINE_SEPARATOR : Logical View::java::lang::String = System.getProperty("line.separator") HEX_RADIX : int = 16 UNICODE_LEN : int = 4 include : Logical View::java::lang::String = "include" includesallowed : boolean header : Logical View::java::lang::String PropertiesConfiguration() PropertiesConfiguration(fileName : Logical View::java::lang::String) PropertiesConfiguration(file : File) PropertiesConfiguration(url : URL) getinclude() : Logical View::java::lang::String setinclude(inc : Logical View::java::lang::String) : void setincludesallowed(includesallowed : boolean) : void getincludesallowed() : boolean getheader() : Logical View::java::lang::String setheader(header : Logical View::java::lang::String) : void load(in : Reader) : void save(writer : Writer) : void setbasepath(basepath : Logical View::java::lang::String) : void unescapejava(str : Logical View::java::lang::String, delimiter : char) : Logical View::java::lang::String parseproperty(line : Logical View::java::lang::String) : Logical View::java::lang::String[] loadincludefile(filename : Logical View::java::lang::String) : void Metryki obiektowe (13) Dla przykładu spróbujmy obliczyć wartości metryk MHF i AHF dla klasy PropertiesConfiguration z biblioteki Configuration będącej produktem projektu Jakarta Commons. Metody publiczne są zaznaczone jedynie róŝowym prostokątem, natomiast pola publiczne niebieskim prostokątem (bez innych dekoracji). Metryki obiektowe 13
14 Metryki dotyczące hermetyzacji AHF i MHF mierzą stopień wykorzystania dziedziczenia AIF MIF = = TC i= 1 Ai ( Ci ) = 1 A ( C ) i= 1 TC TC a i M ( ) 1 i C = i = 1 M ( C ) i TC i= 1 a i TC i= 1 TC i= 1 TC i= 1 TC i= 1 A ( C ) d a i A ( C ) M M d a i ( C ) i ( C ) i A a dowolny atrybut M a dowolna metoda A d atrybut zdefiniowany M d metoda zdefiniowana A i atrybut odziedziczony M i metoda odziedziczona A a = A i + A d M a = M i + M d Metryki obiektowe (14) Kolejne dwie metryki dotyczą innego aspektu obiektowości dziedziczenia. Metryka ta zatem wskazuje, w jakim stopniu dziedziczenie atrybutów i metod jest wykorzystane w badanym systemie. Dziedziczenie pozwala wyrazić trzy róŝne relacje pomiędzy klasami: ich podobieństwo relację generalizacji i specjalizacji powtórne uŝycie kodu nadklasy przez podklasy. Metryki zostały skonstruowane w sposób analogiczny do metryk dotyczących hermetyzacji. Są ułamkiem, w którego liczniku znajduje się faktyczne liczba atrybutów/metod odziedziczonych we wszystkich klasach całego systemu do całkowitej liczby atrybutów/metod w systemie. Oznacza to, Ŝe metryki są niemianowane i przyjmują wartości od 0 do 100%. NaleŜy zwrócić uwagę, Ŝe dziedziczenie jest jednym z narzędzi oferowanych przez obiektowe języki programowania, ale nie jest bezpośrednio kryterium oceny jakości projektu. Dlatego wartości tych dwóch metryk nie niosą bezpośrednio informacji o jakości projektu. Metryki obiektowe 14
15 Attribute Inheritance Factor (AIF) F.B. e Abreu (1995) Metryki obiektowe (15) Wykres przedstawia wartości metryki AIF zmierzone w kilku systemach obiektowych. Wartości tej metryki policzone dla wybranych projektów obiektowych wskazują ponownie, Ŝe nie przyjmuje ona wartości bardzo niskich ani bardzo wysokich. Zmierzony stopień dziedziczenia atrybutów dla tych projektów wyniósł od 40% (NIHCL) do 70% (Centerline). Intuicja wskazuje, Ŝe dziedziczenie atrybutów jest stosowane w mniejszym stopniu niŝ dziedziczenie metod, a więc moŝna oczekiwać, Ŝe metryka MIF będzie przyjmowała wyŝsze wartości. Metryki obiektowe 15
16 Method Inheritance Factor (MIF) F.B. e Abreu (1995) Metryki obiektowe (16) Wykres ten przedstawia zmierzone wartości współczynnika dziedziczenia dla metod. Faktycznie, wartości tej metryki są wyŝsze niŝ w przypadku dziedziczenia atrybutów. Ma to intuicyjne wyjaśnienie: dziedziczenie metod dotyczy podobieństwa w zachowaniu klas, natomiast dziedziczenie atrybutów jest związane z podobieństwem w strukturze klas. Dlatego metody są zwykle dziedziczone przez wiele poziomów w hierarchii dziedziczenia, od klas abstrakcyjnych do konkretnych, natomiast atrybuty zwykle występują jedynie na poziomach dziedziczenia odpowiadających bardziej konkretnym klasom. Metryki obiektowe 16
17 Optymalne wartości metryki MIF Niski współczynnik dziedziczenia metod wskazuje na niskie powtórne uŝycie kodu. Wysoki współczynnik oznacza skomplikowaną hierarchię dziedziczenia F.B. e Abreu (1995) Metryki obiektowe (17) Tę zaleŝność moŝna zauwaŝyć na przedstawionym wykresie: oczekiwaną wartością metryki jest 60%-80%, a więc więcej niŝ w przypadku dziedziczenia atrybutów. Zbyt małe wartości MIF są interpretowane jako zbyt małe powtórne uŝycie kodu, co moŝe objawiać się np. w duŝej liczbie powielonych fragmentów programu. Z kolei wartości przekraczające 80% wskazują na skomplikowaną hierarchię dziedziczenia: duŝa część relacji pomiędzy klasami to właśnie dziedziczenie, co jak juŝ powiedziano na pierwszym wykładzie zmniejsza elastyczność systemu i jego otwartość na zmiany. Zatem optymalne wartości znajdują pomiędzy tymi skrajnymi, przy czym z reguły wartość MIF jest wyŝsza niŝ AIF. Metryki obiektowe 17
18 Przykład MIF =? PropertiesConfiguration PropertiesConfiguration() PropertiesConfiguration(fileName : Logical View::java::lang::String) PropertiesConfiguration(file : File) PropertiesConfiguration(url : URL) getinclude() : Logical View::java::lang::String setinclude(inc : Logical View::java::lang::String) : void setincludesallowed(includesallowed : boolean) : void getincludesallowed() : boolean getheader() : Logical View::java::lang::String setheader(header : Logical View::java::lang::String) : void load(in : Reader) : void save(writer : Writer) : void setbasepath(basepath : Logical View::java::lang::String) : void unescapejava(str : Logical View::java::lang::String, delimiter : char) : Logical View::java::lang::String parseproperty(line : Logical View::java::lang::String) : Logical View::java::lang::String[] loadincludefile(filename : Logical View::java::lang::String) : void XMLPropertiesConfiguration XMLPropertiesConfiguration() XMLPropertiesConfiguration(fileName : Logical View::java::lang::String) XMLPropertiesConfiguration(file : File) XMLPropertiesConfiguration(url : URL) load(in : Reader) : void save(out : Writer) : void writeproperty(out : PrintWriter, key : Logical View::java::lang::String, value : Logical View::java::lang::Object) : void writeproperty(out : PrintWriter, key : Logical View::java::lang::String, values : List) : void Metryki obiektowe (18) Ponownie, przykład jest zaczerpnięty z biblioteki Configuration będącej jedynym z produktów projektu Apache Jakarta Commons. Dwie klasy: PropertiesConfiguration i XMLPropertiesConfiguration są związane ze sobą relacją dziedziczenia. Na diagramie zaznaczono wszystkie metody zdefiniowane w danej klasie, zatem pominięto metody odziedziczone. Zadanie polega na obliczeniu metryki MIF dla tych dwóch klas. Metryki obiektowe 18
19 Przykład AIF =? PropertiesConfiguration (from configurat... SEPARATORS[] : char = new char [] {'=',':'} WHITE_SPACE[] : char = new char [] {' ','\t','\f'} DEFAULT_ENCODING : Logical View::java::lang::String = "ISO " LINE_SEPARATOR : Logical View::java::lang::String = System.getProperty("line.separator") HEX_RADIX : int = 16 UNICODE_LEN : int = 4 include : Logical View::java::lang::String = "include" includesallowed : boolean header : Logical View::java::lang::String XMLPropertiesConfiguration (from configurat... DEFAULT_ENCODING : Logical View::java::lang::String = "UTF-8" Metryki obiektowe (19) Drugi przykład, pochodzący z tego samego źródła, dotyczy dziedziczenia atrybutów w tych samych klasach. Zadanie polega na obliczeniu wartości metryki AIF dla tego układu klas. Metryki obiektowe 19
20 Metryka polimorficzności PF jest metryką określającą stopień uŝycia polimorfizmu PF = TC i= 1 TC i= 1 [ M ( C ) DC( C )] n M i o ( C ) i i M o metoda pokryta M n metoda nowa DC(C i ) liczba klas potomnych klasy C i Metryki obiektowe (20) Kolejną metryką naleŝącą do zestawu MOOD jest PF współczynnik wykorzystania polimorfizmu. Określa on, w jakim stopniu zastosowane jest polimorficzne pokrywanie metod. Ponownie, metryka ta jest stosunkiem liczby metod pokrytych w całym systemie do wszystkich metod, które mogłyby być pokryte. Polimorfizm pozwala związać wspólnym wywołaniem metody wiele instancji klas, dzięki czemu system zbudowany w ten sposób jest elastyczniejszy, a klasy w większym stopniu ukrywają szczegóły swojej implementacji. Zamiana klas polimorficznych nie wprowadza Ŝadnych zmian do struktury systemu. Metryki obiektowe 20
21 Polymorphism Factor (PF) F.B. e Abreu (1995) Metryki obiektowe (21) Wykres ten przedstawia wartości metryki PF zmierzone w znanych juŝ systemach. Co ciekawe, wartości te są znacznie niŝsze niŝ w przypadku metryki MIF, która przecieŝ dotyczy dziedziczenia, a zatem jest blisko związana z mechanizmem polimorfizmu. Ponadto dziedziczenie nie jest jedynym sposobem uzyskania zachowania polimorficznego. Zatem polimorfizm jest stosowany w znacznie mniejszym stopniu niŝ inne mechanizmy obiektowe. Wartości tej metryki mieszczą się w granicach od ok. 3% (Centerline) do ok.13% (NIHCL). Metryki obiektowe 21
22 Optymalne wartości metryki PF PF Niski współczynnik uŝycia polimorfizmu wskazuje na strukturalny (a nie obiektowy) projekt systemu. Wysoki współczynnik oznacza skomplikowaną hierarchię dziedziczenia. F.B. e Abreu (1995) Metryki obiektowe (22) Obserwacje z poprzedniego slajdu są potwierdzone przez wykres optymalnych wartości metryki PF. Mieszczą się one w granicach od kilku do dwudziestu kilku procent. Wartość niŝsza niŝ kilka procent moŝe wskazywać na strukturalny (a zatem nie korzystający z polimorfizmu) projekt systemu, w którym kaŝdorazowo odbiorca wywołania metody jest znany w momencie kompilacji i łączenia. Z drugiej strony, zbyt wysoka wartość współczynnika PF sugeruje zbyt skomplikowaną hierarchię dziedziczenia, w której większość metod jest pokrywana w klasach potomnych. Łączy się to z niską elastycznością systemu oraz słabym powtórnym wykorzystaniu kodu przez podklasy. Metryki obiektowe 22
23 Przykład PF =? PropertiesConfiguration PropertiesConfiguration() PropertiesConfiguration(fileName : Logical View::java::lang::String) PropertiesConfiguration(file : File) PropertiesConfiguration(url : URL) getinclude() : Logical View::java::lang::String setinclude(inc : Logical View::java::lang::String) : void setincludesallowed(includesallowed : boolean) : void getincludesallowed() : boolean getheader() : Logical View::java::lang::String setheader(header : Logical View::java::lang::String) : void load(in : Reader) : void save(writer : Writer) : void setbasepath(basepath : Logical View::java::lang::String) : void unescapejava(str : Logical View::java::lang::String, delimiter : char) : Logical View::java::lang::String parseproperty(line : Logical View::java::lang::String) : Logical View::java::lang::String[] loadincludefile(filename : Logical View::java::lang::String) : void XMLPropertiesConfiguration XMLPropertiesConfiguration() XMLPropertiesConfiguration(fileName : Logical View::java::lang::String) XMLPropertiesConfiguration(file : File) XMLPropertiesConfiguration(url : URL) load(in : Reader) : void save(out : Writer) : void writeproperty(out : PrintWriter, key : Logical View::java::lang::String, value : Logical View::java::lang::Object) : void writeproperty(out : PrintWriter, key : Logical View::java::lang::String, values : List) : void Metryki obiektowe (23) Wymieniony wcześniej układ dwóch klas tym razem jest obiektem zainteresowania ze względu na pokrywanie metod. Zadanie polega na obliczeniu wartości tej metryki oraz interpretacji uzyskanego wyniku. Metryki obiektowe 23
24 Metryka powiązań pomiędzy obiektami CF jest metryką określającą stopień powiązań pomiędzy obiektami CF TC TC ( is _ client( Ci, C j )) i= 1 j= 1 = 2 TC TC TC 2 j= 1 DC( C ) i DC(C i ) liczba klas potomnych klasy C i is _ client( C c, C s ( C C C ) ( C C ) 1iff Cc s c s c ) = 0 w przeciwnym przypadku s Metryki obiektowe (24) Ostatnią, szóstą metryką naleŝącą do zestawu MOOD, jest CF współczynnik określający stopień powiązań pomiędzy obiektami innych niŝ poprzez dziedziczenie. Ponownie jest on liczbą niemianowaną i jest zapisywany w postaci ułamka. W jego liczniku znajduje się suma metod po wszystkich klasach, pomiędzy którymi występują powiązania inne niŝ wynikające z dziedziczenia (przy czym powiązania są jednokierunkowe; powiązania dwukierunkowe są liczone jako dwa powiązania jednokierunkowe). Nie ma jednak rozróŝnienia między naturą tego powiązania: asocjacje, kompozycje czy agregacje są traktowane tak samo. Mianownik z kolei określa maksymalną liczbę powiązań nie związanych z dziedziczeniem, jakie mogłyby zaistnieć w systemie. Wartość metryki CF jest zatem miarą stopnia wypełnienia grafu powiązań pomiędzy obiektami. Z pierwszego wykładu wiadomo, Ŝe niski stopień powiązań jest jednym z kryteriów wysokiej jakości projektu, zatem moŝna się spodziewać,ŝe metryka ta przyjmuje niskie wartości (jednak większe od 0) Metryki obiektowe 24
25 Coupling Factor (CF, COF) F.B. e Abreu (1995) Metryki obiektowe (25) Ten sam wniosek płynie z analizy wartości współczynnika CF we wspomnianych wcześniej systemach. Wartości znajdują się w przedziale od ok 3% (GNU) do ponad 20% (NewMat). Warto zauwaŝyć, Ŝe systemy te są uznawane za przykłady dobrego projektowania, zatem prawdopodobnie ich wartości metryki CF znajdują się na prawidłowym poziomie. Metryki obiektowe 25
26 Optymalne wartości metryki CF Niski współczynnik powiązań wskazuje na niską funkcjonalność, skupioną w kilku klasach. Wysoki współczynnik oznacza nieobiektową strukturę projektu. F.B. e Abreu (1995) Metryki obiektowe (26) Na tym wykresie, przedstawiającym optymalne wartości metryki CF, widać, Ŝe mieszczą się one w przedziale od ok. 5% do ok 15%, zatem na relatywnie niskim poziomie. Jednak zbyt niska wartość jest niepoŝądana: wskazuje na niewłaściwy rozkład odpowiedzialności pomiędzy klasami, skoro jedynie kilka z nich wypełnia podstawowe funkcje w systemie. Wysoka wartość współczynnika charakteryzuje systemy o niskiej elastyczności, trudne w testowaniu, modyfikacji i pielęgnacji, w których zmiana jednego elementu wymaga modyfikacji w wielu innych częściach systemu. Metryki obiektowe 26
27 Przykład CF =? BaseConfiguration -store Map (from util) #map AbstractFileConfiguration -sourceurl URL (from net) MapConfiguration #strategy Syste mco nfigu ration PropertiesConfiguration Rel oa dingstrategy (from reloading) Metryki obiektowe (27) Na przedstawionym uproszczonym diagramie klas przedstawiono wybrane klasy i interfejsy pochodzące z omawianego wcześniej projektu Configuration. NaleŜy na podstawie tego diagramu obliczyć wartość metryki CF i ocenić na tej podstawie jakość przedstawionego systemu. Metryki obiektowe 27
28 Wyniki empirycznej oceny metryk MOOD Metryka AHF jest ograniczona od dołu, natomiast MHF, MIF, AIF, PF są ograniczone od góry [F.B. e Abreu, 1995] Wraz ze wzrostem wartości MHF i MIF spada gęstość błędów i koszt ich usuwania [F.B. e Abreu, 1996] Nadmierne stosowanie dziedziczenia powoduje wysokie koszty pielęgnacji [F.B. e Abreu, 1996] Optymalna wartość AHF to 100% [F.B. e Abreu, 1996] Metryki MOOD dostarczają zgrubnej oceny jakości systemu [Harrison, 1998] Metryki obiektowe (28) Metryki stają się uŝyteczne, jeŝeli są predyktorami zewnętrznych własności oprogramowania. W przypadku zestawu MOOD istnieje wiele raportów dotyczących walidacji metryk i ich korelacji z jakością oprogramowania, liczbą błędów i pielęgnowalnością. Autorem wielu obserwacji jest twórca metryk, F. Brito e Abreu, który weryfikował je na wybranych bibliotekach obiektowych, spośród których niektóre z nich zostały juŝ przedstawione na poprzednich slajdach. Wyniki jego badań pokazują m.in. następujące fakty: -metryka AHF jest ograniczona od dołu (tzn. posiada wartość, poniŝej której jakość systemu spada), natomiast metryki MHF, AIF, MIF i PF są ograniczone od góry; -wysokie wartości metryk MHF i MIF (czyli wysoki poziom hermetyzacji oraz powszechne dziedziczenie metod) powodują spadek gęstości błędów, oraz ograniczenie koszty związanego z ich usuwaniem; -naduŝycie dziedziczenia metod prowadzi jednak do podwyŝszenia kosztu pielęgnacji; -optymalną wartością metryki AHF jest 100%. Natomiast ewaluacja metryk MOOD dla 9 komercyjnych systemów dokonana przez Harrisona, Counsella i Nithiego pokazała, Ŝe dostarczają one ogólnej informacji o jakości badanego systemu Metryki obiektowe 28
29 Zestaw metryk CK Zdefiniowane przez S.R. Chidambera i C.F. Kemerera w 1991 r. Opisują klasy i relacje między nimi 6 metryk Response for Class (RFC) Weighted Method per Class (WMC) Depth of Inheritance Tree (DIT) Number of Childer (NOC) Lack of Cohesion of Methods (LCOM) Coupling Between Objects (CBO) Metryki obiektowe (29) Drugim, choć historycznie pierwszym zestawem metryk obiektowych, był zdefinowany przez Chidambera i Kemerera w 1991 zestaw sześciu metryk obiektowych badających nie jak w przypadku zestawu MOOD stopień uŝycia poszczególnych mechanizmów obiektowych, ale efekt ich zastosowania. Celem stawianym przy ich projektowaniu był pomiar złoŝoności projektu systemu i jej wpływ na zewnętrzne atrybuty jakościowe produktu pielęgnowalność, powtórne uŝycie etc. Nie są jednak dobrymi predyktorami czasu ani pracochłonności, ponadto wymagają znajomości kodu źródłowego programu. Ich wartości mogą być zatem ustalone dopiero w fazie projektowania, a nie planowania, dlatego ich uŝyteczność z punktu widzenia kierownika projektu jest znacznie mniejsza niŝ w przypadku MOOD. Inny jest takŝe obiekt pomiaru: nie jest nim cały system, a pojedyncze klasy (większość metryk z zestawu CK dotyczy właśnie pojedynczych klas) i relacje pomiędzy nimi, co oznacza, Ŝe dostarczana przez metryki informacja jest skierowana w większym stopni do projektantów i programistów, a w mniejszym do kierowników projektów. Wartości kaŝdej z tych metryk obrazują bezwzględną wielkość badanego elementu kodu, co takŝe stanowi róŝnicę w porównaniu do zestawu MOOD. Metryki obiektowe 29
30 Response for Class RFC jest miarą potencjalnej komunikacji pomiędzy klasą i otoczeniem RFC = TM TS TC M + i= 0 i i= j= 0 0 j M j M i metoda j TM całkowita liczba metod w klasie TS liczba podklas TC j liczba metod w podklasie j Metryki obiektowe (30) Response for Class (RFC) słuŝy do określania potencjalnej komunikacji pomiędzy tą klasą a otaczającym ją środowiskiem. Zgodnie z jej definicją jest to liczba metod, które mogą zostać wywołane w odpowiedzi na komunikat wysłany do obiektu tej klasy, a więc metod zdefiniowanych w analizowanej klasie oraz wszystkich jej podklasach. Klasy z wysoką wartością metryki RFC są bardziej złoŝone i oferują większą funkcjonalność. Bardzo wysoka wartość moŝe powodować trudności w testowaniu i weryfikacji poprawności danej klasy. Metryki obiektowe 30
31 Weighted Methods for Class WMC mierzy wewnętrzną złoŝoność klasy WMC WMC TC = = M i 1 i TC = = i 1 [ M CC( M )] i i M i dowolna metoda CC złoŝoność cyklomatyczna metody Metryki obiektowe (31) Metryka Weighted Methods per Class (WMC) słuŝy do określania złoŝoności klasy jako zbioru metod. Ogólna jej definicja mówi, Ŝe jest to suma waŝona metod wchodzących w skład klasy. Jednak poniewaŝ często przyjmowane jest załoŝenie o jednakowej wadze wszystkich metod, wówczas ma ona uproszczoną wersję: WMC jest liczbą wszystkich metod zdefiniowanych w danej klasie. Innym, często stosowanym współczynnikiem wagi metody, jest jej złoŝoność cyklomatyczna (CC). Wówczas metryka WMC jest sumą złoŝoności McCabe'a wyliczonych dla wszystkich metod w klasie. Rolą metryki WMC jest predykcja pracochłonności wymaganej do stworzenia i pielęgnacji klasy. Co waŝne, metrykę tę moŝna obliczyć (w przypadku wersji z wagami równymi 1) jedynie na podstawie modelu systemu. Zatem pozwala ona przewidywać waŝne atrybuty oprogramowania zanim ono powstanie. Z przeprowadzonych badań wynika, Ŝe wysoka wartość metryki WMC charakteryzuje klasy konkretne, o bardzo wąskiej specjalizacji. Klasy takie rzadko są dalej specjalizowane w postaci kolejnych podklas. Metryki obiektowe 31
32 Depth of Inheritance Tree DIT mierzy złoŝoność hierarchii dziedziczenia A DIT jest maksymalną liczbą poziomów w drzewie dziedziczenia i jest mierzona liczbą "pokoleń" przodków B1 B2 DIT=4 C1 C2 D Metryki obiektowe (32) Metryka DIT słuŝy do pomiaru głębokości hierarchii dziedziczenia. Zgodnie z definicją, DIT opisuje maksymalną wysokość ścieŝki dziedziczenia danej klasy, licząc od korzenia drzewa do samej klasy. Metrykę tę interpretuje się następująco: im większą wartość metryki DIT klasa posiada, tym większą liczbę metod ta klasa dziedziczy, zatem tym trudniej przewidzieć jej zachowanie; w efekcie koszt pielęgnacji takiej klasy rośnie; drzewa dziedziczenia o duŝej głębokości charakteryzują systemy o duŝej złoŝoności, w których uczestniczy wiele spokrewnionych ze sobą klas i metod, a więc zwiększające koszty pielęgnacji; z drugiej strony dziedziczenie zwiększa stopień powtórnego uŝycia kodu, co ogranicza liczbę duplikatów. Metryki obiektowe 32
33 Przykład DIT =? SubsetConfiguration AbstractConfiguration CompositeConfiguration BaseConfiguration DataConfiguration MapConfiguration BaseWebConfiguration (from web) AbstractFileConfiguration SystemConfiguration AppletConfiguration (from web) PropertiesConfiguration Metryki obiektowe (33) Na slajdzie przedstawiono hierarchię dziedziczenia klas związanych z projektem Configuration. Na podstawie diagramu naleŝy określić wartość metryki DIT dla klas AbstractConfiguration, SystemConfiguration oraz PropertiesConfiguration Metryki obiektowe 33
34 Number of Children NOC mierzy potencjalny wpływ modyfikacji klasy NOC = 3 A NOC jest liczbą bezpośrednich podklas lub implementacji klasy B1 B2 B32 C1 C2 C2 D Metryki obiektowe (34) Metryka NOC określa liczbę bezpośrednich potomków danej klasy, a więc podaje, ile razy kod z nadklasy został powtórnie wykorzystany w podklasach. Metryka posiada następujące interpretacje: im większa wartość NOC, tym większe prawdopodobieństwo niewłaściwej abstrakcji nadklasy, skoro wymaga ona wielokrotnego pokrycia; moŝe to być efektem niewłaściwego wykorzystania dziedziczenia; im większa wartość NOC, tym więcej wysiłku wymaga testowanie klasy; z drugiej strony, wysoka wartość NOC wskazuje na wyŝszy stopień ponownego uŝycia poprzez podklasy. W sumie wartość metryki NOC zwykle przyjmuje wartości 2-5, w którym to przedziale powtórne uŝycie kodu nadklasy równowaŝy wady duŝej liczby podklas. WyŜsze wartości powoduje istotne problemy z pielęgnacją klasy. Metryki obiektowe 34
35 Przykład NOC =? SubsetConfiguration AbstractConfiguration CompositeConfiguration BaseConfiguration DataConfiguration MapConfiguration BaseWebConfiguration (from web) AbstractFileConfiguration SystemConfiguration AppletConfiguration (from web) PropertiesConfiguration Metryki obiektowe (35) Oto znany juŝ przykład klas. Tym razem zadanie polega na obliczeniu metryki NOC dla klasy AbstractConfiguration, oraz zinterpretowaniu wyniku. Metryki obiektowe 35
36 Lack of Cohesion of Methods (1) LCOM1 mierzy brak podobieństwa między metodami i atrybutami (niespójność klas) ( P > Q)? ( P ) : 0 LCOM1 = Q 1. dla kaŝdej pary metod wyznacz zbiory atrybutów, do których się odwołują 2. jeŝeli zbiory są rozłączne, zwiększ P o 1; 3. jeŝeli choć jeden atrybut jest wspólny, zwiększ Q o 1 Metryki obiektowe (36) Kolejną metryką jest LCOM, opisującą w odróŝnieniu od pozostałych metryk CK brak pewnej cechy, a nie jej obecność. Cechą to jest spójność klasy, mierzona jako stopień podobieństwa celów realizowanych przez metody klasy. Klasa jest spójna, jeŝeli wszystkie jej metody współpracują, tzn. odwołują się do siebie nawzajem oraz wspólnie odwołują się do atrybutów tej klasy. W wersji pierwszej tej metryki przyjmuje ona wartość będącą róŝnicą liczby par metod odwołujących się do róŝnych atrybutów klasy oraz liczby par metod odwołujących się do przynajmniej jednego wspólnego atrybutu. Wersja ta jednak była szeroko krytykowana. Wśród najwaŝniejszych zarzutów wymieniano m.in. następujące obserwacje: LCOM1 przyjmuje z definicji wartość 0 wskutek róŝnych okoliczności, zatem wartość ta moŝe być mylnie interpretowana; definicja jest oparta na interakcji między metodami a danymi, co moŝe nie być właściwym kryterium spójności w świecie obiektowym; LCOM1 opiera się na dostępie do zmiennych, podczas gdy w wielu językach programowania (np. w C#) mechanizmem dostępu do pól klasy są właściwości (ang. properties). Metryki obiektowe 36
37 Lack of Cohesion of Methods (3) LCOM3 mierzy brak podobieństwa między metodami i atrybutami (niespójność klas) LCOM 3 = TM TA i = 1 M Ai TA TM 1 TM liczba metod w klasie TA liczba atrybutów w klasie MA i liczba metod odwołujących się do atrybutu A i Metryki obiektowe (37) Dlatego powstały kolejne definicje braku spójności klasy. Jedna z wersji, nazwana LCOM3, autorstwa Hendersona-Sellersa, definiuje metrykę jako względną liczbę metod, które nie odwołują się do poszczególnych atrybutów klasy. W przypadku gdy wartości TA = 0 lub TM = 1, metryka jest niezdefiniowana (w praktyce jej wartość jest podawana jako 0). Definicja ta jest pozbawiona przede wszystkim tych wad, które są związane z interpretacją wartości metryki: wartości LCOM3 naleŝą do przedziału od 0 do 2; wartości większe od 1 wskazują na brak spójności i prawdopodobną konieczność podziału klasy w przyszłości. Metryki obiektowe 37
38 Przykład LCOM =? Metryki obiektowe (38) Zadanie związane z tą metryką polega na obliczeniu jej wartości dla przedstawionej klasy. Metryki obiektowe 38
39 Coupling Between Objects CBO mierzy stopień zaleŝności klasy od innych klas nie będących jej przodkami CBO jest liczbą klas związanych z rozwaŝaną klasą relacją inną niŝ dziedziczenie CBO = 3 A Y X B1 B2 Metryki obiektowe (39) Drugim kryterium jakości projektu obiektowego wymienionym podczas pierwszego wykładu jest stopień powiązań pomiędzy obiektami. Metryką naleŝącą do zestawu CK, która mierzy tę wartość, jest CBO. Zgodnie z jej definicją, mierzy ona stopień zaleŝności podanej klasy od innych klas, które nie są związane z nią poprzez dziedziczenie. Wartość metryki CBO to liczba typów uŝytych w atrybutach, parametrach, klauzulach throws metod oraz typach zwracanych przez metody zatem jest to długość słownika typów obiektowych, do których istnieją odwołania z danej klasy. Wyjątkiem są typy prymitywne (int, double, boolean etc.) oraz podstawowe typy systemowe (np. w przypadku Javy są to klasy z pakietu java.lang.*), które nie są zaliczane jako odwołania. Metryka ta powinna przyjmować małe wartości, poniewaŝ wskazują one, Ŝe obiekty są od siebie zaleŝne jedynie w niewielkim stopniu, co z kolei oznacza, Ŝe mogą być łatwo modyfikowane lub nawet wymieniane na inne. Metryki obiektowe 39
40 Przykład BaseConfiguration -store Map (from util) CBO =? #map AbstractFileConfiguration -sourceurl URL MapConfiguration (from net) #strategy Syste mco nfigu ration PropertiesConfiguration Rel oa dingstrategy (from reloading) Metryki obiektowe (40) Tym razem zadanie polega na obliczeniu wartości metryki CBO dla klasy AbstractFileConfiguration, przedstawionej na diagramie kilku klas wybranych z projektu Configuration. Metryki obiektowe 40
41 Metryki R.C. Martina Zdefiniowane przez R.C. Martina w 1994 r Dotyczą kwestii zaleŝności klas i komponentów pomiędzy sobą 5 metryk Efferent Coupling (Ce) Afferent Coupling (Ca) Instability (I) Abstractness (A) Normalized Distance from Main Sequence (D) Metryki obiektowe (41) Trzecim zestawem metryk omawianych podczas wykładu jest grupa 5 metryk zaproponowanych przez R. Martina w roku Inaczej niŝ w przypadku poprzednich dwóch zestawów, nie stanowią one kompletnego i pełnego zestawu do oceny jakości poszczególnych atrybutów projektu obiektowego. Martina interesowały najbardziej problemy zaleŝności pomiędzy komponentami i pakietami, i jego metryki dotyczą właśnie zagadnienia. Ich poziom szczegółowości zatem znajduje się nawet niŝej niŝ w przypadku metryk CK. Metryki autorstwa Martina to: -Efferent Coupling (Ce) -AfferentCoupling (Ca) -Instability (I) -Abstractness (A) -Normalized Distance from Main Sequence (D) Metryki obiektowe 41
42 Efferent Coupling Ce mierzy podatność klasy na zmiany w innych modułach (zaleŝności wychodzące) Ce = 3 X A W Ce jest liczbą klas,od których zaleŝy rozpatrywana klasa Y Z Metryki obiektowe (42) Metryka Ce słuŝy do pomiaru jednego z rodzajów zaleŝności pomiędzy klasami: zaleŝności wychodzących. Mierzy ona podatność rozwaŝanej klasy na zmiany zachodzące w innych modułach, zatem odzwierciedla liczbę źródeł zmian, z którymi klasa musi się liczyć. Na rysunku przedstawiono pięć klas i łączące je relacje wraz z kierunkami zaleŝności. Kolorem zielonym oznaczono zaleŝności wychodzące. Wysokie wartości metryki wskazują na niestabilność klasy, tzn. Ŝe jej stabilność nie zaleŝy od niej samej, ale od zmian w innych miejscach kodu. Jednak komponent z wysoką wartością metryki Ce nie jest odpowiedzialny przed innymi komponentami, co oznacza, Ŝe zmiany przeprowadzone w nim nie są propagowane. Preferowane wartości wynoszą od 0 (klasa jest całkowicie niezaleŝna od innych) do 20. Wartości wyŝsze powodują problemy z pielęgnacją i rozwojem kodu. Typowym przykładem komponentów o wysokiej wartości Ce są elementy GUI, poniewaŝ niemal kaŝda zmiana w logice systemu musi być odzwierciedlona w interfejsie uŝytkownika. Metryki obiektowe 42
43 Afferent Coupling Ca mierzy wraŝliwość innych klas na zmiany w ropatrywanej klasie (zaleŝności przychodzące) Ca = 1 X A W Ca jest liczbą klas,które zaleŝą od rozpatrywanej klasy Y Z Metryki obiektowe (43) Metryka Ca jest przeciwieństwem metryki Ce. Mierzy ona wraŝliwość innych klas na zmiany w analizowanej klasie a zatem dotyczy zaleŝności przychodzących. Na rysunku tylko jedna zaleŝność ma charakter przychodzący. Wysoka wartość Ca zwykle (choć niejawnie) sugeruje stabilność komponentu. Wynika to z faktu, Ŝe klasa, od której zaleŝy wiele innych klas nie moŝe być modyfikowana często w znaczący sposób, poniewaŝ zwiększa to prawdopodobieństwo rozprzestrzenienia się zmiany. Z drugiej strony komponenty o wysokiej wartości tej metryki ponoszą znacznie większą odpowiedzialność wobec związanych z nimi innych klas. Preferowane wartości metryki naleŝą do przedziału od 0 do 500. Górna wartość jest znacznie wyŝsza niŝ w przypadku metryki Ce z uwagi na utrudnioną kontrolę nad klasami, które zaleŝą od analizowanej klasy. Przykładem klas o duŝej odpowiedzialności wobec innych klas (czyli o wysokiej wartości metryki Ca) są klasy biznesowe w aplikacji oraz róŝnego rodzaju kontrolery w aplikacjach zgodnych ze wzorcem MVC. Metryki obiektowe 43
44 Przykład BaseConfiguration -store Map (from util) Ca =? #map Ce =? AbstractFileConfiguration -sourceurl URL MapConfiguration (from net) #strategy Syste mco nfigu ration PropertiesConfiguration Rel oa dingstrategy (from reloading) Metryki obiektowe (44) Na rysunku, ponownie zaczerpniętym z projektu Configuration, zaznaczono dwie klasy: Map oraz SystemConfiguration. Pierwsza charakteryzuje się pewną liczbą zaleŝności przychodzących, natomiast druga wychodzących. Zadanie polega na wyznaczeniu wartości metryk Ca i Ce dla tego układu klas. Metryki obiektowe 44
45 Instability I mierzy niestabilność klasy (względną podatność na zmiany) I = 0.75 I = Ce Ce + Ca X A W I jest relacją powiązań wychodzących (Ce) do wszystkich powiązań klasy Y Z Metryki obiektowe (45) RozróŜnienie pomiędzy zaleŝnościami przychodzącymi (afferent) i wychodzącymi (efferent) pozwoliło Martinowi na dalsze rozwaŝania dotyczące zaleŝności i zobowiązań klas. Wprowadził on pojęcie niestabilności klasy, czyli względnej podatności na zmiany. Metryka ta jest zdefiniowana jako stosunek zaleŝności wychodzących do wszystkich zaleŝności klasy, i przyjmuje wartości od 0 do 1. Martin na podstawie tej metryki wskazał dwa rodzaje komponentów: posiadające wiele wychodzących i niewiele wchodzących zaleŝności (a więc wartość I w ich przypadku jest bliska 1), które są niestabilne z uwagi na moŝliwość zmian w tych pakietach; posiadające więcej zaleŝności przychodzących od wychodzących (a więc I jest bliska 0), które są trudniejsze do zmodyfikowania, poniewaŝ ponoszą duŝą odpowiedzialność wobec klas od nich zaleŝnych. W zaleŝności od rodzaju komponentu, optymalne wartości metryki I powinny wynosić od 0 do 0.3 albo od 0.7 do 1.0. Oznacza to, Ŝe dobry projekt obejmuje komponenty bardzo stabilne albo bardzo niestabilne, natomiast naleŝy unikać komponentów o pośredniej stabilności. Metryki obiektowe 45
46 Abstractness A mierzy stopień abstrakcji klasy A = T T abstrakcyjne abstrakcyjne + T konkretne A jest względną liczbą klas abstrakcyjnych wewnątrz pakietu Metryki obiektowe (46) W pewnym sensie bliźniaczym pojęciem w stosunku do niestabilności jest abstrakcyjność. Metryka A mierzy stopień abstrakcji komponentu, mierzonej jako udział klas abstrakcyjnych do wszystkich klas w komponencie. Klasy abstrakcyjne są odpowiedzialne wobec innych klas, poniewaŝ to one stanowią zwykle korzeń dziedziczenia, i zmiany w nich z pewnością wymagałyby modyfikacji w klasach zaleŝnych. Metryki obiektowe 46
47 Ciąg główny A mierzy stopień abstrakcji klasy 1 Abstrakcyjność (A) ciąg główny Niestabilność (I) 1 w optymalnym przypadku I + A = 1 A = 0 i I = 1 klasy konkretne, które nie mogą mieć podklas A = 1 i I = 0 klasy czysto abstrakcyjne inne przypadki: balans pomiędzy A i I R.C. Martin (1994) Metryki obiektowe (47) Powiązanie tych dwóch metryk, I i A, pozwoliło Martinowi sformułować tezę o istnieniu tzw. ciągu głównego. Doszedł on do wniosku, Ŝe w optymalnym wypadku niestabilność klasy jest kompensowana jej abstrakcyjnością, a więc zachodzi równanie I + A = 1. JeŜeli na układzie współrzędnych osiami będą wartości I i A, wówczas połączenie punktów o współrzędnych (0, 1) i (1, 0) pozwoli narysować odcinek ciąg główny, który zawiera punkty spełniające podaną zaleŝność. Dobrze zaprojektowane klasy powinny grupować się na tym wykresie wokół punktów skrajnych, tzn. spełniających równanie oraz bardzo niestabilnych lub bardzo odpowiedzialnych. Metryki obiektowe 47
48 Znormalizowana odległość od ciągu głównego D mierzy równowagę pomiędzy stabilnością i abstrakcyjnością D = ( A + I 1) D jest punktu reprezentującego klasę (I; A) od ciągu głównego 1 Abstrakcyjność (A) D Niestabilność (I) 1 Metryki obiektowe (48) PoniewaŜ jednak nie wszystkie klasy spełniają podany wcześniej warunek, dlatego Martin zaproponował, aby obliczać odległość klasy od ciągu głównego jako miarę nieprawidłowej faktoryzacji. DuŜa odległość wskazuje na błędny przydział odpowiedzialności do klasy i konieczność jej restrukturyzacji. Metryki obiektowe 48
49 Prawo Demeter Prawo Demeter określa sposób wiązania klas ze sobą public class Customer { public Operation[] operationsat(date date) { Operation[] op = customer.getaccount().gethistory().getentriesat(adate); Operation[] Customer Account History Operation[] } } Metryki obiektowe (49) Ostatni punkt wykładu nie dotyczy wprawdzie metryk, jednak takŝe opisuje jedno z kryteriów jakości projektu obiektowego. Kryterium to zostało sformułowane w wyniku projektu Demeter i jest znane właśnie jako prawo Demeter. Dotyczy ono dopuszczalnego sposobu wiązania klas ze sobą, a więc jest powiązane z opisanymi wcześniej metrykami CBO i CF. Problem dotyczy długich łańcuchów wywołań metod, w których poszczególne ogniwa słuŝą do znalezienia kolejnego obiektu. Na pierwszy rzut oka taki łańcuch jest prawidłowym rozwiązaniem, poniewaŝ kaŝde jego ogniwo zna tylko swojego następnika i oferuje wszystkim usługę jego zlokalizowania. Jednak istnieje jedna klasa, która jest wówczas powiązana ze wszystkimi innymi: jest nią klasa, której metoda wywołuje łańcuch metod. W przedstawionym przykładzie metoda operationsat() jest związana z klasami Operation, Customer, Account i History, choć one między sobą nie są w Ŝaden sposób powiązane funkcjonalnie. Prawo Demeter opisuje sposób, w jaki naleŝy ograniczać długie łańcuchy wywołań. MoŜna je streścić zaleceniami "nigdy nie rozmawiaj z obcymi" i "ufaj jedynie swoim bezpośrednim przyjaciołom". W praktyce oznacza to, Ŝe obiekt powinien unikać wywoływania metod klasy, której obiekt został mu dostarczony przez inny obiekt Metryki obiektowe 49
50 Wersja silna i słaba prawa Demeter Dopuszczalne wywołania metod Wersja silna we własnej klasie w klasach własnych parametrów w klasach własnych składowych w obiektach samodzielnie utworzonych Wersja słaba we własnej klasie w klasach własnych parametrów i ich podklasach w klasach własnych składowych i ich podklasach w obiektach samodzielnie utworzonych i ich podklasach Metryki obiektowe (50) Istnieją dwie postaci prawa Demeter: silna i słaba. Obie określają, Ŝe klasa ma prawo wywołać metodę w następujących obiektach własnym własnych parametrów własnych atrybutów i zmiennych tymczasowych samodzielnie utworzonych przy czym w przypadku wersji słabej prawo to jest rozszerzone takŝe na podklasy klasy analizowanej. Metryki obiektowe 50
51 Wnioski z prawa Demeter Stosowanie prawa Demeter (LoD): ułatwia pielęgnację zmniejsza współczynnik błędów ogranicza powiązania między obiektami wzmacnia hermetyzację i abstrakcję obiektów powoduje przekazanie odpowiedzialności za dostęp do składowych z obiektu wywołującego do właściciela składowych Metryki obiektowe (51) Wnioski płynące ze stosowania prawa Demeter, potwierdzone empirycznie podczas badań na rzeczywistych programach wskazują, Ŝe ułatwia ono pielęgnację, zmniejsza gęstość błędów, a takŝe ogranicza liczbę i rodzaj powiązań pomiędzy obiektami, a co za tym idzie wzmacnia hermetyzację i abstrakcję klasy. Zastosowanie prawa Demeter na poziomie kodu programu powoduje przeniesienie odpowiedzialności za dostęp do metod i atrybutów klasy z obiektu odwołującego się do nich do ich właściciela. Metryki obiektowe 51
52 Podsumowanie Metryki obiektowe pozwalają ilościowo oceniać wykorzystanie mechanizmów obiektowych w projekcie Trzy zestawy metryk: MOOD, CK i Martin przekazują tę samą informację podaną w róŝny sposób Prawo Demeter określa optymalny sposób wiązania obiektów Metryki obiektowe (52) Podczas wykładu omówiono wybrane zestawy metryk obiektowych: MOOD, CK i R. Martina. Metryki obiektowe powstały, aby lepiej przewidywać i odzwierciedlać wykorzystanie mechanizmów obiektowych w systemach, ale takŝe aby obserwować, jak róŝne decyzje projektowe wpływają na zewnętrzne atrybuty oprogramowania. Wymienione trzy zestawy metryk, mimo pozornie zbieŝnego przedmiotu pomiaru, dostarczają nieco innej informacji, dotyczącej innej warstwy abstrakcji, a więc są adresowane do innych odbiorców. Prawo Demeter nie jest związane bezpośrednio z Ŝadną z wymienionych metryk: zawiera ono jedynie wskazówki, w jaki sposób naleŝy wiązań ze sobą obiekty, aby nie ograniczyć pielęgnowalności systemu. Metryki obiektowe 52
Metryki obiektowe jako wskaźniki jakości kodu i projektu
Metryki obiektowe jako wskaźniki jakości kodu i projektu Bartosz Walter Instytut Informatyki Politechniki Poznańskiej 1 Wprowadzenie Metryki stanowią szybki i wygodny sposób oceny jakości oprogramowania.
Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki
Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki Object-oriented programming Najpopularniejszy obecnie styl (paradygmat) programowania Rozwinięcie koncepcji programowania strukturalnego
Metryki oprogramowania. Marian Jureczko
Metryki oprogramowania Marian Jureczko Plan wykładu Metryki wyliczane z kodu źródłowego CK Metrics (1994) Złożoność cyklomatyczna McCabe'a (1976) Metryki wyliczane z diagramów (2002) Narzędzia do wyliczania
Podstawy Programowania Obiektowego
Podstawy Programowania Obiektowego Wprowadzenie do programowania obiektowego. Pojęcie struktury i klasy. Spotkanie 03 Dr inż. Dariusz JĘDRZEJCZYK Tematyka wykładu Idea programowania obiektowego Definicja
Komputerowe Systemy Przemysłowe: Modelowanie - UML. Arkadiusz Banasik arkadiusz.banasik@polsl.pl
Komputerowe Systemy Przemysłowe: Modelowanie - UML Arkadiusz Banasik arkadiusz.banasik@polsl.pl Plan prezentacji Wprowadzenie UML Diagram przypadków użycia Diagram klas Podsumowanie Wprowadzenie Języki
Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016
Wstęp - wykład 0 22 lutego 2016 Historia Simula 67 język zaprojektowany do zastosowan symulacyjnych; Smalltalk 80 pierwszy język w pełni obiektowy; Dodawanie obiektowości do języków imperatywnych: Pascal
Programowanie obiektowe - 1.
Programowanie obiektowe - 1 Mariusz.Masewicz@cs.put.poznan.pl Programowanie obiektowe Programowanie obiektowe (ang. object-oriented programming) to metodologia tworzenia programów komputerowych, która
hierarchie klas i wielodziedziczenie
Programowanie Obiektowe (język C++) Wykład 15. hierarchie klas i wielodziedziczenie Tomasz Marks - Wydział MiNI PW -1- Tomasz Marks - Wydział MiNI PW -2- Hierarchie klas Dziedziczenie wprowadza relację
Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.
Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r. Programowanie obiektowe Programowanie obiektowe (z ang. object-oriented programming), to
Web frameworks do budowy aplikacji zgodnych z J2EE
Web frameworks do budowy aplikacji zgodnych z J2EE Jacek Panachida promotor: dr Dariusz Król Przypomnienie Celem pracy jest porównanie wybranych szkieletów programistycznych o otwartym kodzie źródłowym
Technologie i usługi internetowe cz. 2
Technologie i usługi internetowe cz. 2 Katedra Analizy Nieliniowej, WMiI UŁ Łódź, 15 luty 2014 r. 1 Programowanie obiektowe Programowanie obiektowe (z ang. object-oriented programming), to paradygmat programowania,
Programowanie Obiektowe i C++
Programowanie Obiektowe i C++ Marcin Benke 2.10.2006 Dzisiaj Co umiemy Paradygmaty programowania Co będzie na wykładach Zasady zaliczania Programowanie obiektowe Co umiemy Programowałem w C++ Programowałem
Metryki. Pomiar złożoności modułowej i międzymodułowej oprogramowania. autor: Zofia Kruczkiewicz
Metryki Pomiar złożoności modułowej i międzymodułowej oprogramowania autor: Zofia Kruczkiewicz 1 Metryki złożoności modułowej i międzymodułowej Chidamber & Kemerer (CK) 2 Metryki złożoności modułowej i
Programowanie 2. Język C++. Wykład 3.
3.1 Programowanie zorientowane obiektowo... 1 3.2 Unie... 2 3.3 Struktury... 3 3.4 Klasy... 4 3.5 Elementy klasy... 5 3.6 Dostęp do elementów klasy... 7 3.7 Wskaźnik this... 10 3.1 Programowanie zorientowane
Dziedziczenie jednobazowe, poliformizm
Dziedziczenie jednobazowe, poliformizm 1. Dziedziczenie jednobazowe 2. Polimorfizm część pierwsza 3. Polimorfizm część druga Zofia Kruczkiewicz, ETE8305_6 1 Dziedziczenie jednobazowe, poliformizm 1. Dziedziczenie
Analiza i projektowanie aplikacji Java
Analiza i projektowanie aplikacji Java Modele analityczne a projektowe Modele analityczne (konceptualne) pokazują dziedzinę problemu. Modele projektowe (fizyczne) pokazują system informatyczny. Utrzymanie
Zagadnienia (1/3) Data-flow diagramy przepływów danych ERD diagramy związków encji Diagramy obiektowe w UML (ang. Unified Modeling Language)
Zagadnienia (1/3) Rola modelu systemu w procesie analizy wymagań (inżynierii wymagań) Prezentacja różnego rodzaju informacji o systemie w zależności od rodzaju modelu. Budowanie pełnego obrazu systemu
Diagramy klas. dr Jarosław Skaruz http://ii3.uph.edu.pl/~jareks jaroslaw@skaruz.com
Diagramy klas dr Jarosław Skaruz http://ii3.uph.edu.pl/~jareks jaroslaw@skaruz.com O czym będzie? Notacja Ujęcie w różnych perspektywach Prezentacja atrybutów Operacje i metody Zależności Klasy aktywne,
Rysunek 1: Przykłady graficznej prezentacji klas.
4 DIAGRAMY KLAS. 4 Diagramy klas. 4.1 Wprowadzenie. Diagram klas - w ujednoliconym języku modelowania jest to statyczny diagram strukturalny, przedstawiający strukturę systemu w modelach obiektowych przez
Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja
UML cz. II. UML cz. II 1/38
UML cz. II UML cz. II 1/38 UML cz. II 2/38 Klasy Najważniejsze informacje o klasie: różnica pomiędzy klasą a jej instancją (obiektem) na podstawie klasy tworzone są obiekty (instancje klasy) stan obiektu
Język programowania. Andrzej Bobyk http://www.alfabeta.lublin.pl. www.alfabeta.lublin.pl/jp/
Język programowania Andrzej Bobyk http://www.alfabeta.lublin.pl www.alfabeta.lublin.pl/jp/ Literatura K. Reisdorph: Delphi 6 dla każdego. Helion, Gliwice 2001 A. Grażyński, Z. Zarzycki: Delphi 7 dla każdego.
Modelowanie i Programowanie Obiektowe
Modelowanie i Programowanie Obiektowe Wykład I: Wstęp 20 październik 2012 Programowanie obiektowe Metodyka wytwarzania oprogramowania Metodyka Metodyka ustandaryzowane dla wybranego obszaru podejście do
Paweł Kurzawa, Delfina Kongo
Paweł Kurzawa, Delfina Kongo Pierwsze prace nad standaryzacją Obiektowych baz danych zaczęły się w roku 1991. Stworzona została grupa do prac nad standardem, została ona nazwana Object Database Management
Programowanie Obiektowe i C++ Marcin Benke
Programowanie Obiektowe i C++ Marcin Benke Dzisiaj Co umiemy Paradygmaty programowania Co będzie na wykładach Zasady zaliczania Programowanie obiektowe Co umiemy Programowałem w C++ Programowałem w języku
Laboratorium 6 DIAGRAM KLAS (Class Diagram)
Laboratorium 6 DIAGRAM KLAS (Class Diagram) Opisuje strukturę programu (a także zależności między nimi), co znajduje odzwierciedlenie w kodzie. Charakteryzuje zależności pomiędzy składnikami systemu: klasami,
Technologie obiektowe
WYKŁAD dr inż. Paweł Jarosz Instytut Informatyki Politechnika Krakowska mail: pjarosz@pk.edu.pl LABORATORIUM dr inż. Paweł Jarosz (3 grupy) mgr inż. Piotr Szuster (3 grupy) warunki zaliczenia Obecność
Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska
Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego Iwona Kochaoska Programowanie Obiektowe Programowanie obiektowe (ang. object-oriented programming) - metodyka tworzenia programów komputerowych,
Analiza i projektowanie obiektowe 2016/2017. Wykład 8: Przypisywanie obiektom odpowiedzialności (2)
Analiza i projektowanie obiektowe 2016/2017 Wykład 8: Przypisywanie obiektom odpowiedzialności (2) Jacek Marciniak Wydział Matematyki i Informatyki Uniwersytet im. Adama Mickiewicza 1 Plan wykładu 1. Wzorce
Charakterystyka oprogramowania obiektowego
Charakterystyka oprogramowania obiektowego 1. Definicja systemu informatycznego 2. Model procesu wytwarzania oprogramowania - model cyklu Ŝycia oprogramowania 3. Wymagania 4. Problemy z podejściem nieobiektowym
ANALIZA HIERARCHICZNA PROBLEMU W SZACOWANIU RYZYKA PROJEKTU INFORMATYCZNEGO METODĄ PUNKTOWĄ. Joanna Bryndza
ANALIZA HIERARCHICZNA PROBLEMU W SZACOWANIU RYZYKA PROJEKTU INFORMATYCZNEGO METODĄ PUNKTOWĄ Joanna Bryndza Wprowadzenie Jednym z kluczowych problemów w szacowaniu poziomu ryzyka przedsięwzięcia informatycznego
Dziedziczenie. Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut.
Dziedziczenie Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut. Rozpatrzmy przykład przedstawiający klasy Student oraz Pracownik: class Student class Pracownik
C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie C++ - DZIEDZICZENIE.
C++ - DZIEDZICZENIE Do najważniejszych cech języka C++ należy możliwość wielokrotnego wykorzystywania kodu Prymitywnym, ale skutecznym sposobem jest kompozycja: deklarowanie obiektów wewnątrz innych klas,
Programowanie II. Lista 3. Modyfikatory dostępu plik TKLientBanku.h
Programowanie II Lista 3 Modyfikatory dostępu plik TKLientBanku.h plik z funkcją main Przyjaźń Dziedziczenie Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące. Jest to
Analiza i projektowanie oprogramowania. Analiza i projektowanie oprogramowania 1/32
Analiza i projektowanie oprogramowania Analiza i projektowanie oprogramowania 1/32 Analiza i projektowanie oprogramowania 2/32 Cel analizy Celem fazy określania wymagań jest udzielenie odpowiedzi na pytanie:
PLAN ZARZĄDZANIA WYMAGANIAMI PROJEKT <NAZWA PROJEKTU> WERSJA <NUMER WERSJI DOKUMENTU>
Załącznik nr 4.4 do Umowy nr 35-ILGW-253-.../20.. z dnia... MINISTERSTWO FINANSÓW DEPARTAMENT INFORMATYKI PLAN ZARZĄDZANIA WYMAGANIAMI PROJEKT WERSJA numer wersji
UML w Visual Studio. Michał Ciećwierz
UML w Visual Studio Michał Ciećwierz UNIFIED MODELING LANGUAGE (Zunifikowany język modelowania) Pozwala tworzyć wiele systemów (np. informatycznych) Pozwala obrazować, specyfikować, tworzyć i dokumentować
Dziedziczenie. dr Jarosław Skaruz
Dziedziczenie dr Jarosław Skaruz http://jareks.ii.uph.edu.pl jaroslaw@skaruz.com Dziedziczenie specjalizacja Dziedziczenie generalizacja Generalizacja-specjalizacja jest takim związkiem pomiędzy klasami,
Kurs programowania. Wykład 12. Wojciech Macyna. 7 czerwca 2017
Wykład 12 7 czerwca 2017 Czym jest UML? UML składa się z dwóch podstawowych elementów: notacja: elementy graficzne, składnia języka modelowania, metamodel: definicje pojęć języka i powiazania pomiędzy
Informacje wstępne Autor Zofia Kruczkiewicz Wzorce oprogramowania 4
Utrwalanie danych zastosowanie obiektowego modelu danych warstwy biznesowej do generowania schematu relacyjnej bazy danych Informacje wstępne Autor Zofia Kruczkiewicz Wzorce oprogramowania 4 1. Relacyjne
Statystyka hydrologiczna i prawdopodobieństwo zjawisk hydrologicznych.
Statystyka hydrologiczna i prawdopodobieństwo zjawisk hydrologicznych. Statystyka zajmuje się prawidłowościami zaistniałych zdarzeń. Teoria prawdopodobieństwa dotyczy przewidywania, jak często mogą zajść
P r a w d o p o d o b i eństwo Lekcja 1 Temat: Lekcja organizacyjna. Program. Kontrakt.
P r a w d o p o d o b i eństwo Lekcja 1 Temat: Lekcja organizacyjna. Program. Kontrakt. Lekcja 2 Temat: Podstawowe pojęcia związane z prawdopodobieństwem. Str. 10-21 1. Doświadczenie losowe jest to doświadczenie,
Modelowanie obiektowe
Modelowanie obiektowe ZPO 2018/2019 Dr inż. W. Cichalewski Materiały wykonane przez W. Tylman Diagramy klas Diagramy klas Zawiera informacje o statycznych związkach między elementami (klasami) Są ściśle
ZARZĄDZANIU. Wykład VI. dr Jan Kazimirski
INFORMATYKA W ZARZĄDZANIU Wykład VI dr Jan Kazimirski jankazim@mac.edu.pl http://www.mac.edu.pl/jankazim MODELOWANIE SYSTEMÓW UML Literatura Joseph Schmuller UML dla każdego, Helion 2001 Perdita Stevens
Hierarchiczna analiza skupień
Hierarchiczna analiza skupień Cel analizy Analiza skupień ma na celu wykrycie w zbiorze obserwacji klastrów, czyli rozłącznych podzbiorów obserwacji, wewnątrz których obserwacje są sobie w jakimś określonym
Klasy abstrakcyjne i interfejsy
Klasy abstrakcyjne i interfejsy Streszczenie Celem wykładu jest omówienie klas abstrakcyjnych i interfejsów w Javie. Czas wykładu 45 minut. Rozwiązanie w miarę standardowego zadania matematycznego (i nie
Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:
Zakres laboratorium: definiowanie struktur terminologia obiektowa definiowanie klas funkcje składowe klas programy złożone z wielu plików zadania laboratoryjne Laboratorium nr 12 Temat: Struktury, klasy.
76.Struktura oprogramowania rozproszonego.
76.Struktura oprogramowania rozproszonego. NajwaŜniejsze aspekty obiektowego programowania rozproszonego to: Współdziałanie (interoperability) modułów programowych na róŝnych maszynach. Wielokrotne wykorzystanie
problem w określonym kontekście siły istotę jego rozwiązania
Wzorzec projektowy Christopher Alexander: Wzorzec to sprawdzona koncepcja, która opisuje problem powtarzający się wielokrotnie w określonym kontekście, działające na niego siły, oraz podaje istotę jego
JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.
JAVA Java jest wszechstronnym językiem programowania, zorientowanym obiektowo, dostarczającym możliwość uruchamiania apletów oraz samodzielnych aplikacji. Java nie jest typowym kompilatorem. Źródłowy kod
Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np
Klasy Klasa jest nowym typem danych zdefiniowanym przez użytkownika Wartości takiego typu nazywamy obiektami Najprostsza klasa jest po prostu strukturą, np struct Zespolona { Klasy jako struktury z operacjami
TECHNOLOGIE OBIEKTOWE. Wykład 3
TECHNOLOGIE OBIEKTOWE Wykład 3 2 Diagramy stanów 3 Diagram stanu opisuje zmiany stanu obiektu, podsystemu lub systemu pod wpływem działania operacji. Jest on szczególnie przydatny, gdy zachowanie obiektu
Testy poziom po poziomie
poziom po poziomie Prowadzący: Tomasz Mielnik Eliza Słonińska Agenda 1. Modele prowadzenia projektów 2. V-Model 3. Poziomy testów 4. Typy testów 5. Zadanie 1 Modele prowadzenia projektów Wodospadowy (ang.
Programowanie obiektowe
Laboratorium z przedmiotu Programowanie obiektowe - zestaw 02 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas i obiektów z wykorzystaniem dziedziczenia.
Kompozycja i dziedziczenie klas
Związki między klasami: jest i zawiera Programowanie obiektowe Przkład: Pojazd Kompozycja i dziedziczenie klas Silnik Pojazd silnikowy Rower Wóz konny Paweł Rogaliński Instytut Informatyki, Automatyki
Interfejsy i klasy wewnętrzne
Interfejsy i klasy wewnętrzne mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011 Interfejs klasy sposób komunikacji z jej obiektami (zestaw składowych publicznych). Określa on zestaw
Projektowanie oprogramowania cd. Projektowanie oprogramowania cd. 1/34
Projektowanie oprogramowania cd. Projektowanie oprogramowania cd. 1/34 Projektowanie oprogramowania cd. 2/34 Modelowanie CRC Modelowanie CRC (class-responsibility-collaborator) Metoda identyfikowania poszczególnych
URZĄD MARSZAŁKOWSKI WOJEWÓDZTWA OPOLSKIEGO DEPARTAMENT POLITYKI REGIONALNEJ I PRZESTRZENNEJ Referat Ewaluacji
URZĄD MARSZAŁKOWSKI WOJEWÓDZTWA OPOLSKIEGO DEPARTAMENT POLITYKI REGIONALNEJ I PRZESTRZENNEJ Referat Ewaluacji Ocena efektu makroekonomicznego Regionalnego Programu Operacyjnego Województwa Opolskiego na
Technologia informacyjna
Technologia informacyjna Pracownia nr 9 (studia stacjonarne) - 05.12.2008 - Rok akademicki 2008/2009 2/16 Bazy danych - Plan zajęć Podstawowe pojęcia: baza danych, system zarządzania bazą danych tabela,
Laboratorium modelowania oprogramowania w języku UML. Ćwiczenie 2 Ćwiczenia w narzędziu CASE diagram klas. Materiały dla studentów
Zakład Elektrotechniki Teoretycznej i Informatyki Stosowanej Wydział Elektryczny, Politechnika Warszawska Ćwiczenie 2 Ćwiczenia w narzędziu CASE diagram klas Materiały dla studentów Projekt współfinansowany
Wykład I. Wprowadzenie do baz danych
Wykład I Wprowadzenie do baz danych Trochę historii Pierwsze znane użycie terminu baza danych miało miejsce w listopadzie w 1963 roku. W latach sześcdziesątych XX wieku został opracowany przez Charles
Program 6. Program wykorzystujący strukturę osoba o polach: imię, nazwisko, wiek. W programie wykorzystane są dwie funkcje:
Program 6 Program wykorzystujący strukturę osoba o polach: imię, nazwisko, wiek. W programie wykorzystane są dwie funkcje: Funkcja pobierz_osobe wczytuje dane osoby podanej jako argument. Funkcja wypisz_osobe
JAVA W SUPER EXPRESOWEJ PIGUŁCE
JAVA W SUPER EXPRESOWEJ PIGUŁCE Obiekt Obiekty programowe to zbiór własności i zachowań (zmiennych i metod). Podobnie jak w świecie rzeczywistym obiekty posiadają swój stan i zachowanie. Komunikat Wszystkie
Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski
Adapter: opis Wzorce Strukturalne Tomasz Borzyszkowski Alternatywna nazwa: Wrapper (opakowanie) Rola obiektu Adapter: pełni wobec Klienta rolę otoczki, która umożliwia przetłumaczenie jego żądań na protokół
Iteracyjno-rozwojowy proces tworzenia oprogramowania Wykład 3 część 1
Iteracyjno-rozwojowy proces tworzenia oprogramowania Wykład 3 część 1 Zofia Kruczkiewicz 1 Zunifikowany iteracyjno- przyrostowy proces tworzenia oprogramowania kiedy? Przepływ działań Modelowanie przedsiębiorstwa
Wstęp [2/2] Wbrew częstemu przekonaniu, nie są one gotowymi rozwiązaniami, to tylko półprodukty rozwiązania.
Adrian Skalczuk Szymon Kosarzycki Spis Treści Wstęp [1/2] Wzorce projektowe są nieodłącznym przyjacielem programisty pozwalają pisać czystszy kod, łatwiejszy do zrozumienia przez innych i zapewniają pewien
Podstawy modelowania programów Kod przedmiotu
Podstawy modelowania programów - opis przedmiotu Informacje ogólne Nazwa przedmiotu Podstawy modelowania programów Kod przedmiotu 11.3-WI-INFP-PMP Wydział Kierunek Wydział Informatyki, Elektrotechniki
Projektowanie obiektowe Wzorce projektowe. Gang of Four Wzorce rozszerzeń
Projektowanie obiektowe Wzorce projektowe Gang of Four Wzorce rozszerzeń 1 Roadmap Decorator Iterator Visitor 2 Wzorce rozszerzeń Mają na celu uczynić proces rozszerzania kodu bardziej czytelnym, prostym
Analiza i projektowanie obiektowe 2016/2017. Wykład 10: Tworzenie projektowego diagramu klas
Analiza i projektowanie obiektowe 2016/2017 Wykład 10: Tworzenie projektowego diagramu klas Jacek Marciniak Wydział Matematyki i Informatyki Uniwersytet im. Adama Mickiewicza 1 Plan wykładu 1. Projektowy
Modelowanie związków encji. Oracle Designer: Diagramy związków encji. Encja (1)
Modelowanie związków encji Oracle Designer: Modelowanie związków encji Technika określania potrzeb informacyjnych organizacji. Modelowanie związków encji ma na celu: dostarczenie dokładnego modelu potrzeb
Java - tablice, konstruktory, dziedziczenie i hermetyzacja
Java - tablice, konstruktory, dziedziczenie i hermetyzacja Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak PLAN WYKŁADU zmienne tablicowe konstruktory klas dziedziczenie hermetyzacja
Programowanie obiektowe
Laboratorium z przedmiotu - zestaw 02 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas i obiektów z wykorzystaniem dziedziczenia. Wprowadzenie teoretyczne.
Projektowanie obiektowe. Roman Simiński Wzorce projektowe Wybrane wzorce strukturalne
Projektowanie obiektowe Roman Simiński roman.siminski@us.edu.pl www.siminskionline.pl Wzorce projektowe Wybrane wzorce strukturalne Fasada Facade Pattern 2 Wzorzec Fasada Facade Pattern koncepcja 3 Wzorzec
Bazy danych 1. Wykład 5 Metodologia projektowania baz danych. (projektowanie logiczne)
Bazy danych 1 Wykład 5 Metodologia projektowania baz danych (projektowanie logiczne) Projektowanie logiczne przegląd krok po kroku 1. Usuń własności niekompatybilne z modelem relacyjnym 2. Wyznacz relacje
Laboratorium modelowania oprogramowania w języku UML. Ćwiczenie 5 Ćwiczenia w narzędziu CASE diagram przypadków uŝycia. Materiały dla nauczyciela
Zakład Elektrotechniki Teoretycznej i Informatyki Stosowanej Wydział Elektryczny, Politechnika Warszawska Ćwiczenie 5 Ćwiczenia w narzędziu CASE diagram przypadków uŝycia Materiały dla nauczyciela Projekt
12) Wadą modelu kaskadowego jest: Zagadnienia obowiązujące na egzaminie z inżynierii oprogramowania: 13) Wadą modelu opartego na prototypowaniu jest:
Zagadnienia obowiązujące na egzaminie z inżynierii oprogramowania: 1) Oprogramowanie to: 2) Produkty oprogramowania w inżynierii oprogramowania można podzielić na: 3) W procesie wytwarzania oprogramowania
Style programowania - krótki przeglad
Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego.
Zofia Kruczkiewicz - Modelowanie i analiza systemów informatycznych 1
Charakterystyka oprogramowania obiektowego 1. Definicja systemu informatycznego 2. Model procesu wytwarzania oprogramowania - model cyklu życia oprogramowania 3. Wymagania 4. Problemy z podejściem nieobiektowym
Diagram klas UML jest statycznym diagramem, przedstawiającym strukturę aplikacji bądź systemu w paradygmacie programowania obiektowego.
Umiejętność czytania oraz tworzenia diagramów klas UML jest podstawą w przypadku zawodu programisty. Z takimi diagramami będziesz spotykał się w przeciągu całej swojej kariery. Diagramy klas UML są zawsze
Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton
Dzisiejszy wykład Wzorce projektowe Visitor Client-Server Factory Singleton 1 Wzorzec projektowy Wzorzec nazwana generalizacja opisująca elementy i relacje rozwiązania powszechnie występującego problemu
Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04
Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04 Cel zajęć. Celem zajęć jest zapoznanie się ze sposobem działania popularnych kolekcji. Wprowadzenie teoretyczne. Rozważana w ramach niniejszych
Teoria błędów pomiarów geodezyjnych
PodstawyGeodezji Teoria błędów pomiarów geodezyjnych mgr inŝ. Geodeta Tomasz Miszczak e-mail: tomasz@miszczak.waw.pl Wyniki pomiarów geodezyjnych będące obserwacjami (L1, L2,, Ln) nigdy nie są bezbłędne.
Enkapsulacja, dziedziczenie, polimorfizm
17 grudnia 2008 Spis treści I Enkapsulacja 1 Enkapsulacja 2 Spis treści II Enkapsulacja 3 Czym jest interfejs Jak definuje się interfejs? Rozszerzanie interfejsu Implementacja interfejsu Częściowa implementacja
Drzewa Decyzyjne, cz.2
Drzewa Decyzyjne, cz.2 Inteligentne Systemy Decyzyjne Katedra Systemów Multimedialnych WETI, PG Opracowanie: dr inŝ. Piotr Szczuko Podsumowanie poprzedniego wykładu Cel: przewidywanie wyniku (określania
Programowanie obiektowe
Wykład 12 Marcin Młotkowski 16 maja 2018 Plan wykładu 1 Analiza obiektowa Dziedziczenie Dziedziczenie a składanie 2 Marcin Młotkowski 482 / 537 Dziedziczenie Dziedziczenie a składanie Plan wykładu 1 Analiza
Kumulowanie się defektów jest możliwe - analiza i potwierdzenie tezy
Kumulowanie się defektów jest możliwe - analiza i potwierdzenie tezy Marek Żukowicz 14 marca 2018 Streszczenie Celem napisania artykułu jest próba podania konstruktywnego dowodu, który wyjaśnia, że niewielka
Podstawy projektowania systemów komputerowych
Podstawy projektowania systemów komputerowych Diagramy klas UML 1 Widok logiczny Widok logiczny Widok fizyczny Widok przypadków użycia Widok procesu Widok konstrukcji Używany do modelowania części systemu
MODELOWANIE OBIEKTOWE
(Wykład na podstawie literatury: M.Śmiałek Zrozumieć UML 2.0, Helion 2005) UML Unified Modeling Language (język do specyfikowania, wizualizowania, konstruowania i dokumentacji tzw. artefactów oraz czynności
Wykład 7: Pakiety i Interfejsy
Wykład 7: Pakiety i Interfejsy Plik Źródłowy w Javie Składa się z: instrukcji pakietu (pojedyncza, opcjonalna) instrukcji importujących (wielokrotne, opcjonalne) deklaracji klasy publicznej (pojedyncza,
Modelowanie diagramów klas w języku UML. Łukasz Gorzel 244631@stud.umk.pl 7 marca 2014
Modelowanie diagramów klas w języku UML Łukasz Gorzel 244631@stud.umk.pl 7 marca 2014 Czym jest UML - Unified Modeling Language - Rodzina języków modelowania graficznego - Powstanie na przełomie lat 80
Przepływy danych. Oracle Designer: Modelowanie przepływów danych. Diagramy przepływów danych (1) Diagramy przepływów danych (2)
Przepływy danych Oracle Designer: Modelowanie przepływów danych Cele: zobrazowanie funkcji zachodzących w organizacji, identyfikacja szczegółowych informacji, przetwarzanych przez funkcje, pokazanie wymiany
OpenAI Gym. Adam Szczepaniak, Kamil Walkowiak
OpenAI Gym Adam Szczepaniak, Kamil Walkowiak Plan prezentacji Programowanie agentowe Uczenie przez wzmacnianie i problemy związane z rozwojem algorytmów Charakterystyka OpenAI Gym Biblioteka gym Podsumowanie
Dziedziczenie. Tomasz Borzyszkowski
Dziedziczenie Tomasz Borzyszkowski Podstawy Zobacz: Dziedzictwo1.java Dziedzictwo2.java Dziedziczenie jest jedną z podstawowych cech OOP ponieważ umożliwia łatwe implementowanie klasyfikacji hierarchicznych.
Wprowadzenie do programowania aplikacji mobilnych
Wprowadzenie do programowania aplikacji mobilnych dr Przemysław Juszczuk dr Przemysław Juszczuk Trochę historii Idea wzorców projektowych wywodzi się jeszcze z wczesnych lat osiemdziesiątych ubiegłego
Podstawy Języka Java
Podstawy Języka Java Programowanie obiektowe Programowanie obiektowe (z ang. object-oriented programming), to paradygmat programowania, w którym programy definiuje się za pomocą obiektów elementów łączących
Najprostszy schemat blokowy
Definicje Modelowanie i symulacja Modelowanie zastosowanie określonej metodologii do stworzenia i weryfikacji modelu dla danego układu rzeczywistego Symulacja zastosowanie symulatora, w którym zaimplementowano
Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak
Java język programowania obiektowego Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak 1 Język Java Język Java powstał w roku 1995 w firmie SUN Microsystems Java jest językiem: wysokiego
Programowanie deklaratywne
Programowanie deklaratywne Artur Michalski Informatyka II rok Plan wykładu Wprowadzenie do języka Prolog Budowa składniowa i interpretacja programów prologowych Listy, operatory i operacje arytmetyczne
Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.
Polimorfizm jest filarem programowania obiektowego, nie tylko jeżeli chodzi o język C++. Daje on programiście dużą elastyczność podczas pisania programu. Polimorfizm jest ściśle związany z metodami wirtualnymi.