• Nie Znaleziono Wyników

Diagram stanów Laboratorium 9

N/A
N/A
Protected

Academic year: 2021

Share "Diagram stanów Laboratorium 9"

Copied!
18
0
0

Pełen tekst

(1)

Diagram stanów Laboratorium 9

Zofia Kruczkiewicz

Zofia Kruczkiewicz – lab_INP002017_9 1

(2)

Opracowanie diagramu stanów dla obiektu wybranej klasy, reprezentującego wpływ różnych przypadków użycia na zmiany stanów tej klasy, modelowanych za

pomocą diagramów sekwencji

Zofia Kruczkiewicz – lab_INP002017_9 2

Modelowanie zachowania obiektu za pomocą

diagramu stanów.

(3)

Cel laboratorium:

Definiowanie diagramu stanów dla wybranej klasy

Uwaga: Należy rozwijać projekt UML, wykonany podczas lab3-8.

1. Należy wybrać klasę, która należy do modelu danych zdefiniowanego podczas lab5-7, zawierającą logikę biznesową, podobnie jak klasa TitleBook i wykonać dla wybranej klasy diagram stanów podobnie jak przedstawiono to dla klasy TitleBook (wykład 6, przykład w tej instrukcji).

2. Zgodnie z definicją diagramów stanów w języku UML (wykład 6), zdarzeniem dla obiektu danej klasy jest wywołanie operacji tego obiektu przez inny obiekt, a akcjami są operacje użyte do definicji tej operacji. Podczas laboratoriów 5-7 należało wykonać modele operacji poszczególnych klas, wykonane za pomocą diagramów sekwencji. Taki diagram sekwencji operacji wywołanej podczas zdarzenia zawiera operacje, które są akcjami. Są to: operacje wywołane od innych obiektów oraz operacje typu Message-to- Self. Dodatkowo, do akcji należy dołączyć różne wyrażenia należące do algorytmu operacji zdarzeniowej, ale niemodelowane za pomocą diagramów sekwencji np.

wyrażenia matematyczne.

Modelowanie zachowania obiektu za pomocą diagramu stanów.

Zofia Kruczkiewicz – lab_INP002017_9 3

(4)

Zofia Kruczkiewicz – lab_INP002017_9 4

Modelowanie zachowania obiektów za pomocą diagramu stanów

Przykłady z wykładów 4-6

Przykład tworzenia diagramu stanów w środowisku Visual Paradigm

Creating state machine diagrams

(5)

Diagram stanów klasy TitleBook

Zdarzenia: equals, addBook, searchFreeBook, getBook

(6)

Diagram przypadków użycia (wykład 4 część 1, przykład 3) – wybrany fragment

6 Zofia Kruczkiewicz – lab_INP002017_9

(7)

7

Diagram klas uzyskany w procesie projektowania (przebieg pokazany w dodatku do wykładu 5)

(8)

8

package subbusinesstier;

importjava.time.LocalDate;

importjava.time.Month;

importjava.util.ArrayList;

importjava.util.Arrays;

importjava.util.List;

importsubbusinesstier.entities.Client;

import subbusinesstier.entities.TitleBook;

public class Facade {

List<TitleBook> titleBooks;

List<Client> clients;

public Facade() { }

public List<TitleBook> getTitleBooks() { } public void setTitleBooks(List<TitleBook> titleBooks) { } public List<Client> getClients() { } public void setClients(List<Client> clients) { }

Klasa Facade udostępnia metody logiki biznesowej – generuje bezpośrednio 3 zdarzenia na obiektach z rodziny TitleBook przez wywołanie jego metod: addBook,

searchFreeBook, getBook oraz 1 zdarzenie generuje pośrednio: equals

(9)

9

public TitleBook searchTitleBook(TitleBook titleBook) {}

public Client searchClient(Client client) {}

public String addClient(String data[]) {}

public String addTitleBook(String data[]) {}

public ArrayList<String> addBook(String data1[], String data2[]) {}

public String addReservation(String data1[], String data2[], LocalDatedate) {}

//pomocnicze metody

public ArrayList<String> searchBooksOfTitle(String data[]) {}

public Object[][] getTitleBooksModel() {}

public String PrintBooks() {}

public String PrintTitleBooks() {}

public static void main(String t[]) {}

}

PU Operacje_Na_Ksiazkach

PU Rejestracja_Klienta PU Dodaj_Tytul_Ksiazki PU Dodaj_Ksiazke PU Rezerwacja Zdarzenia wywołane na obiektach z rodziny TitleBook przez obiekt typu Facade

oraz jego atrybut titleBooks

equals, addBook, searchFreeBook, getBook

