• Nie Znaleziono Wyników

Wymagania funkcjonalne i niefunkcjonalne aplikacji Diagram przypadków życia

N/A
N/A
Protected

Academic year: 2021

Share "Wymagania funkcjonalne i niefunkcjonalne aplikacji Diagram przypadków życia"

Copied!
95
0
0

Pełen tekst

(1)

Instrukcja 2

Laboratorium z Podstaw Inżynierii Oprogramowania

Opis biznesowy „świata rzeczywistego”

Wymagania funkcjonalne i niefunkcjonalne aplikacji Diagram przypadków życia

Diagramy klas i sekwencji:

Relacja 1 do 1..0– instrukcja z lab1

Relacja 1 do 0..* - nowy materiał

(2)

Cele laboratorium 2

Należy:

• wybrać projekt z podanej listy dostępnej za pomocą linku podanego w w laboratorium 1

• sformułować wymagania funkcjonalne i

niefunkcjonalne dla wybranego projektu jako zadanie domowe. Zadanie domowe będzie stanowić

podstawę do zaprojektowania przypadków użycia na kolejnych laboratorium.

• Wykonać projekt UML i wykonać prosty program stanowiący realizację 1-go etapu wykonania

wybranego projektu. Instrukcja zawiera przykłady powiązań 1:1 (jeden do jeden) oraz 1:* (jeden do wiele) między klasami, użytymi do realizacji 1-go

etapu programu „Katalogu tytulów i książek” – należy

wykorzystać te dwa typy powiązań w wykonywanym

1-ym etapie projektu i jego implementacji.

(3)

Java

język programowania

• obiektowo zorientowany

• wysokiego poziomu

platforma Javy

• z maszyny wirtualnej VM

• API (interfejs programowania aplikacji).

Rodzaje platform Javy:

 Java Platform, Standard Edition (Java SE)

 Java Platform, Enterprise Edition (Java EE)

 Java Platform, Micro Edition (Java ME)

 Java Platform CARD Rezultat

• niezaleŜność od platformy,

• duŜe moŜliwości,

• stabilność,

• łatwość rozwoju,

bezpieczeństwo

(4)

Warstwy aplikacji (Java EE)

(5)

Materiał z lab1

(slajdy 5 - 71)

(6)

1) Wykonanie projektu typu aplikacja Javy

(7)
(8)
(9)
(10)

2) Utworzenie projektu UML typu Java Platform-Idependent Model

(11)

Projekt UML należy utworzyć w tym samym katalogu, w którym

znajduje się projekt typu Java Application

(12)

3) Wstawianie do projektu pierwszego diagramu typu Use Case Diagram (diagram przypadków użycia – diagram PU).

Należy wybrać z listy Diagram Type pozycję Use Case Diagram i nadać nazwę diagramowi w polu Diagram Name

(13)

4) Należy wykonać opis biznesowy „świata rzeczywistego” – Katalog tytułów i książek

1. Opis zasobów ludzkich

Pracownik wypożyczalni może dodawać do katalogu tytułów nowe tytuły. Każdy tytuł jest reprezentowany przez następujące dane: tytuł, autor, wydawnictwo, ISBN oraz informacje o liczbie egzemplarzy i miejscu ich przechowywania i występuje w bibliotece jako pojedyncza informacja dla każdego tytułu. Pewna grupa tytułów opisuje książki nagrane na kasety, dlatego dodatkowo tytuł

zawiera dane nagrania np nazwisko aktora. Każdy egzemplarz, niezależnie, czy jest książką czy kasetą, jest opisany odrębną informacją zawierajacą numer egzemplarza i ewentualnie (dotyczy to wyodrębnionych egzemplarzy)

informację o liczbie dni, na które można wypożyczyć egzemplarz. Numery egzemplarzy mogą się powtarzać dla różnych tytułów. Pracownik bilioteki

(bibliotekarz) może dodawać nowe tytuły i egzemplarze oraz je przeszukiwać, natomiast klient może jedynie przeszukiwać tyutły i sprawdzać egzemplarze wybranych tytułów.

2. Przepisy

