Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 6

Podobne dokumenty
Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 7

Diagramy klas, diagramy sekwencji Wykład 4

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

Projekt sytemu informatycznego podejście obiektowe

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 5

Implementacja modelu obiektowego

Instrukcja 10 Laboratorium 13 Testy akceptacyjne z wykorzystaniem narzędzia FitNesse

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

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 5

Diagramy klas, diagramy sekwencji

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

Diagramy klas, diagramy sekwencji tworzenie modeli analizy i projektu

Laboratorium z przedmiotu: Inżynieria Oprogramowania INP

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

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

Diagram stanów Laboratorium 9

Laboratorium 8 Diagramy aktywności

Instrukcja 2 Laboratorium z Podstaw Inżynierii Oprogramowania

Instrukcja 3 Laboratorium z Podstaw Inżynierii Oprogramowania

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

Przykład 1 Iteracja 2 tworzenia oprogramowania Diagramy klas i sekwencji:

JAVA W SUPER EXPRESOWEJ PIGUŁCE

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

Przykład 1 Iteracja 1 tworzenia oprogramowania

Programowanie obiektowe i zdarzeniowe

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

Diagramy czynności tworzenie modelu przypadków użycia Wykład 2

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

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Klasy abstrakcyjne, interfejsy i polimorfizm

Pętle while, for, do while, instrukcje break, continue, switch 1. Pętle

Wykład 12. Programowanie serwera MS SQL 2005 w C#

Modelowanie i analiza. warstwy biznesowej aplikacji

Podstawy programowania III WYKŁAD 4

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

Instrukcja 3 Laboratoria 3, 4 Specyfikacja wymagań funkcjonalnych za pomocą diagramu przypadków użycia

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

Literatura. J. Nilsson: Applying Domain-Driven Design and Patterns,With Examples in C# and.net, Addison-Wesley Professional, 2006

Diagramy czynności Na podstawie UML 2.0 Tutorial

Budowa aplikacji wielowarstwowych. Obsługa zdarzeń

Budowa aplikacji wielowarstwowych. Obsługa zdarzeń, zastosowanie walidatorów, wykonanie listy typu Drop Down List.

Instrukcja 3 Laboratoria 3, 4 Specyfikacja wymagań funkcjonalnych za pomocą diagramu przypadków użycia

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

Instrukcja 3 Laboratoria 3, 4 Specyfikacja wymagań funkcjonalnych za pomocą diagramu przypadków użycia

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

Diagramy klas. dr Jarosław Skaruz

Programowanie obiektowe

UML w Visual Studio. Michał Ciećwierz

Modelowanie obiektowe

Programowanie w Javie - wykład 3

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

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

Iteracyjno-rozwojowy proces tworzenia oprogramowania Wykład 3 część 1

Metody Metody, parametry, zwracanie wartości

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

Zofia Kruczkiewicz - Modelowanie i analiza systemów informatycznych 1

Platformy Programistyczne Podstawy języka Java

Java: interfejsy i klasy wewnętrzne

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

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

Systemy Rozproszone. Spis treści. Temat projektu: Regułowy system analizujacy logi. autorzy: Rafał Sadłowski, Sebastian Falkus, Michał Różycki

Akademia ETI. Wprowadzenie do programowania w Javie PG Java User Group Przemysław Kulesza

Metody dostępu do danych

Programowanie obiektowe

Wprowadzenie. Organizacja pracy i środowisko programistyczne. Mirosław Ochodek

PARADYGMATY PROGRAMOWANIA Wykład 4

Aplikacje RMI

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Klasy i obiekty cz II

Języki i metody programowania Java Lab2 podejście obiektowe

Projekt INP Instrukcja 1. Autor Dr inż. Zofia Kruczkiewicz

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

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

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Wprowadzenie do laboratorium. Zasady obowiązujące na zajęciach. Wprowadzenie do narzędzi wykorzystywanych podczas laboratorium.

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

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

Definiowanie własnych klas

Programowanie obiektowe

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java


Instrukcja 1 Laboratorium 1 Zapoznanie się z wybranym narzędziem UML wprowadzenie do UML

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

Dokumentacja do API Javy.

Specyfikowanie wymagań przypadki użycia

Zaawansowane aplikacje WWW - laboratorium

Budowa aplikacji wielowarstwowych zastosowanie szablonów. Laboratorium 2 Programowanie komponentowe Zofia Kruczkiewicz

Model przypadków użycia - rola diagramów aktywności Część 2 Wykładowca Dr inż. Zofia Kruczkiewicz

