Te atrybuty wewnętrzne są wyraŝane za pomocą tzw. metryk, czyli prostych wyraŝeń, wiąŝących pewne elementy programu (projektu, kodu źródłowego itp.).

Podobne dokumenty
Te atrybuty wewnętrzne są wyrażane za pomocą tzw. metryk, czyli prostych wyrażeń, wiążących pewne elementy programu (projektu, kodu źródłowego itp.).

Metryki. Przykłady pomiaru złożoności modułowej i międzymodułowej oprogramowania. autor: Zofia Kruczkiewicz

Wykład 6. Charakterystyki zewnętrzne a wewnętrzne oprogramowania (2) Narzędzia do pomiaru programowania. autor: Zofia Kruczkiewicz

Metryki logicznej struktury programu, czyli przepływu sterowania Liczby cyklomatyczne McCabe V LI (G) = e n +p+1, V(G) = e n + 2*p

Iteracyjno-rozwojowy cykl oprogramowania cykl 2. Java Zofia Kruczkiewicz 1

Metryki. Narzędzia do pomiaru złożoności modułowej i międzymodułowej oprogramowania. autor: Zofia Kruczkiewicz 1

Instrukcja 3 Laboratorium z Podstaw Inżynierii Oprogramowania

Wykład 5. Charakterystyki zewnętrzne a wewnętrzne oprogramowania (1) - definicje metryk międzymodułowych i modułowych autor: Zofia Kruczkiewicz

Instrukcja 2 Laboratorium z Podstaw Inżynierii Oprogramowania

Modele struktur zarządzania Wykład 4

Wykład 4_2 część druga. Iteracyjno-rozwojowy cykl oprogramowania 4

Instrukcja 2 Laboratorium z Podstaw Inżynierii Oprogramowania

Laboratorium z przedmiotu: Inżynieria Oprogramowania INP

Instrukcja 4 Laboratorium z Podstaw Inżynierii Oprogramowania. Warstwa klienta: Interfejs graficzny użytkownika

Instrukcja 1 Laboratorium z Podstaw Inżynierii Oprogramowania. Relacja 1 do 1..0 instrukcja z lab1

Metryki. Pomiar złożoności modułowej i międzymodułowej oprogramowania. autor: Zofia Kruczkiewicz

Jakość oprogramowania. Część 1

Laboratorium 8 Diagramy aktywności

{ Dane1 d=(dane1)o; return nazwisko.equals(d.nazwisko) && srednia==d.srednia && uwagi.equals(d.uwagi); }

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 7

Diagram stanów Laboratorium 9

Metody Metody, parametry, zwracanie wartości

Klasy i obiekty cz II

Programowanie obiektowe

PODEJŚCIE OBIEKTOWE. Przykład 1 metody i atrybuty statyczne

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 5

Język ludzki kod maszynowy

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 6

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Instrukcja Wprowadzenie do tworzenia oprogramowania. Relacja 1 do 1..0 instrukcja z lab1

Instrukcja 1 Laboratorium z Podstaw Inżynierii Oprogramowania. Relacja 1 do 1..0 instrukcja z lab1

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Programowanie obiektowe

Programowanie, algorytmy i struktury danych

dziedziczenie - po nazwie klasy wystąpią słowa: extends nazwa_superklasy

Diagramy maszyn stanowych, wzorce projektowe Wykład 5 część 1

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Platformy Programistyczne Podstawy języka Java

Diagramy stanów tworzenie modeli analizy i projektowania Na podstawie UML 2.0 Tutorial

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 5

Laboratorium 2_3_4 Wzorce oprogramowania zastosowane w modelu obiektowym (wg Alan Shalloway, James R.Trott)

Iteracyjno-rozwojowy cykl oprogramowania 4

Diagramy maszyn stanowych, wzorce projektowe Wykład 5 część 1

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Polimorfizm. dr Jarosław Skaruz

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych

Języki i metody programowania Java. Wykład 2 (część 2)

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Modelowanie obiektowe

Podejście obiektowe. Tablice (1) obiektów