Pracownik ponosi odpowiedzialność za poprawność danych - odpowiada materialnie za niezgodność danych ze stanem wypożyczalni.

3. Dane techniczne

Klient może przeglądać dane wypożyczalni za pośrednictwem strony

internetowej lub bezpośrednio za pomocą specjalnego programu. Pracownik biblioteki może dodatkowo wstawiać, modyfikować i usuwać dane o tytuiłach oraz egzemplarzach. Zakłada się, że klientów jednocześnie przeglądajądających dane wypożyczalni może być ponad 1000 oraz wypożyczalnia może zawierać kilkadziesiąt tysięcy tytułów oraz przynajmniej dwukrotnie więcej egzemplarzy.

Biblioteka składa się z kilku ośrodków w różnych miastach na terenie kraju (lista miast jest dołączona do umowy). Zaleca się stosowanie technologii Java.

(14)

5) Należy zdefiniować wymagania aplikacji

Wymagania funkcjonalne

• System powinien wspierać wypożyczanie książek

• Biblioteka wypożycza podane książki i czasopisma osobom zarejestrowanym, o ile je posiada

• Biblioteka dokonuje zakupu nowych książek, przy czym popularne książki kupuje w kilku egzemplarzach. Usuwa zniszczone książki i czasopisma.

• Bibliotekarz jest pracownikiem biblioteki, komunikuje się z

wypożyczającym. Jego praca jest wspierana za pomocą systemu

• Wypożyczający może zarezerwować książkę lub czasopismo, które nie jest dostępne w danej chwili, W momencie, kiedy zamówione rzeczy są

dostępne- albo po zwrocie lub dzięki zakupowi, można je wypożyczyć i usunąć rezerwację. Rezerwację można usunąć niezależnie.

• Biblioteka może łatwo utworzyć, zmienić i usunąć informację o tytułach, wypożyczających, wypożyczeniach i rezerwacjach

Wymagania niefunkcjonalne

• System powinien pracować w popularnych systemach (UNIX, Windows, OS/2) i powinien mieć nowoczesny graficzny interfejs użytkownika

• System powinien się rozwijać np. wprowadzenie możliwości

zawiadamiania rezerwującego książkę o jej dostępności

(15)

6) Wykonanie diagramu przypadków użycia (PU)

Przeciągnięcie ikon Actor i Use Case pobranych z palety (Palette) i upuszczenie na diagramie PU

(16)

7) Otwieranie okna dokumentacji dla wybranego elementu diagramu – wykonanie (ew.„wklejenie” wcześniej wykonanych) opisu biznesowego systemu oraz wymagań

funkcjonalnych i niefunkcjonalnych w oknie dokumentacji diagramu PU

Należy kliknąć na wolną

powierzchnię diagramu PU. W okienku Properties diagramu PU wybrać wiersz Documentation klikając na przycisk A

(17)

8) Otwieranie „niemodalnego” okna dokumentacji z MenuBar: Window/Other/UML Documentation

(18)
(19)

9) Dodanie dokumentacji do przypadku użycia cd. – specyfikacja

przypadku użycia (PU)

(20)

Relacja jeden do jeden

(materiał z lab1 - slajdy 20-71)

(21)

1) Dodawanie nowego diagramu do projektu UML

Należy w oknie Projects w tworzonym projekcie typu UML wybrać pozycję Diagrams/New/Diagram

(22)

2) Utworzenie diagramu klas

Należy wybrać z listy Class Diagram i nadać nazwę diagramowi w polu Diagram Name

(23)

3) Wstawienie nowej klasy

Przeciągnięcie ikony klasy Class pobranej z palety i upuszczenie na diagramie

(24)

Nadawanie nazwy klasie

Po zaznaczeniu klasy w polu Unnamed lewym klawiszem myszy, w okienku Properties tej klasy należy wpisać w wierszu Name nazwę klasy Tytul_ksiazki

(25)

4) Wstawienie nowego atrybutu - menu

Po kliknięciu prawym klawiszem w polu tytułu ikony klasy należy wybrać w wyskakującym menu pozycję Create Attribute

(26)

5) Edycja atrybutu