Programowanie obiektowe

Java Język programowania

Singleton. Cel: Przykład: Zastosowanie: Zapewnienie, że klasa ma tylko jedną instancję i dostarczenie globalnego dostępu do niej.

Laboratorium 6 DIAGRAM KLAS (Class Diagram)

Wykład 4: Klasy i Metody

Zagadnienia (1/3) Data-flow diagramy przepływów danych ERD diagramy związków encji Diagramy obiektowe w UML (ang. Unified Modeling Language)

Technologie obiektowe

Dziedziczenie jednobazowe, poliformizm

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

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

Transkrypt:

Instrukcja 6 Laboratorium 8 Opracowanie diagramów sekwencji dla wybranych przypadków użycia reprezentujących usługi oprogramowania wynikających również z wykonanych diagramów czynności; definicja operacji klas na podstawie diagramów sekwencji w języku Java. Zastosowanie projektowych wzorców zachowania. 1

Cel laboratorium: Definiowanie w sposób iteracyjno - rozwojowy modelu projektowego programowania (wykład 1) opartego na: Modelowaniu logiki biznesowej reprezentowanej przez wybrany bazowy przypadek użycia za pomocą diagramów sekwencji, gdzie diagram klas pełni rolę struktury komunikacji wykorzystanej podczas tworzenia diagramów sekwencji. Ten model i implementacja przypadku użycia powinien stanowić bazę operacji stosowanych w kolejnych iteracjach. Należy definiować operacje i atrybuty kolejnej klasy (dziedziczenie, powiązania i agregacje) na diagramie klas zidentyfikowanej w wyniku modelowania kolejnego przypadku użycia i wykonanie scenariusza tego przypadku użycia za pomocą diagramu sekwencji. Implementacja modelu projektowego wybranego przypadku użycia za pomocą języka Java SE. 1. Zdefiniować diagramy sekwencji operacji reprezentujących scenariusze poszczególnych przypadków użycia umieszczając je w projekcie UML założonym podczas realizacji instrukcji 2 i uzupełnianym podczas realizacji instrukcji 3-5. 2. W projekcie UML należy automatycznie uzupełniać definicję klas na diagramie klas podczas modelowania kolejnych operacji za pomocą diagramów sekwencji. Należy rozwijać diagram klas utworzony podczas realizacji instrukcji 5. 3. Podzielić ten proces modelowania na kilka iteracji. Należy wykryć pierwszy przypadek użycia, którego wynik wspiera działanie kolejnego modelowanego przypadku użycia w kolejnej iteracji (wykład4, Dodatek 1 instrukcji). Ten wykryty przypadek użycia należy modelować w 1-ej iteracji procesu projektowania. Podobnie należy wybierać kolejne przypadki użycia do kolejnych iteracji. 4. Należy systematycznie uzupełniać kod programu typu Java Class Library w projekcie założonym podczas realizacji instrukcji 5. 5. Informacje niezbędne do modelowania oprogramowania za pomocą klas i sekwencji (tworzenia modelu projektowego) z wykorzystaniem wzorców projektowych podane zostały w wykładach: wykład 3, wykład4, wykład 5-część 1, wykład5-część2. Uwaga: Notacje stosowane na diagramie klas i sekwencji w Dodatku 1, odpowiadające składni składowych klas w języku Java, różnią się od notacji przedstawionych w instrukcji 1, prezentujących diagramy wykonane w środowisku VP CE. Oczywiście, w realizowanym projekcie w ramach laboratoriów należy zastosować odpowiadające notacje proponowane w środowisku VP CE. 2

Dodatek 1 Przykład modelowania i implementacji przypadków użycia za pomocą diagramów sekwencji oraz diagramów klas i pakietów. Zastosowanie projektowych wzorców strukturalnych, wytwórczych i czynnościowych (cd. z instrukcji 2-5). Prezentowany dalej kod jest uzyskany na drodze inżynierii wprost oraz proponowane uzupełnienia kodu w p. 6 są dodawane do kodu programu wykonanego w p.1.4. Dodatku 1 do Instrukcji 5. Składnia 1-a iteracja: modelowanie przypadku użycia PU Wstawianie nowego produktu 1. Modelowanie i implementacja operacji void Dodaj_produkt(String [] dane) w klasie TAplikacja. 1.1. Diagram sekwencji operacji: 1.2. Kod operacji: public void Dodaj_produkt (String dane[]) TFabryka fabryka = new TFabryka(); TProdukt1 produkt = fabryka.podaj_produkt(dane); if (Szukaj_produkt(produkt) == null) Produkty.add(produkt); 2. Modelowanie i implementacja operacji TProdukt1 Podaj_produkt(String dane[]) klasy TFabryka tworząca 4 różne warianty obiektów: typu TProdukt1 bez obiektu typu TPromocja, typu TProdukt1 z obiektem typu TPromocja, typu TProdukt2 bez obiektu typu TPromocja, typu TProdukt2 z obiektem typu TPromocja. 2.1. Diagram sekwencji operacji: 3