Wykład 5: Więcej o Klasach i Metodach

Materiały pomocnicze do wykładu 3 - Elementy języka Java

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Technologie i usługi internetowe cz. 2

Zofia Kruczkiewicz, Programowanie obiektowe - java, wykład 2 1

Języki i paradygmaty programowania Wykład 2. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/18

Instrukcja tworzenia aplikacji EE na bazie aplikacji prezentowanej na zajęciach lab.4 z PIO umożliwiająca przez sieć dostęp wielu użytkownikom.

Podstawy programowania obiektowego

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Definiowanie własnych klas

1. Czynności przygotowujące aplikację działającą na platformie Java SE Biblioteka5 (należy ją pobrać z załącznika z p.1)

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Diagramy czynności Na podstawie UML 2.0 Tutorial

Różne właściwości. Różne właściwości. Różne właściwości. C++ - klasy. C++ - klasy C++ - KLASY

Wykład 2: Podstawy Języka

Programowanie obiektowe

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

dr inż. Piotr Czapiewski Tworzenie aplikacji w języku Java Laboratorium 1

Dokumentacja do API Javy.

Złożoność strukturalna programów, metryki złożoności modułowej

Rozdział 4 KLASY, OBIEKTY, METODY

Języki i metody programowania Java Lab1 Zofia Kruczkiewicz

Zaawansowane aplikacje WWW - laboratorium

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Podstawy programowania. Wykład 3 Konstrukcje sterujące. Krzysztof Banaś Podstawy programowania 1

Komputerowe Systemy Przemysłowe: Modelowanie - UML. Arkadiusz Banasik arkadiusz.banasik@polsl.pl

Podstawy i języki programowania

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Doświadczalnictwo leśne. Wydział Leśny SGGW Studia II stopnia

Podstawy Programowania C++

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Programowanie obiektowe

Java: interfejsy i klasy wewnętrzne

Programowanie obiektowe

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Podstawy programowania skrót z wykładów:

Programowanie obiektowe

Podejście obiektowe. Tablice obiektów Przykład 1 metody i atrybuty statyczne oraz niestatyczne

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Technologie obiektowe

Podstawy Języka Java

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Projektowanie obiektowe. dr Jarosław Skaruz

Transkrypt:

Wykład 13 ZłoŜoność strukturalna programów, metryki Metryki międzymodułowe 1. Podstawowe definicje Struktura programu to: przedstawienie programu na róŝnych poziomach abstrakcji rozumiane jako odseparowanie danych od bezpośredniej reprezentacji wynika to z sekwencyjnego przebiegu procesu myślowego i jednocześnie z moŝliwości wyobraŝenia sobie zaledwie ograniczonej liczby pojęć podział programu na podsystemy, moduły, klasy, funkcje. Problem złoŝoności struktury programu odgrywa kluczową rolę w: testowaniu programu, czyli osiąganiu jak największej jego niezawodności rozwijaniu programu wynikającego z moŝliwości zrozumienia programu i stopnia osiągniętej abstrakcji w dziedzinie danych i operacji pielęgnacji programu wielokrotnemu zastosowaniu elementów programu (biblioteki, moduły). ZłoŜoność struktury programu jest odpowiedzialna za następujące atrybuty zewnętrzne (charakterystyki) oprogramowania: 1) jakość oprogramowania: testowalności, a więc równieŝ niezawodności, stopnia osiągniętej abstrakcji zrozumiałości programu stopnia pielęgnacji wielouŝywalności 2) funkcjonalność 3) koszt. ZłoŜoność struktury programu jest reprezentowana za pomocą atrybutów (charakterystyk) wewnętrznych oprogramowania. Atrybuty wewnętrzne oprogramowania są wyraŝane w postaci obiektywnych miar tych atrybutów. WyróŜnia się następujące atrybuty wewnętrzne oprogramowania: charakterystyki międzymodułowe czyli wszelkie związki między modułami (przekazywanie sterowania i parametrów, wspólne korzystanie z pól danych, przy projektowaniu jednego modułu uwzględnia się właściwości innego modułu charakterystyki modułowe związane z semantycznymi zaleŝnościami między elementami modułu oraz charakterystykami: stylu programowania, rozmiaru oprogramowania, charakteru struktur danych, przepływu sterowania czyli struktury logicznej oprogramowania, oraz spójności oprogramowania jako związku między funkcjami działającymi na danych, a tymi danymi. Te atrybuty wewnętrzne są wyraŝane za pomocą tzw. metryk, czyli prostych wyraŝeń, wiąŝących pewne elementy programu (projektu, kodu źródłowego itp.). Zofia Kruczkiewicz, Projektowanie oprogramowania, Wykład 13 1

Wybór elementów wynika z ich odpowiedzialności za dany atrybut wewnętrzny, a wyraŝenie określa wartościowanie atrybutu. ZłoŜoność ZłoŜoność obliczeniowa ZłoŜoność psychologiczna ZłoŜoność reprezentacji zewnętrzne atrybuty ZłoŜoność funkcjonalna problemu Właściwości programisty jest zaleŝna od ZłoŜoność produktu/dokumentacji = złoŝoność strukturalna mierzona przez metryki złoŝoności strukturalnej wewnętrzne atrybuty metryki stylu metryki rozmiaru metryki struktur danych metryki logicznej struktury (przepływu sterowania) metryki spójności metryki modułowe (złoŝoność proceduralna) metryki modułowe metryki modułowe (złoŝoność semantyczna ) jest zaleŝna od metryki semantycznej spójności metryki międzymodułowe metryki połączeń miary wewnętrznych atrybutow Rys. 1. Klasyfikacja pojęć złoŝoności oprogramowania i podanie związku między zewnętrznymi atrybutami oprogramowania i miarami wewnętrznych atrybutów Zofia Kruczkiewicz, Projektowanie oprogramowania, Wykład 13 2

2. Podstawy formalne pomiaru oprogramowania Pomiar jest to proces, w którym atrybutom elementów świata rzeczywistego przydzielane są liczby lub symbole w taki sposób, aby charakteryzować te atrybuty według określonych zasad. Jednostki przydzielane atrybutom w ramach pomiaru nazywane są miarą danego atrybutu. Metryka to proponowana (postulowana) miara. [15] Formalna definicja elementów środowiska pomiarowego metryk [12], m. in.: system relacji: A = (A, R j, o j ), gdzie A oznacza niepusty zbiór obiektów rzeczywistych z dziedziny oprogramowania, R j są empirycznymi relacjami (np. równy, większy), o j oznacza binarne operacje w zbiorze A; B = (B, S j, o j ), gdzie B jest niepustym zbiorem formalnych obiektów (np. liczby, wektory) w dziedzinie pomiarów, S j są relacjami (np. równy, większy) w zbiorze B, o j oznacza binarne operacje w zbiorze B; odwzorowanie homomorficzne: µ: A B, stąd mamy a A b B ( µ(a) = b); typy skal jako (A,B,µ): nominalna, porządkowa, przedziałowa, absolutna, względna. Typ skali ogranicza obszar odwzorowań, czyli ogranicza pomiar. Przykłady skal: a) skala nominalna: przypisanie obiektom pewnych ustalonych etykiet np. numery autobusów b) skala porządkowa: przypisanie obiektom etykiet wg ustalonego porządku np. false, true c) skala przedziałowa: znaczenie ma odległość między obiektami: g(x)=a*x+b (a>0) np. temperatura w stopniach Celsjusza d) skala względna: znaczenie ma odległość między obiektami oraz jedyny punkt odniesienia: g(x)=a*x (a>0) np. temperatura w stopniach Kelvina, pomiar długości, pomiar czasu e) skala absolutna: kaŝdy obiekt ma jedną dopuszczalną wartość g(x) =x np. liczba liter w zdaniu, miary statystyczne (wartość przeciętna, mediana, wariancja itp.) Zofia Kruczkiewicz, Projektowanie oprogramowania, Wykład 13 3