W okienku Properties zaznaczonego nowego atrybutu Unnamed, w wierszu Name wpisać nazwę atrybutu np. wydawnictwo, w wierszu Type wpisać typ atrybutu String

(27)

Stan po wstawieniu pierwszego atrybutu: po wstawieniu atrybutu pojawiły się dwie metody typu set (do nadania wartości atrybutowi) i get (do pobrania

wartości atrtybutu)

(28)

6) Klasa Tytul_ksiazki po wstawieniu wszystkich atrybutów – przy wstawianiu

kolejnych atrybutów w wierszu Type należy wybrać z listy typ String

(29)

Stan po wstawieniu pięciu atrybutów do klasy Tytul_ksiazki

(30)

7) Generowanie kodu klasy Tytul_ksiazki do projektu Katalog1

Należy zachować projekt typu UML (saveAll z Menu File)

Po zaznaczeniu klasy Tytul_ksiazki prawym

klawiszem myszy wybrac pozycję Generate Code9

(31)

8) Wybór projektu Javy w Target Project o nazwie Katalog1,

utworzony wg slajdów z p. 1 i 2 jako miejsce do generowania kodu

Uwaga: Należy skompilować (Build) projekt typu Java Application po

wygenerowaniu kodu z projketu UML.

(32)
(33)

9) Wygenerowany kod – wyświetleni klasy Tytul_ksiazki utworzonej w projekcie Katalog1 w wyniku generowania kodu z projektu UMLKatalog1 typu UML

(34)

public class Tytul_ksiazki {

private String wydawnictwo;

private String ISBN;

private String tytul;

private String nazwisko;

private String imie;

public Tytul_ksiazki() { }

public String getWydawnictwo() { return wydawnictwo; } public void setWydawnictwo(String val) { this.wydawnictwo = val; } public String getISBN() { return ISBN; }

public void setISBN(String val) { this.ISBN = val; } public String getTytul() { return tytul; } public void setTytul(String val) { this.tytul = val; } public String getNazwisko() { return nazwisko; } public void setNazwisko(String val) { this.nazwisko = val; } public String getImie() { return imie; }

public void setImie(String val) { this.imie = val; }

}

(35)

10) Wstawienie klasy fasadowej Uchwyt (podobnie jak klasę Tytul_ksiazki) – będzie zastosowana do obsługi wywołań przypadków użycia przez warstwę interfejsu

graficznego użytkownika.

(36)

11) Wstawienie powiązania typu Association między klasami Uchwyt i Tytul_ksiazki

Przeciągnięcie wskazanej

Association, wybranej z podręcznej palety klasy Uchwyt i przeciągnięcie jej od klasy Uchwyt do powierzchni klasy Tytul_ksiazki

(37)

Stan po wstawieniu Association między klasami Uchwyt i Tytul_ksiazki

(38)

12) Nadanie Multiplicity na końcu Association należącym do klasy Tytul_ksiazki

Należy prawym klawiszem

zaznaczyć koniec

Association przy klasie

Tytul_ksiazki i z wyskakującego menu wybrać pozycję

Multiplicity równą 1

(39)

13) Wstawianie nowego diagramu – w okienu Projects należy zaznaczyć prawym klawiszem myszy zagnieżdżoną pozycję Diagram/New/Diagram w projekcie

UMLKatalog1

1

(40)

14) Wstawianie nowego diagramu typu Sequence Diagram wybranym z listy Diagram Type; w polu Diagram Name należy wpisać nazwę

diagramu toString.

(41)

15) Wstawianie linii życia - Lifeline

Należy przeciągnąć ikony typu Lifeline pobrane z palety i upuszczenie na

diagramie. Po zaznaczeniu Lifeline z lewej strony diagramu lewym klawiszem myszy, z jej okienka Properties, z listy Representing Clasifier wybrać klasę Uchwyt, a potem podobnie Tytul_ksiazki dla Lifeline

umieszczonej z prawej strony diagramu.

(42)

16) Wstawianie nazw obiektów reprezentowanych przez Lifeline w ich okienkach Properties, w wierszu Name, dostępnych po zaznaczeniu koleno Lifeline lewym klawiszem myszy – nazwać uchwyt_ dla Lifeline typu Uchwyt i tytul_ dla Lifeline typu