(10)

10

public ArrayList<String> addBook(String data1[], String data2[])

9

3

12

10

Zdarzenia:

equals

addBook

(11)

11

//class Facade List<TitleBook> titleBooks;

List<Client> clients;

public Facade() {

titleBooks = new ArrayList<>();

clients = new ArrayList();

}

public ArrayList<String> addBook(String data1[], String data2[]) { TitleBook help1, titleExist;

Factory fabryka = new Factory();

help1 = fabryka.createTitleBook(data1);

if ((titleExist = searchTitleBook(help1)) != null) { //equals return titleExist.addBook(data2); //addBook }

return null;

}

11

(12)

12

//class Facade

public TitleBook searchTitleBook(TitleBook titleBook) { int idx;

if ((idx = titleBooks.indexOf(titleBook)) != -1) { return titleBooks.get(idx);

}

return null;

}

Zofia Kruczkiewicz – lab_INP002017_9

(13)

Wiadomości metody addBook wywołanej jako zdarzenie na obiekcie z rodziny TitleBook przez obiekt typu Facade - odwzorowane na akcje na diagramie stanów

13

Zofia Kruczkiewicz – lab_INP002017_9 13

(14)

14

//class TitleBook List<Book> books;

public TitleBook() {

books = new ArrayList();

}

public ArrayList<String> addBook(String data[]) { Factory factory = new Factory();

Book newbook;

newbook = factory.createBook(data);

if (searchBook(newbook) == null) { books.add(newbook);

newbook.setTitleBook(this);

return getBooksModel();

}

return null;

}

(15)

15

2) public String addReservation(String data1[], String data2[], LocalDate date)

Zdarzenia:

equals

searchFreeBook getBook

(16)

16

//class Facade – obiekt tej klasy generuje zdarzenia na obiekcie typu TitleBook

public String addReservation(String data1[], String data2[], LocalDate date) { String result;

Factory factory = new Factory();

TitleBook helpTitleBook = factory.createTitleBook(data1), titleBook;

titleBook = this.searchTitleBook(helpTitleBook); //equals if (titleBook != null)

if (titleBook.searchFreeBook(date)) { //searchFreeBook Client helpClient = factory.createClient(data2), client;

client = this.searchClient(helpClient);

if (client != null) {

client.addReservation(titleBook.getBook(), date); //getBook result = "reserved";

} else result = "no such a client";

} else result = "no free book";

else result = "no such a title";

return result;

}

Zofia Kruczkiewicz – lab_INP002017_9

(17)

17

17

Wiadomości metody searchFreeBook wywołanej jako zdarzenie na obiekcie z rodziny TitleBook przez obiekt typu Facade –

odwzorowane na akcje na diagramie stanów

(18)

18

//class TitleBook List<Book> books;

public TitleBook() {

books = new ArrayList();

}

private Book book; //atrybut book przechowuje obiekt typu //Book wyszukany do rezerwacji

public boolean searchFreeBook(LocalDate date) { for (int i = 0; i < books.size(); i++) {

book = books.get(i);

if (book.isFree(date)) return true;

}

return false;

}

Zofia Kruczkiewicz – lab_INP002017_9

Cytaty

Powiązane dokumenty

Nadmienić w tym miejscu należy, iż wskazane wcześniej przepisy, po- chodzące z ustaw, umożliwiają zastosowanie dozwolonej prowokacji wy- łącznie w przypadku, gdy uzyskają

W artykule przedstawiono wyniki symulacji stanów pracy przykładowego układu elektrycznego z wykorzystaniem symulatora, opartego na procesorze sygnałowym.. Jest to

Chociaż dzi- siaj praktyki, które można klasyfi kować w ramach defi nicji technologii siebie, odbiegają od wyobrażeń „dostępnych” dla Foucaulta, to stanowią kontynuacje jego

In the intention this is the first volume of periodical publication, issued irregularly by the State Archive in Kielce. Pogorzelska); forming its resource (A. Smorąg); scientific

Soft sediments are progressively used for nature building. In contact with air, drying and rewetting occurs and the organic matter oxidation accelerates. Subsequently,

Zdarzenie equals na obiekcie typu TRachunek w metodzie indexOf kolekcji Rachunki typu ArrayList.. (11) boolean

Diagram sekwencji operacji obliczWartoscRachunku klasy Rachunek jako zdarzenie wywołane na obiekcie Rachunek przez obiekt typu Aplikacja – operacje służące do definicji tej

Biorąc pod uwagę główny cel wyżej wspomnianej reformy, czyli poprawę efektywności sektora publicznego, oraz analizując najważniejsze instrumenty jego realizacji,