Aksjomaty oceny złoŝoności oprogramowania: 1. Przy porównywaniu dwóch programów pomija się fragmenty o tej samej złoŝoności. 2. Istnieje skończona liczba programów o tej samej złoŝoności. 3. Istnieją róŝne programy P i Q, takie Ŝe mają identyczną złoŝoność 4. Istnieją równowaŝne P Q tzn. spełniające te same funkcje, lecz o róŝnej złoŝoności. 5. ZłoŜoność programów P i Q połączonych jest niemniejsza od złoŝoności kaŝdego z osobna. 6. Dodanie do kaŝdego z pewnych programów P i Q o identycznej złoŝoności pewnego programu R moŝe spowodować róŝnice w złoŝoności uzyskanych programów. 7. JeŜeli program Q powstał przez permutację porządku elementów programu P, to P i Q mają róŝną złoŝoność. 8. Jeśli program Q róŝni się jedynie nazwami od programu P (czyli Q powstał z P po zmianie nazw), to P i Q mają identyczną złoŝoność. 9. ZłoŜoność programu w wyniku połączenia dowolnych programów P i Q jest większa niŝ suma złoŝoności kaŝdego z nich. 3. Podstawowe metryki Poszczególne metryki złoŝoności strukturalnej mogą być wyznaczane w dowolnym stadium rozwoju oprogramowania, jednak to rzutuje na wybór elementów produktu i rodzaj wyraŝenia. Opis dotyczy metryk operujących na elementach programów napisanych w języku C++. Całkowita złoŝoność C p programu jest równa: C p = C I + C M, + (C hmax - C h ) gdzie C I -złoŝoność międzymodułowa, C M -złoŝoność modułu, C hmax -całkowita złoŝoność wynikająca ze spójności modułu zmniejszona o złoŝoność semantyczną modułu C h Zofia Kruczkiewicz, Projektowanie oprogramowania, Wykład 13 4

4. Metryki złoŝoności międzymodułowej Osłabienie powiązań miedzy-modułowych prowadzi do zmniejszenia oddziaływań między modułami oraz poprawy struktury oprogramowania. Zbiór połączeń R modułu X z pozostałymi modułami jest sumą relacji R i zachodzących między zbiorem elementów łączących wyjściowych x modułu X i elementów łączących wejściowych y z modułów Y 1,...,Y N. {<x, y> : <x, y> R i X Y i dla i {1,,N R = i N R i i N (X Y i ) Elementami łączącymi wyjściowymi są: 1) Funkcja/metoda wywołująca funkcję z innego modułu 2) Atrybut, parametr lub wynik funkcji/metody typu zdefiniowanego w innym module przekazywany przez wartość, wskaźnik i referencję 3) uŝywanie zmiennych automatycznych typu zdefiniowanego poza modułem 4) wszystkie deklaracje extern 5) kaŝda informacja z poza modułu potrzebna do zdefiniowania ciała funkcji (np. obsługa błędów), definicji typu strukturalnego, definicji dowolnej zmiennej Elementami łączącymi wejściowymi są: 1) funkcja/metoda wywoływana przez funkcję/metodę z innego modułu 2) typ zdefiniowany w module i zastosowany w innym module do definicji atrybutu, parametru przekazywanego przez wartość, wskaźnik i referencję 3) typ zdefiniowany w module i zastosowany w innym module do definicji zmiennej automatycznej 4) typ zdefiniowany i uŝywany do definicji zmiennej extern 5) informacja zawarta w module potrzebna w innych modułach do dowolnej definicji Zofia Kruczkiewicz, Projektowanie oprogramowania, Wykład 13 5