Tytul_ksiazki

(43)

18) Wstawienie synchronicznej wiadomości („Synchronous Message”) – metody klasy Tytul_ksiazki

17) Wstawianie metody typu Synchronous Message do klasy typu Tytul_ksiazki – należy z podręcznej palety zaznaczonej Lifeline o nazwie

uchwyt_ wybrać strzałki typu Synchronous Message i przeciągnąć je od

Lifeline uchwyt_ do Lifeline tytul_

(44)

18) Nadawanie nazwy nowej metodzie w klasie Tytul_ksiazki (1)

Po zaznaczeniu wstawionej metody typu Synchronous Message prawym klawiszem myszy należy z wyskakującego menu wybrac pozycję Operations i wybrać AddOperation

(45)

Nadawanie nazwy nowej metodzie w klasie Tytul_ksiazki (2) – wstawić nazwę metody (name) toString, a zwracany wynik (returnType) ustawić jako String

(46)

19) Wstawienie wiadomości typu „Synchronous Message” do jednej linii życia

reprezentującej wywołanie własnej metody przez linię życia – ciało metody toString.

Należy z palety zaznaczonej Lifeline typu Tytul_ksiazki wybrać strzałki metody Synchronous Message i przeciągnąć ją na Lifeline typu Tytul_ksiazki.

(47)

Rezultat po wstawieniu w ciele metody toString należącej do klasy Tytul_ksiazki nienazwanych metod należących do linii życia obiektu typu Tytul_ksiazki

(48)

20) Kojarzenie nienazwanych metod linii życia Tytul_ksiazki z konkretnymi metodami klasy Tytul_ksiazki

Należy kolejno każdą z nienazwanych metod zaznaczyć prawym klawiszem myszy, wybrać z wyskakującego menu pozycję Operations i następnie wybrać z listy

istniejących metod klasy Tytul_ksiazki kolejną metodę z przedrostkiem get

(49)
(50)

21) Pojawienie się nowej metody toString w klasie Tytul_ksiazki –

wstawionej do linii życia obiektu typu Tytul_ksiazki na diagramie sekwencji

(51)

22) Wygenerowanie nowej metody toString do klasy kodu klasy Tytul_ksiazki – sposób generowania kodu z wybranek klasy opisano wcześniej

(52)

23) Wstawienie ręczne kodu nowej metody toString do klasy

Tytul_ksiazki na podstawie diagramu sekwencji tej metody

(53)

53 public class Tytul_ksiazki

{ private String wydawnictwo;

private String ISBN;

private String tytul;

private String nazwisko;

private String imie;

public Tytul_ksiazki() {} /** @ generated */

public String getWydawnictwo() { return wydawnictwo; } /** @ generated */

public void setWydawnictwo(String val) { wydawnictwo = val; }

public String getISBN() { return ISBN; } /** @ generated */

public void setISBN(String val) { ISBN = val; } /** @ generated */

public String getTytul() { return tytul; } /** @ generated */

public void setTytul(String val) { tytul = val; } /** @ generated */

public String getNazwisko() { return nazwisko; } /** @ generated */

public void setNazwisko(String val) { nazwisko = val; } /** @ generated */

public String getImie() { return imie; } /** @ generated */

public void setImie(String val) { imie = val; } /** @ generated */

public String toString() // your code here

{ String pom="Tytul: "+getTytul();

pom+=" Autor:"+getNazwisko() +" "+getImie();

pom+=" ISBN: "+getISBN();

pom+=" Wydawnictwo:"+getWydawnictwo();

return pom;

} }

(54)

24) Wstawienie do projektu drugiego diagramu typu Sequence Diagram dla przypadku użycia dodaj_tytul.

Należy wstawić linię życia typu Actor oraz zwykłą Lifeline, której należy nadać typ Uchwyt, pobrany z listy Representing Classifier. Następnie należy połączyć metodą typu Asynchronous

Message linię życia typu Actor z liną życia typu Uchwyt

(55)

25) Następnie należy wstawić nową linię życia z podręczej palety linii życia typu Uchwyt za pomocą Create Message