4

2.2. Kod operacji: package rachunek1; class TFabryka public TFabryka() public TProdukt1 Podaj_produkt(String dane[]) TProdukt1 produkt = null; TPromocja promocja; switch (Integer.parseInt(dane[0])) case 0: produkt = new TProdukt1(dane[1], Float.parseFloat(dane[2])); break; case 1: promocja = new TPromocja(Float.parseFloat(dane[3])); produkt = new TProdukt1(dane[1], Float.parseFloat(dane[2]), promocja); break; case 2: produkt = new TProdukt2(dane[1], Float.parseFloat(dane[2]), Float.parseFloat(dane[3])); break; case 3: promocja = new TPromocja(Float.parseFloat(dane[4])); produkt = new TProdukt2(dane[1], Float.parseFloat(dane[2]), Float.parseFloat(dane[3]), promocja); break; return produkt; 3. Modelowanie i implementacja operacji TProdukt1 Szukaj_produkt (TProdukt1 produkt) w klasie TAplikacja modelowanie i implementacja PU Szukanie produktu. 3.1. Diagram sekwencji operacji: 3.2. Kod operacji: public TProdukt1 Szukaj_produkt (TProdukt1 produkt) int idx; if ((idx=produkty.indexof(produkt))!=-1 ) produkt=produkty.get(idx); return produkt; return null; 5

4. Modelowanie i implementacja operacji boolean equals(object o) wywoływanej od obiektów typu TProdukt1 lub TProdukt2 (linia życia typu TProdukt1 może reprezentować oba typy instancji obiektów powiązanych dziedziczeniem - TProdukt1 i TProdukt2), gdzie za pomocą tej operacji mogą porównywać się 4 różne pary obiektów typu: TProdukt1 z TProdukt1, TProdukt1 z TProdukt2, TProdukt2 z TProdukt2, TProdukt2 z TProdukt1. 4.1. Znana metoda int indexof(object o) z klasy typu ArrayList, jest wywołana w metodzie Szukaj_produkt (p.3). Wymaga ona zaprojektowania metody equals w klasie TProdukt1, dziedziczonej przez klasę TProdukt2: public int indexof(object o) if (o == null) for (int i = 0; i < size; i++) if (elementdata[i]==null) return i; else for (int i = 0; i < size; i++) if (o.equals(elementdata[i])) return i; return -1; 4.2. Diagram sekwencji operacji boolean equals(object o) w klasie TProdukt1: 6

4.3. Kod operacji w klasie TProdukt1: @Override public boolean equals (Object atprodukt) TProdukt1 atprodukt1 = (TProdukt1)aTProdukt; if ( atprodukt1 == null ) return false; boolean bstatus = true; if (!nazwa.equals(atprodukt1.nazwa)) bstatus = false; else if (this.podaj_podatek()!= atprodukt1.podaj_podatek()) bstatus = false; else if (this.cena!= atprodukt1.cena) bstatus = false; else if (this.podaj_cene()!= atprodukt1.podaj_cene()) //p.4.4.1 bstatus = false; return bstatus; 4.4. Diagramy sekwencji oraz kod wirtualnych operacji wywoływanych na diagramie sekwencji oraz w kodzie operacji equals, np. operacja Czesc_brutto() może korzystać z różnych algorytmów przeliczania promocji pobranej od obiektu typu TPromocja w klasie TProdukt1 i TProdukt2, które są niewidoczne na diagramie sekwencji. Klasa TPromocja pełni rolę wzorca czynnościowego Strategia. 4.4.1. Diagram sekwencji operacji float Podaj_cene() w klasie TProdukt1, która wywołuje metodę wirtualną Czesc_brutto(), przedefiniowaną w klasie TProdukt2: 4.4.2. Kod metody float Podaj_cene() w klasie TProdukt1: public float Podaj_cene () return cena + Czesc_brutto(); 4.4.3. Diagram sekwencji metody float Czesc_brutto() w klasie TProdukt1: 7