Przyklady metryk: Fan-out Metryka Fan-out wyznaczająca liczbę połączeń elementów wyjściowych jednego modułu z elementami wejściowymi innych modułów. Uwzględnia się tylko jedno dowolne połączenie wyjściowe-wejściowe z kaŝdym z modułów. Relacja R opisująca tę metrykę zawiera tylko jedną dowolną parę jako połączenie z kaŝdym z modułów. Fan-in Metryka Fan-in wyznaczająca liczbę połączeń elementów wejściowych jednego modułu z elementami wyjściowymi innych modułów. Uwzględnia się tylko jedno dowolne wejściowo-wyjściowe połączenie z kaŝdym z modułów. Relacja R opisująca tę metrykę zawiera tylko jedną dowolną parę jako połączenie z kaŝdym z modułów. RS Metryka RS jest sumą zbiorów wszystkich elementów łączących dany moduł ze wszystkimi pozostałymi. Uwzględnia się zbiór wszystkich elementów wyjściowych własnych modułu oraz zbiory elementów łączących wejściowych z innych modułów, z którymi jest połączony dany moduł. KaŜdy z elementów wejściowych i wyjściowych wystąpi tylko raz w zbiorze RS. RS = M ( i N Y i ), gdzie M jest zbiorem elementów wyjściowych połączonych danego modułu oraz Y i są zbiorami elementów wejściowych połączonych w N modułach RFC Metryka RFC jest mocą zbioru RS, czyli RFC= RS Zofia Kruczkiewicz, Projektowanie oprogramowania, Wykład 13 6