(56)

27) Nadanie nazwy Tytul_ksiazki linii życia wykonanej jako Create Message

(57)

28) Użycie metod typu Asynchronous Message klasy Tytul_ksiazki – nadanie im nazwy metod z przedrostkiem set, pobranych z listy Operations (podobnie jak przy definiowaniu metody toString )

(58)

29) Transformacja związku między klasą Uchwyt a klasą Tytul_ksiazki - na Navigable 29.1. Usunięcie ustawionej jawnej własności typu Multiplicity na domyślną równą 1

Wybór

właściwości Multiplicity w okienku

Properties relacji typu Association Otwarcie

okienka edycji właściwości Multiplicity – po kliknięciu na przycisk A

(59)

29.2. Należy usunąć ustawioną Multiplicity równą 1 dla Association należącej do klasy Tytul_ksiazki, gdyż domyślna implementacja to kolekcja typu LinkedBlockingDeque : As

ArrayList| (wtedy związek 1:1 jest implementowany jako jednoelementowa kolekcja)

(60)

29.3. Stan diagramu klas po usunięciu jawnej liczności związku typu Association po stronie klasy Tytul_ksiazki (Multiplicity równej 1)

(61)

29.4. Ustawienie w okienku Properties Association w części należącej do klasy

Tytul_ksiazki właściwości typu Navigable – spowodowało to implementację związku po stronie klasy Uchwyt (teraz obiekt klasy Uchwyt posiada pojedynczą referencję obiektu typu Tytul_ksiazki )

Ustawienie właściwości Navigable po stronie klasy Tytul_ksiazki

(62)

30) Implementacja związku między klasą Uchwyt a klasą Tytul_ksiazki – w klasie Uchwyt za pomocą referencji typu Tytul_ksiazki oraz dwóch metod getTytul_ksiazki i setTytul_ksiazki

(63)

31) Generowanie kodu (wybrać projekt Katalog1)

(64)

Generowanie kodu

(65)

32) Wygenerowanie kodu nowej metody dodaj_tytul w klasie Uchwyt

Referencja do obiektu klasy Tytul_ksiazki reprezentuje relację 1 do 1 po stronie klasy Uchwyt, która jest „właścicielem”

relacji

(66)

33) Wstawienie ręczne kodu nowej metody dodaj_tytul na podstawie diagramu

sekwencji tej metody oraz metody main testującej działanie wykonanego przypadku użycia

(67)

package katalog1;

public class Uchwyt {

private Tytul_ksiazki mTytul_ksiazki;

public Uchwyt() { }

public void dodaj_tytul(String a, String b, String c, String d, String e) // your code here { mTytul_ksiazki=new Tytul_ksiazki();

mTytul_ksiazki.setTytul(a);

mTytul_ksiazki.setNazwisko(b);

mTytul_ksiazki.setImie(c);

mTytul_ksiazki.setISBN(d);

mTytul_ksiazki.setWydawnictwo(e); } public Tytul_ksiazki getTytul_ksiazki()

{ return mTytul_ksiazki; }

public void setTytul_ksiazki(Tytul_ksiazki val) { this.mTytul_ksiazki = val; }

public static void main(String t[]) // your code here { Uchwyt ap=new Uchwyt();

ap.dodaj_tytul("1","1","1","1","1");

String lan=ap.getTytul_ksiazki().toString();

System.out.println(lan); } }

(68)

34) Uruchomienie programu

(69)

35) Wykonanie dokumentacji UML typu strona HTML

(70)
(71)
(72)

Materiał z lab2

Relacja jeden do wiele

Realizacja głównego celu

przypadku użycia „Dodaj_tytul”

– wstawianie nowych tytułów bez

powtórzeń (slajd p.28)

(73)

1) Relacja jeden do wiele – zmiana Multiplicity w Association dla klasy Tytul_ksiazki na 1:0..* (jeden do wiele)

(74)

2) Generowanie kodu dla klasy Uchwyt

(75)

3) Wygenerowany kod implementujący relację jeden:wiele

ArrayList jako kolekcja referencji typu do obiektu klasy Tytul_ksiazki reprezentuje relację 1 do 0..* po stronie klasy Uchwyt, która jest

