Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 7

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

Diagramy klas, diagramy sekwencji

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

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

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

Diagramy klas, diagramy sekwencji Wykład 4

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 5

Diagram stanów Laboratorium 9

Laboratorium z przedmiotu: Inżynieria Oprogramowania INP

Laboratorium 8 Diagramy aktywności

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

Projekt sytemu informatycznego podejście obiektowe

Instrukcja 2 Laboratorium z Podstaw Inżynierii Oprogramowania

Diagramy klas, diagramy sekwencji tworzenie modeli analizy i projektu

Implementacja modelu obiektowego

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 5

Instrukcja 3 Laboratorium z Podstaw Inżynierii Oprogramowania

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

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

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

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

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

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

Metody Metody, parametry, zwracanie wartości

Podstawy programowania III WYKŁAD 4

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

JAVA W SUPER EXPRESOWEJ PIGUŁCE

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

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

Diagramy czynności Na podstawie UML 2.0 Tutorial

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

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

Wykład 4: Klasy i Metody

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

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

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

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

Programowanie obiektowe

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

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

Klasy i obiekty cz II

Modelowanie i analiza. warstwy biznesowej aplikacji

Programowanie obiektowe i zdarzeniowe

Programowanie obiektowe

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

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

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

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

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

Platformy Programistyczne Podstawy języka Java

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

Dokumentacja do API Javy.

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

Programowanie obiektowe

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Instrukcja 5 Laboratorium z Podstaw Inżynierii Oprogramowania. Warstwy integracji z bazą danych: Wzorzec DAO Technologia ORM

Specyfikowanie wymagań przypadki użycia

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

Klasy abstrakcyjne, interfejsy i polimorfizm

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

Zaawansowane aplikacje WWW - laboratorium

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

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

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Podstawy programowania obiektowego

Programowanie obiektowe

Programowanie obiektowe

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

Programowanie w Javie Lista nr 1. Wybieramy kategorię Java, a wśród Projektów Java Application i [NEXT]

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

Kiedy potrzebne. Struktura (rekord) Struktura w języku C# Tablice struktur. struktura, kolekcja

Aplikacje RMI Lab4

Aplikacje RMI

Programowanie obiektowe

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

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.

Java Programowanie Obiektowe Ćwiczenie 1- wprowadzenie

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

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

Programowanie obiektowe

Wzorce logiki dziedziny

Programowanie i projektowanie obiektowe

Projektowanie oprogramowania

Definiowanie własnych klas

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

Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1.

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

Diagramy klas. dr Jarosław Skaruz

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

Wykład 1 Inżynieria Oprogramowania

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

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