Przykład 1. Przykład wyznaczenia poszczególnych metryk dla modułu A Moduł A zawiera elementy łączące wyjściowe: A1, A2,A3,A4. Moduł B zawiera łączące elementy wejściowe B1, B2, moduł C zawiera łączący element wejściowy C1 oraz moduł D zawiera element wejściowy łączący D1 oraz: A1 łączy się z B1 A2 łączy się B2, C1 A3 łączy się D1 A4 łączy się C1 RS={A1,A2,A3,A4 {B1,B2 {D1 {C1 = {A1,A2,A3,A4,B1,B2,D1,C1 RFC= RS =8 Fan-out= {<A1,B1>, <A2,C1>, <A3,D1> = 3 //dowolny element wejściowy Fan-in= { =0 R={<A1,B1>, <A2,B2>, <A2,C1>,<A3,D1>,<A4,C1> R =5 Przykład 2 Moduł A Moduł B Moduł E Moduł D Moduł C połączenie wejściowe połączenie wyjściowe Rys. 2. Przykłady połączeń między klasami Przykłady metryk dla modułów z rys. 2. A B C D E Fan-out 3 1 1 1 1 Fan-in 0 3 1 1 2 RFC 8 3 3 2 2 R 5 2 2 1 1 Zofia Kruczkiewicz, Projektowanie oprogramowania, Wykład 13 7

Przykład 3 package mm1; public class M1 { double x1,x2; public void setx1(double x1_) { x1=x1_; public void setx2(double x2_) { x2 = x2_; package mm2; import java.lang.math; import mm1.m1; public class M2 { private double a, b, c; private M1 pierw =new M1(); public M2(double a_, double b_, double c_) { a=a_; b=b_; c=c_; public int a1 () { int B; double pom=2*a, d=b*b-4*a*c; if (a==0) B=0; else if (d<0) B=1; else { B=2; d=math.sqrt(d); pierw.setx1((-b-d)/pom); pierw.setx2((-b+d)/pom); return B; Zofia Kruczkiewicz, Projektowanie oprogramowania, Wykład 13 8

package mm3; import mm2.m2; public class M3 { M2 B; public M3 (M2 B_) { B=B_; public void a2( ) { int b=b.a1(); if (b<1) System.out.println("Brak równania kwadratowego\n"); else if (b==1) System.out.println("Brak pierwiastków rzeczywistych\n"); else System.out.println("Rownanie ma pierwiastki rzeczywiste\n"); package pprogram1; import mm3.m3; import mm2.m2; public class Program1 { public static void main(string arg[]) { M2 rownanie=new M2(1,2,3); M3 info= new M3(rownanie); info.a2(); Zofia Kruczkiewicz, Projektowanie oprogramowania, Wykład 13 9

mm1.m1 java.lang.math Math.sqrt M1.setx1 mm2.m2 M1.setx2 M1() M2() java.lang.system System.out.println M2.a1 mm3.m3 M3.a2 M3() pprogram1.program1 mm1 mm2 mm3 pprogram1 java.lang.system java.lang.math Fan-out - 1 + (1) 1+ (1) 2 - - Fan-in 1 2 1 - (1) (1) RFC - 5+(1) 2+(1) 4 - - R - 3+(1) 1+(1) 3 - - Zofia Kruczkiewicz, Projektowanie oprogramowania, Wykład 13 10

main M2 a2 a1 Zofia Kruczkiewicz, Projektowanie oprogramowania, Wykład 13 11

Zofia Kruczkiewicz, Projektowanie oprogramowania, Wykład 13 12

Zofia Kruczkiewicz, Projektowanie oprogramowania, Wykład 13 13

Zofia Kruczkiewicz, Projektowanie oprogramowania, Wykład 13 14

Zofia Kruczkiewicz, Projektowanie oprogramowania, Wykład 13 15

Zofia Kruczkiewicz, Projektowanie oprogramowania, Wykład 13 16

Przykład 3 package ksiazka1; import tytul1.tytul_ksiazki; public class Ksiazka { private int numer; /** @poseidon-generated */ public Tytul_ksiazki tytul_ksiazki; /** @poseidon-generated */ public int getnumer() { return numer; /** @poseidon-generated */ public void setnumer(int _numer) { numer = _numer; public Ksiazka() { /** @poseidon-generated */ public boolean equals(object _ksiazka) // your code here { return numer==((ksiazka)_ksiazka).getnumer(); public Tytul_ksiazki gettytul_ksiazki() /** @poseidon-generated */ { return tytul_ksiazki; public void settytul_ksiazki(tytul_ksiazki tytul_ksiazki) { if (this.tytul_ksiazki!= tytul_ksiazki) /** @poseidon-generated */ { if (this.tytul_ksiazki!= null) this.tytul_ksiazki.removeksiazka(this); this.tytul_ksiazki = tytul_ksiazki; if (tytul_ksiazki!= null) tytul_ksiazki.addksiazka(this); public String tostring() { String pom=tytul_ksiazki.tostring(); pom+=" Numer: "+getnumer(); return pom; // your code here Zofia Kruczkiewicz, Projektowanie oprogramowania, Wykład 13 17

package tytul1; import ksiazka1.ksiazka; public class Tytul_ksiazki { private String wydawnictwo; /** @poseidon-generated */ private String ISBN; /** @poseidon-generated */ private String tytul; /** @poseidon-generated */ private String nazwisko; /** @poseidon-generated */ private String imie; /** @poseidon-generated */ public java.util.collection ksiazka = new java.util.arraylist(); /** @poseidon-generated */ public Tytul_ksiazki() { /** @poseidon-generated */ public String getwydawnictwo() { return wydawnictwo; /** @poseidon-generated */ public void setwydawnictwo(string _wydawnictwo) { wydawnictwo = _wydawnictwo; /** @poseidon-generated */ public String getisbn() { return ISBN; /** @poseidon-generated */ public void setisbn(string _ISBN) { ISBN = _ISBN; /** @poseidon-generated*/ public String gettytul() { return tytul; /** @poseidon-generated */ public void settytul(string _tytul) { tytul = _tytul; /** @poseidon-generated */ public String getnazwisko() { return nazwisko; /** @poseidon-generated */ public void setnazwisko(string _nazwisko) { nazwisko = _nazwisko; /** @poseidon-generated */ public String getimie() { return imie; /** @poseidon-generated */ public void setimie(string _imie) { imie = _imie; public boolean equals(object tytul_ksiazki) //kod uzupełniony { boolean a; a=isbn.equals(((tytul_ksiazki)tytul_ksiazki).getisbn()); //System.out.println(a); return a; Zofia Kruczkiewicz, Projektowanie oprogramowania, Wykład 13 18

public String tostring() { String pom="tytul: "+gettytul(); pom+=" Autor:"+getNazwisko() +" "+getimie(); pom+=" ISBN: "+getisbn(); pom+=" Wydawnictwo:"+getWydawnictwo(); return pom; //kod uzupełniony public void Dodaj_ksiazke(int _numer) { Ksiazka nowa= new Ksiazka(); if (nowa!= null) { nowa.setnumer(_numer); addksiazka(nowa); // your code here public java.util.collection getksiazkas() { return ksiazka; /** @poseidon-generated */ public void addksiazka(ksiazka ksiazka) /** @poseidon-generated */ { if (!this.ksiazka.contains(ksiazka)) {this.ksiazka.add(ksiazka); ksiazka.settytul_ksiazki(this); public void removeksiazka(ksiazka ksiazka) /** @poseidon-generated */ { boolean removed = this.ksiazka.remove(ksiazka); if (removed) ksiazka.settytul_ksiazki((tytul_ksiazki)null); Zofia Kruczkiewicz, Projektowanie oprogramowania, Wykład 13 19

package uchwyt1; import tytul1.tytul_ksiazki; import java.util.*; public class Uchwyt { public java.util.collection tytul_ksiazki= new java.util.arraylist(); public void Dodaj_tytul (String _nazwisko, String _imie,string _tytul,string _wydawnictwo,string _ISBN) { Tytul_ksiazki nowy=new Tytul_ksiazki(); //kod uzupełniony nowy.settytul(_tytul); nowy.setnazwisko(_nazwisko); nowy.setimie(_imie); nowy.setisbn(_isbn); nowy.setwydawnictwo(_wydawnictwo); addtytul_ksiazki(nowy); public java.util.collection gettytul_ksiazkis() /** @poseidon-generated */ { return tytul_ksiazki; public void addtytul_ksiazki(tytul_ksiazki tytul_ksiazki) {if(! this.tytul_ksiazki.contains(tytul_ksiazki)) /** @poseidon-generated */ this.tytul_ksiazki.add(tytul_ksiazki); public void removetytul_ksiazki(tytul_ksiazki tytul_ksiazki) { this.tytul_ksiazki.remove(tytul_ksiazki); /** @poseidon-generated */ Zofia Kruczkiewicz, Projektowanie oprogramowania, Wykład 13 20

public void Dodaj_ksiazke(String _ISBN, int _numer) // your code here { Tytul_ksiazki pom=new Tytul_ksiazki(); pom.setisbn(_isbn); int idx=((java.util.arraylist)tytul_ksiazki).indexof(pom); if (idx!=-1) { Tytul_ksiazki pom1= (Tytul_ksiazki)((java.util.ArrayList)tytul_ksiazki).get(idx); pom1.dodaj_ksiazke(_numer); System.out.println(pom1.ksiazka.toString());//linia tymczasowa public static void main(string t[]) { Uchwyt ap=new Uchwyt(); ap.dodaj_tytul("1","1","1","1","1"); ap.dodaj_tytul("2","2","2","2","2"); ap.dodaj_tytul("2","2","2","2","2"); String lan=ap.tytul_ksiazki.tostring(); System.out.println(lan); //kod dodany ap.dodaj_ksiazke("1",1); ap.dodaj_ksiazke("1",2); ap.dodaj_ksiazke("1",2); ap.dodaj_ksiazke("2",1); Zofia Kruczkiewicz, Projektowanie oprogramowania, Wykład 13 21

Zofia Kruczkiewicz, Projektowanie oprogramowania, Wykład 13 22

Zofia Kruczkiewicz, Projektowanie oprogramowania, Wykład 13 23

Rys.3.1. Diagram połączeń obiektów klasy Uchwyt z obiektami klas Tytul_ksiazki oraz Ksiazka (z powodu importu pakietu ksiazka1) połączenia wychodzące, oraz wzajemnych połączeń między obiektami klas Tytul_ksiazki oraz Ksiazka połączenia wychodzące Zofia Kruczkiewicz, Projektowanie oprogramowania, Wykład 13 24

Zofia Kruczkiewicz, Projektowanie oprogramowania, Wykład 13 25

Zofia Kruczkiewicz, Projektowanie oprogramowania, Wykład 13 26

Zofia Kruczkiewicz, Projektowanie oprogramowania, Wykład 13 27

Zofia Kruczkiewicz, Projektowanie oprogramowania, Wykład 13 28