„właścicielem” relacji

(76)

4) Zmiana scenariusza dodaj_tytul - dodanie LifeLine dla kolekcji mTytul_ksiazki typu ArrayList

(77)

5) Zmiana scenariusza dodaj_tytul - dodanie metody typu Synchronous Message do linii życia typu Uchwyt wywoływanej jako własna metoda tej linii życia –

addTytul_ksiazki. W ciele metody addTytul_ksiazki należy wstawić synchroniczną metodę contains, wywoływaną z linią życia typu ArrayList.

(78)

6) Dodanie do metody addTytul_ksiazki metody add wywoływanej przez linię życia Uchwyt z linii życia typu ArrayList

(79)

7) Dodanie bloku warunkowego Combined Fragment z palety dla Sequence Diagram

Należy przeciągnąć ikonę typu Combined Fragment na diagram sekwencji.

(80)

Zmiana scenariusza addTytul_ksiazki – dodanie bloku warunkowego Combined Fragment z palety dla Sequence Diagram w celu warunkowego wywołania metody add z linii życia typu ArrayList (można dodać nowy tytul, gdy metoda contains

zwróciła wynik false oznaczający, że w kolekcji mtytul_ksiazki nie ma jeszcze tytulu o takim samym ISBN.)

(81)

8) Edycja wyrażenia warunkowego bloku typu Combined Fragment

Po zaznaczeniu bloku typu Combined Fragment prawym klawiszem myszy należy wybrać pozycję Interaction Operand/Edit Interaction Constraint

(82)
(83)

9) Po wyborze tego bloku typu Combined Fragment lewym klawiszem myszy od dołu bloku - zmiana typu bloku na alt w okienku Properties

(84)

10) Na diagramie klas pojawiła się dodana metoda addTytul_ksiazki na diagramie sekwencji dodaj_tytul

(85)

11) Wygenerowanie kodu z klasy Uchwyt

(86)

12) Wygenerowanie kodu z klasy Tytul_ksiazki

(87)

public class Uchwyt {

private ArrayList<Tytul_ksiazki> mTytul_ksiazki = new ArrayList<Tytul_ksiazki>();

public Uchwyt() { }

public ArrayList<Tytul_ksiazki> getTytul_ksiazki() { return mTytul_ksiazki;}

public void setTytul_ksiazki(ArrayList<Tytul_ksiazki> val) { this.mTytul_ksiazki = val;}

13) Uzupełniono kod metody addTytul_ksiazki, wg scenariusza ze zmodyfikowanego diagramu sekwencji dodaj_tytul

Kolekcja referencji do obiektu klasy Tytul_ksiazki reprezentuje relację 1 do 0..* po stronie klasy Uchwyt, która jest „właścicielem” relacji

(88)

88

public void dodaj_tytul(String a, String b, String c, String d, String e) { Tytul_ksiazki tytul_ksiazki=new Tytul_ksiazki();

tytul_ksiazki.setTytul(a);

tytul_ksiazki.setNazwisko(b);

tytul_ksiazki.setImie(c);

tytul_ksiazki.setISBN(d);

tytul_ksiazki.setWydawnictwo(e);

addTytul_ksiazki(tytul_ksiazki); }

public void addTytul_ksiazki(Tytul_ksiazki tytul_ksiazki) { if (! this.mTytul_ksiazki.contains(tytul_ksiazki))

this.mTytul_ksiazki.add(tytul_ksiazki); } public static void main(String t[]) // your code here

{ 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.getTytul_ksiazki().toString();

System.out.println(lan); } }

(89)

public class Tytul_ksiazki