4.4.4. Kod metody float Czesc_brutto() w klasie TProdukt1: public float Czesc_brutto () if (Promocja!= null) return cena * (-Promocja.Podaj_promocje()/100); return 0F; 4.4.5. Diagram sekwencji metody float Czesc_brutto() w klasie TProdukt2: 4.4.6. Kod metody float Czesc_brutto() w klasie TProdukt2: public float Czesc_brutto () float dodatek = 0; if (Promocja!= null) dodatek= cena*(-promocja.podaj_promocje()/100); return cena*podatek/100 + dodatek; 4.4.7. Kod wirtualnych metod float Podaj_podatek w klasach TProdukt1 i TProdukt2, używanych w metodzie equals klasy TProdukt1, dziedziczonej przez klasę TProdukt2: //class TProdukt1 public float Podaj_podatek () return -1; //class TProdukt2 public float Podaj_podatek () return podatek; 4.4.8. Kod metody float Podaj_promocję() w klasie TPromocja lub klasy pochodnej wykonującej jakiś algorytm obliczania promocji (koncepcja wzorca czynnościowego Strategia) np. public float Podaj_promocje () if (promocja<50) return promocja; return promocja 1.1F; 8

5. Diagram klas zawierający elementy wynikające z wykonanych diagramów sekwencji w 1-ej iteracji. 6. Rozszerzenie kodu źródłowego klas, dodanego do kodu wykonanego na podstawie wykonanego diagramu klas i diagramów sekwencji ( inżynieria wprost ) czyli dodanie pomocniczych metod do prezentacji wyników metod logiki biznesowej, modelowanych za pomocą diagramów sekwencji. Klasa TProdukt1 public TProdukt1(String anazwa, float acena) nazwa = anazwa; cena = acena; public TProdukt1(String anazwa, float acena, TPromocja apromocja) nazwa = anazwa; cena = acena; Promocja = apromocja; @Override public String tostring() StringBuilder sb = new StringBuilder(); sb.append(" nazwa : "); sb.append(nazwa); sb.append(" cena : "); sb.append(podaj_cene()); if (Promocja!= null) sb.append(promocja.tostring()); return sb.tostring(); public String Podaj_nazwe() return nazwa; 9

Klasa TProdukt2 public TProdukt2(String anazwa, float acena, float apodatek) super(anazwa, acena); podatek = apodatek; public TProdukt2(String anazwa, float acena, float apodatek, TPromocja apromocja) super(anazwa, acena, apromocja); podatek = apodatek; @Override public String tostring() StringBuilder sb = new StringBuilder(); sb.append(super.tostring()); sb.append(" podatek : "); sb.append(podatek); return sb.tostring(); Klasa TPromocja public TPromocja(float apromocja) promocja = apromocja; @Override public String tostring() StringBuilder sb = new StringBuilder(); sb.append(" promocja : "); sb.append(podaj_promocje()); return sb.tostring(); Klasa TAplikacja public void Wyswietl_produkty() for (TProdukt1 produkt : Produkty) System.out.println(produkt); public static void main(string args[]) TAplikacja app = new TAplikacja(); String dane1[] = "0", "1", "1"; String dane2[] = "0", "2", "2"; app.dodaj_produkt(dane1); app.dodaj_produkt(dane2); app.dodaj_produkt(dane1); String dane3[] = "2", "3", "3", "14"; String dane4[] = "2", "4", "4", "22"; app.dodaj_produkt(dane3); app.dodaj_produkt(dane4); app.dodaj_produkt(dane3); String dane5[] = "1", "5", "1", "30"; String dane6[] = "1", "6", "2", "50"; String dane7[] = "3", "7", "3", "3", "30"; String dane8[] = "3", "8", "4", "7", "50"; app.dodaj_produkt(dane5); app.dodaj_produkt(dane6); app.dodaj_produkt(dane5); app.dodaj_produkt(dane7); app.dodaj_produkt(dane8); app.dodaj_produkt(dane7); System.out.println("\nProdukty\n"); app.wyswietl_produkty(); 10

Dodatek 2 Tworzenie diagramów klas i sekwencji użycia w wybranym środowisku np Visual Paradigm 1. Pomoc:Drawing class diagrams. (http://www.visual-paradigm.com/support/documents/vpumluserguide/94/2576/7190_drawingclass.html) 2. Pomoc:Drawing sequence diagrams. (http://www.visual-paradigm.com/support/documents/vpumluserguide/94/2577/7025_drawingseque.html) 11