import java.util.*; public class ListExample { public static void main(string args[]) { List<String> lista1= new ArrayList<String> ();

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

UML w Visual Studio. Michał Ciećwierz

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

public enum Environment { Development("Deweloperskie"), Test("Testowe"), Production("Produkcyjne"); private String name;

PARADYGMATY PROGRAMOWANIA Wykład 4

Transkrypt:

Instrukcja 7 Laboratoria 9, 10 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 przypadek użycia za pomocą diagramów sekwencji po wykonaniu pierwszego przypadku użycia podczas laboratorium 8, stanowiącego bazową logikę biznesową, z której korzystają kolejne przypadki użycia. 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 rozszerzanie kodu źródłowego programu wykonanego podczas laboratoriów 7 i 8. 1. Zdefiniować kolejne 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-6. 2. Należy automatycznie uzupełniać definicję klas podczas modelowania kolejnych operacji za pomocą diagramów sekwencji. Należy rozwijać diagram klas utworzony podczas realizacji instrukcji 5 i 6. 3. Podzielić ten proces modelowania na kilka iteracji. Należy wykonać kolejne przypadki użycia, których wyniki wspierają działanie kolejnego modelowanego przypadku użycia w kolejnej iteracji (wykład4, Dodatek 1 instrukcji). Pierwszy wykryty przypadek użycia należy modelować w 1-ej iteracji procesu projektowania (podczas realizacji instrukcji 6). 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 i 6. 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. 2

Dodatek 1 Przykład modelowania i implementacji przypadków użycia za pomocą diagramów sekwencji oraz diagramów klas i pakietów po wykonaniu bazowego przypadku użycia. Zastosowanie projektowych wzorców strukturalnych, wytwórczych i czynnościowych (cd. z instrukcji 2-5). 2-a iteracja: modelowanie przypadku użycia PU Wstawianie nowego rachunku 1. Modelowanie i implementacja operacji void wstawrachunek(int nr) w klasie Aplikacja. 1.1. Diagram sekwencji operacji: 1.2. Kod operacji: public void wstawrachunek(int nr) { Rachunek rachunek = new Rachunek(nr); if (szukajrachunek(nr) == null) rachunki.add(rachunek); 3

2. Modelowanie i implementacja operacji Rachunek szukajrachunek (int nr) z klasy Aplikacja (modelownie PU Szukanie Rachunku). 2.1. Diagram sekwencji operacji: 2.2. Kod operacji: public Rachunek szukajrachunek (int nr) { Rachunek rachunek = new Rachunek(nr); int idx; if ((idx=rachunki.indexof(rachunek))!= -1) { rachunek=rachunki.get(idx); return rachunek; return null; 2.3. Kod operacji boolean equals(object arachunek) w klasie Rachunek, wywoływanej w metodzie indexof obiektu Rachunki typu ArrayList: @Override public boolean equals (Object arachunek) { Rachunek rachunek= (Rachunek)aRachunek; return numer== rachunek.numer ; 4

3. Diagram klas zawierający elementy wynikające z wykonanych diagramów sekwencji w 2- iteracji 4. 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. Prezentacja wyników działania kodu z 1-ej iteracji oraz kodu z 2-iteracji, gdzie wyświetla się zawartość pustych rachunków (obiektów typu Rachunek). Klasa Rachunek public Rachunek(int nr) { numer = nr; @Override public String tostring() { Zakup z; StringBuilder sb = new StringBuilder(); sb.append(" Rachunek : "); sb.append(numer).append("\n"); for (Zakup zakup:zakupy) sb.append(zakup.tostring()).append("\n"); return sb.tostring(); 5

Klasa Aplikacja public ArrayList<String> modelrachunkow() { ArrayList<String> modelrachunkow = new ArrayList(); for (Rachunek rachunek : rachunki) modelrachunkow.add("\n" + rachunek.tostring()); return modelrachunkow; public static void main(string args[]) { Aplikacja app = new Aplikacja(); String dane1[] = {"0", "1", "1"; String dane2[] = {"0", "2", "2"; app.dodajprodukt(dane1); app.dodajprodukt(dane2); app.dodajprodukt(dane1); String dane3[] = {"2", "3", "3", "14"; String dane4[] = {"2", "4", "4", "22"; app.dodajprodukt(dane3); app.dodajprodukt(dane4); app.dodajprodukt(dane3); String dane5[] = {"1", "5", "1", "30"; String dane6[] = {"1", "6", "2", "50"; String dane7[] = {"3", "7", "5.47", "3", "30"; String dane8[] = {"3", "8", "12.46", "7", "50"; app.dodajprodukt(dane5); app.dodajprodukt(dane6); app.dodajprodukt(dane5); app.dodajprodukt(dane7); app.dodajprodukt(dane8); app.dodajprodukt(dane7); System.out.println("\nProdukty\n"); System.out.println(app.modelProduktow()); app.wstawrachunek(1); app.wstawrachunek(1); app.wstawrachunek(2); System.out.println("\nRachunki\n"); System.out.println(app.modelRachunkow()); 6

3-a iteracja: modelowanie przypadku użycia PU Wstawianie nowego zakupu 1. Modelowanie i implementacja operacji void wstawzakup(int nr, int ile, String dane[]) w klasie Aplikacja. 1.1. Diagram sekwencji operacji: produkt1 rachunek aprodukt 1.2. Kod operacji: public void wstawzakup(int nr, int ile, String dane[]) { Rachunek rachunek; Fabryka fabryka = new Fabryka(); ProduktBezPodatku produkt1 = fabryka.wykonajprodukt(dane); if ((rachunek = szukajrachunek(nr))!= null) if ((produkt1 = szukajprodukt(produkt1))!= null) rachunek.wstawzakup(new Zakup(ile, produkt1); //1-a iteracja //2-a iteracja //1-a iteracja 2. Modelowanie i implementacja operacji void wstawzakup(zakup azakup) z klasy Rachunek. 2.1. Diagram sekwencji operacji void wstawzakup(zakup azakup) z klasy Rachunek: 7

2.2. Kod operacji void wstawzakup(zakup azakup) z klasy Rachunek: public void wstawzakup(zakup azakup) { Zakup zakup; if ((zakup = szukajzakup(azakup))!= null) zakup.dodajiloscproduktu (azakup.getilosc()); else zakupy.add(azakup); 2.3. Kod operacji public void dodajiloscproduktu(int avoid) w klasie Zakup: public void dodajiloscproduktu(int avoid) { ilosc += avoid; 2.4. Kod operacji int getilosc() z w klasie Zakup: public int getilosc() { return ilosc; 3. Modelowanie i implementacja operacji Zakup szukajzakup(zakup zakup) z klasy Rachunek. 3.1. Diagram sekwencji operacji: 3.2. Kod operacji: public Zakup szukajzakup(zakup zakup) { int idx; if ((idx = zakupy.indexof(zakup))!= -1) { zakup = zakupy.get(idx); return zakup; return null; 4. Modelowanie i implementacja operacji boolean equals(object azakup) z klasy Zakup, wywoływanej w metodzie indexof obiektu zakupy typu ArrayList. 4.1. Diagram sekwencji operacji: 8

4.2. Kod operacji: @Override public boolean equals(object azakup) { Zakup zakup = (Zakup) azakup; if (zakup == null) return false; return produkt.equals(zakup.getprodukt()); //1-a iteracja 5. Diagram klas zawierający elementy wynikające z wykonanych diagramów sekwencji w 3- iteracji. 9

6. Wykonanie kodu źródłowego programu na podstawie wykonanego diagramu klas i diagramów sekwencji oraz pomocniczych metod do prezentacji wyników metod logiki biznesowej modelowanych za pomocą diagramów sekwencji prezentacja wyników pierwszych trzech iteracji, gdzie dodatkowo prezentuje się zawartość obiektów typu Rachunek, zawierających kolekcję obiektów typu Zakup. Klasa Zakup public Zakup(int ailosc, ProduktBezPodatku aprodukt) { ilosc = ailosc; produkt = aprodukt; @Override public String tostring() { StringBuilder sb = new StringBuilder(); sb.append(" ilosc : "); sb.append(ilosc); sb.append(" Produkt : "); sb.append(produkt.tostring()); return sb.tostring(); Klasa Aplikacja public static void main(string args[]) { Aplikacja app = new Aplikacja(); String dane1[] = {"0", "1", "1"; String dane2[] = {"0", "2", "2"; app.dodajprodukt(dane1); app.dodajprodukt(dane2); app.dodajprodukt(dane1); String dane3[] = {"2", "3", "3", "14"; String dane4[] = {"2", "4", "4", "22"; app.dodajprodukt(dane3); //app.wyswietl(); app.dodajprodukt(dane4); //app.wyswietl(); app.dodajprodukt(dane3); //app.wyswietl(); String dane5[] = {"1", "5", "1", "30"; String dane6[] = {"1", "6", "2", "50"; String dane7[] = {"3", "7", "5.47", "3", "30"; String dane8[] = {"3", "8", "12.4", "7", "50"; app.dodajprodukt(dane5); app.dodajprodukt(dane6); app.dodajprodukt(dane5); app.dodajprodukt(dane7); app.dodajprodukt(dane8); app.dodajprodukt(dane7); System.out.println("\nProdukty\n"); System.out.println(app.modelProduktow()); app.wstawrachunek(1); app.wstawrachunek(1); app.wstawrachunek(2); app.wstawzakup(1, 1, dane1); app.wstawzakup(1, 2, dane2); app.wstawzakup(1, 1, dane3); app.wstawzakup(1, 4, dane4); app.wstawzakup(1, 1, dane5); app.wstawzakup(2, 1, dane6); app.wstawzakup(2, 3, dane7); app.wstawzakup(2, 1, dane8); app.wstawzakup(2, 4, dane2); app.wstawzakup(2, 1, dane4); app.wstawzakup(2, 1, dane6); app.wstawzakup(2, 1, dane8); System.out.println("\nRachunki\n"); System.out.println(app.modelRachunkow()); 10

11

4-a iteracja: modelowanie przypadku użycia PU Obliczanie wartosci rachunku 1. Modelowanie i implementacja operacji float podajwartoscrachunku(int nr, int podatek) z klasy Aplikacja 1.1. Diagram sekwencji operacji: 1.2. Kod operacji: public float podajwartoscrachunku(int nr, int podatek) { Rachunek rachunek; rachunek = szukajrachunek(nr); // 2-a iteracja if (rachunek!= null) return rachunek.obliczwartoscrachunku(podatek); return 0F; 2. Modelowanie i implementacja operacji float obliczwartoscrachunku (int podatek) z klasy Rachunek 2.1. Diagram sekwencji operacji: 12

2.2. Kod operacji: public float obliczwartoscrachunku(int podatek) { float suma = 0; Zakup zakup; Iterator<Zakup> it = zakupy.iterator(); while (it.hasnext()) { zakup = it.next(); suma += zakup.obliczwartosc(podatek); return suma; 3. Modelowanie i implementacja operacji float obliczwartosc(int podatek) z klasy Zakup. 3.1. Diagram sekwencji operacji: 3.2. Kod operacji: public float obliczwartosc(int podatek) { if (podatek == -2 podatek == produkt.getpodatek()) { return ilosc * produkt.obliczcenebrutto(); return 0F; //1-a iteracja 13

4. Diagram klas zawierający elementy wynikające z wykonanych diagramów sekwencji w 4- iteracji 5. Wykonanie kodu źródłowego programu na podstawie wykonanego diagramu klas i diagramów sekwencji oraz pomocniczych metod do prezentacji wyników metod logiki biznesowej modelowanych za pomocą diagramów sekwencji prezentacja wyników czterech iteracji, gdzie prezentuje się zawartość obiektów typu Rachunek zawierających kolekcję obiektów typu Zakup oraz wartość tych rachunków. Rachunek public String tostring() { StringBuilder sb = new StringBuilder(); sb.append(" Rachunek : "); sb.append(numer).append("\n"); for (Zakup zakup:zakupy) sb.append(zakup.tostring()).append("\n"); sb.append("wartosc zakupow 0: ").append(obliczwartoscrachunku(-1)).append("\n"); sb.append("wartosc zakupow A: ").append(obliczwartoscrachunku(3)).append("\n"); sb.append("wartosc zakupow B: ").append(obliczwartoscrachunku(7)).append("\n"); sb.append("wartosc zakupow C: ").append(obliczwartoscrachunku(14)).append("\n"); sb.append("wartosc zakupow D: ").append(obliczwartoscrachunku(22)).append("\n"); sb.append("wartosc rachunku: ").append(obliczwartoscrachunku(-2)).append("\n"); return sb.tostring(); 14

Aplikacja public static void main(string args[]) { //kod metody main po Aplikacja app=new Aplikacja(); //implementacji String dane1[]={"0","1","1"; // 6-u przypadków użycia String dane2[]={"0","2","2"; // identyczny jak po implementacji app.dodajprodukt(dane1); // 5-go przypadku użycia app.dodajprodukt(dane2); app.dodajprodukt(dane1); String dane3[]={"2","3","3","14"; String dane4[]={"2","4","4","22"; app.dodajprodukt(dane3); app.dodajprodukt(dane4); app.dodajprodukt(dane3); String dane5[]={"1","5","1","30"; String dane6[]={"1","6","2","5"; String dane7[]={"3","7","5.47","3","30"; String dane8[]={"3","8","12.46","7","50"; app.dodajprodukt(dane5); app.dodajprodukt(dane6); app.dodajprodukt(dane5); app.dodajprodukt(dane7); app.dodajprodukt(dane8); app.dodajprodukt(dane7); System.out.println("\nProdukty\n"); System.out.println(app.modelProduktow()); app.wstawzakup(1, 1, dane1); app.wstawzakup(1, 2, dane2); app.wstawzakup(1, 1, dane3); app.wstawzakup(1, 4, dane4); app.wstawzakup(1, 1, dane5); app.wstawzakup(2, 1, dane6); app.wstawzakup(2, 3, dane7); app.wstawzakup(2, 1, dane8); app.wstawzakup(2, 4, dane2); app.wstawzakup(2, 1, dane4); app.wstawzakup(2, 1, dane6); app.wstawzakup(2, 1, dane8); System.out.println("\nRachunki\n"); System.out.println(app.modelRachunkow()); 15

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) 16