{ private String wydawnictwo;

private String ISBN;

private String tytul;

private String nazwisko;

private String imie;

public Tytul_ksiazki() {}

public String getWydawnictwo() { return wydawnictwo; }

public void setWydawnictwo(String _wydawnictwo) { wydawnictwo = _wydawnictwo; } public String getISBN() {return ISBN; }

public void setISBN(String _ISBN) {ISBN = _ISBN; } public String getTytul() {return tytul; } public void setTytul(String _tytul) {tytul = _tytul; } public String getNazwisko() {return nazwisko;}

public void setNazwisko(String _nazwisko) {nazwisko = _nazwisko;}

public String getImie() {return imie; } public void setImie(String _imie) {imie = _imie; } public String toString() // your code here

{ String pom="Tytul: "+getTytul();

pom+=" Autor:"+getNazwisko() +" "+getImie();

pom+=" ISBN: "+getISBN();

pom+=" Wydawnictwo:"+getWydawnictwo();

return pom;

} }

(90)

14) Skutki wywołania metody equals w metodzie contains, dziedziczonej od klasy Object, która nie uwzględnia właściwości klasy dziedziczącej Tytul_ksiazki – należy

przedefiniować metodę equals w klasie Tytul_ksiazki

(91)

15) Uzupełniono scenariusz metody dodaj_tytul o wywołanie metody equals przesłaniającej metode equals dziedziczoną od klasy Object – teraz w metodzie

contains wywoływana jest metoda equals z klasy Tytul_ksiazki

(92)

92

16) Uzupełniona definicja klasy Tytul_ksiazki o metodę equals, która przesłania metodę equals dziedziczoną od klasy Object

(93)

17) Uzupełniono kod metody equals, która przesłania metodę equals dziedziczoną od klasy Object

(94)

94 public class Tytul_ksiazki

{ private String wydawnictwo;

private String ISBN;

private String tytul;

private String nazwisko;

private String imie;

public Tytul_ksiazki() {}

public String getWydawnictwo() {return wydawnictwo; }

public void setWydawnictwo(String _wydawnictwo) { wydawnictwo = _wydawnictwo; }

public String getISBN() { return ISBN; }

public void setISBN(String _ISBN) { ISBN = _ISBN; } public String getTytul() { return tytul; } public void setTytul(String _tytul) { tytul = _tytul; } public String getNazwisko() { return nazwisko; } public void setNazwisko(String _nazwisko) { nazwisko = _nazwisko;}

public String getImie() { return imie; }

public void setImie(String _imie) { imie = _imie; }

public boolean equals(Object ob) //your code here { boolean a=ISBN.equals(((Tytul_ksiazki)ob).getISBN());

//System.out.println(a);

return a; }

public String toString() // your code here

{ String pom="Tytul: "+getTytul();

pom+=" Autor:"+getNazwisko() +" "+getImie();

pom+=" ISBN: "+getISBN();

pom+=" Wydawnictwo:"+getWydawnictwo();

return pom; } }

(95)

18) Poprawne wstawianie obiektów typu Tytul_ksiazki – każdy tytul może mieć inny ISBN dzięki metodzie equals zdefiniowanej w klasie Tytul_ksiażki i wywoływanej w metodzie

contains klasy typu ArrayList

Cytaty

Powiązane dokumenty

Diagram sekwencji addReservation, określa, że to klasa Facade przechowuje rezerwacje (dodanie rezerwacji do kolekcji należącej do tej klasy), a z diagramu klas wynika, że

Definicja przypadku użycia dodaj_ksiazke – oparty na implementacji relacji 1 do n między klasą Uchwyt i klasą Tytul_ksiazki oraz klasą Tytul_ksiazki i klasą

ArrayList jako kolekcja referencji typu do obiektu klasy Tytul_ksiazki reprezentuje relację 1 do 0..* po stronie klasy Fasada, która jest „właścicielem” relacji.. Uzupełniono

public class Uchwyt //kod wygenerowany {public java.util.Collection tytul_ksiazki=.

Uzupełniono kod metody equals, która przesłania metodę equals dziedziczoną od klasy Object.. Java Zofia

pomocą relacji Association 1..0 z klasą typu Tytul_ksiazki – relację należy wybrać z palety z lewej strony lewym klawiszem myszy oraz położyć ją na klasie Fasada i

Podstawowv wynik, na którym opiera się cała praca, zawarty jest w następującym. twierdzeniu

System musi posiadać możliwość dodania nowej rekrutacji oraz edycji istniejącej rekrutacji przez uprawnionego użytkownikaP. Promowanie ofert System musi pozwolić