13.07.2015 Views

Modelowanie Systemów Informacyjnych (MSI) - pjwstk

Modelowanie Systemów Informacyjnych (MSI) - pjwstk

Modelowanie Systemów Informacyjnych (MSI) - pjwstk

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

MAS – dr. Inż. Mariusz TrzaskaWykład 11Realizacja pozostałych, wybranych konstrukcjiUML w obiektowych językach programowania


Zagadnieniao Omówienie różnych rodzajów ograniczeńwystępujących w UMLo Implementacja ograniczeń w obiektowych językachprogramowania:Dotyczące atrybutówSubsetOrderedBagHistoryXorDowolneo Podsumowanie<strong>Modelowanie</strong> Systemów <strong>Informacyjnych</strong> (<strong>MSI</strong>), wykład 11 2


Praca domowao Modyfikacja klasy ObjectPlusPlusułatwiająca realizację dziedziczeniadynamicznego.Prezentacje studentów…<strong>Modelowanie</strong> Systemów <strong>Informacyjnych</strong> (<strong>MSI</strong>), wykład 11 3


o Dodatkowe problemyPraca domowa (2)Ze „starego” obiektu powinniśmy skopiować tylkopowiązania należące do „nadklasy” (np. A). Niekopiujemy powiązań należących do jego asocjacji(np. B, C).<strong>Modelowanie</strong> Systemów <strong>Informacyjnych</strong> (<strong>MSI</strong>), wykład 11 4


Praca domowa (3)o Dodatkowe problemy – c. d.Aby poprawnie uaktualnić powiązania pokazujące na„nowy” obiekt, potrzebujemy informacje o wzajemnychpowiązaniach ról.• Która nazwaRoli odpowiada odwrotnaNazwaRoli,• Teoretycznie możemy zastąpić wszystkie wystąpienia (wewszystkich rolach) obiektDocelowy pokazujące na „stary”obiekt, ale część z tych uaktualnień jest niepotrzebna, ponieważczęść z powiązań „przepada” (patrz poprzedni slajd).:A :B<strong>Modelowanie</strong> Systemów <strong>Informacyjnych</strong> (<strong>MSI</strong>), wykład 11 5


Powrót do aktualnego wykładu<strong>Modelowanie</strong> Systemów <strong>Informacyjnych</strong> (<strong>MSI</strong>), wykład 11 6


Ograniczenia w UMLo Jeden z mechanizmów rozszerzalności UML.o Umożliwiają doprecyzowanie modelu.o Wykorzystanie:OCLWyrażenia matematyczne (arytmetyka, logika)Teksto Istnieje pewna predefiniowana grupaograniczeńo Notacja: {treść ograniczenia}<strong>Modelowanie</strong> Systemów <strong>Informacyjnych</strong> (<strong>MSI</strong>), wykład 11 7


Rodzaje ograniczeńo Dynamiczne. . Przy sprawdzaniu warunku,istotny jest poprzedni stan elementu, któregoograniczenie dotyczy.o Statyczne. . Przy sprawdzaniu warunku,poprzedni stan elementu, któregoograniczenie dotyczy, nie ma znaczenia.<strong>Modelowanie</strong> Systemów <strong>Informacyjnych</strong> (<strong>MSI</strong>), wykład 11 8


o PrzykładyRodzaje ograniczeń (2)Ograniczenia dynamiczne• Pensja nie może zmaleć,• Wzrost pensji nie może być większy niż 10%.Ograniczenia statyczne• Pensja > 2000• Pensja < 5000<strong>Modelowanie</strong> Systemów <strong>Informacyjnych</strong> (<strong>MSI</strong>), wykład 11 9


o {Subset}Predefiniowane ograniczeniaNakładane na dwie asocjacje (agregacje).Aby można było utworzyć powiązanie w ramachasocjacji B („kieruje”), musi już istnieć powiązaniew ramach asocjacji A („należy do”).Obydwie asocjacje powinny być pomiędzy tymisamymi klasami.Obydwa powiązaniapowinny być pomiędzytymi samymi obiektami.<strong>Modelowanie</strong> Systemów <strong>Informacyjnych</strong> (<strong>MSI</strong>), wykład 11 10


Predefiniowane ograniczenia (2)o {Ordered}Może dotyczyć:• Asocjacji.Oznacza,żepowiązaniasąprzechowywane (oraz otrzymywane i przetwarzane) wpewnej ustalonej kolejności.• Klasy. Obiekty w ekstensji są przechowywane (orazotrzymywane i przetwarzane) w pewnejustalonejkolejności.<strong>Modelowanie</strong> Systemów <strong>Informacyjnych</strong> (<strong>MSI</strong>), wykład 11 11


o {Bag}Predefiniowane ograniczenia (3)Umożliwiaelementów.przechowywanieduplikatówW przypadku asocjacji, oznacza, że może istniećwiele powiązań pomiędzy tymi samymi obiektami.<strong>Modelowanie</strong> Systemów <strong>Informacyjnych</strong> (<strong>MSI</strong>), wykład 11 12


Predefiniowane ograniczenia (4)o {History}Podobny do ograniczenia {bag}.Umożliwia utworzenie wielu powiązań pomiędzytymi samymi obiektami.Podkreśla aspekt czasowy opisywanej asocjacji.<strong>Modelowanie</strong> Systemów <strong>Informacyjnych</strong> (<strong>MSI</strong>), wykład 11 13


o {XOR}Predefiniowane ograniczenia (5)Dotyczy co najmniej dwóch asocjacji.Zapewnia,żebędzieistniałotylkojednopowiązanie w ramach asocjacji, które ogranicza.Jeżeli osoba pracuje w instytucji rządowej to nie możewspółpracować z firmą.<strong>Modelowanie</strong> Systemów <strong>Informacyjnych</strong> (<strong>MSI</strong>), wykład 11 14


Ograniczenia UML, a języki programowaniao W popularnych językach programowania:Java C#C++ograniczenia nie występują bezpośrednio.o Możemy je uwzględnić:ręcznie implementując odpowiednie metody.korzystając z dedykowanej biblioteki (np. dla OCL).o Stopień skomplikowania takich implementacji zależyod rodzaju ograniczeń.<strong>Modelowanie</strong> Systemów <strong>Informacyjnych</strong> (<strong>MSI</strong>), wykład 11 15


Implementacja ograniczeń dotyczących atrybutówo Podstawowe założeniaAtrybuty w klasie są ukryte (najlepiej jakoprivate),Wszelka aktywność związana z atrybutamiodbywa się przez dedykowane metody• get…• set…Powyższa reguła obowiązuje również wewnątrzklasy w której są atrybuty (chociaż tego nie da siękontrolować).<strong>Modelowanie</strong> Systemów <strong>Informacyjnych</strong> (<strong>MSI</strong>), wykład 11 16


Implementacja ograniczeń dotyczących atrybutów (2)o Współczesne środowiska programistyczne(IDE) wspierają proces tworzenia metodsłużących do operacjina „ukrytych”atrybutach.W Eclipse jest do tegodedykowana opcja:Source GenerateGetters and Setters.<strong>Modelowanie</strong> Systemów <strong>Informacyjnych</strong> (<strong>MSI</strong>), wykład 11 17


Implementacja ograniczeń dotyczących atrybutów (3)o Pensja nie może zmaleć,public class Pracownik {private float pensja;public void setPensja(float pensja) throws Exception {// Sprawdzenie ograniczeniaif(pensja < this.pensja) {throw new Exception("Pensja nie moze zmalec!");}}}this.pensja = pensja;o Wzrost pensji nie może być większy niż 10%.public void setPensja(float pensja) throws Exception {// Sprawdzenie ograniczeniaif(this.pensja * 1.1f < pensja) {throw new Exception("Wzrost pensji nie moze byc wiekszy niz 10%!");}}this.pensja = pensja;<strong>Modelowanie</strong> Systemów <strong>Informacyjnych</strong> (<strong>MSI</strong>), wykład 11 18


Implementacja ograniczeń dotyczących atrybutów (4)o Pensja > 2000public class Pracownik {private float pensja;public void setPensja(float pensja) throws Exception {// Sprawdzenie ograniczeniaif(pensja < minimalnaPensja) {throw new Exception("Pensja musi wynosic co najmniej " +minimalnaPensja);}}this.pensja = pensja;}final static float minimalnaPensja = 2000;final static float maksymalnaPensja = 5000;o Pensja < 5000Analogicznie jak powyżej.<strong>Modelowanie</strong> Systemów <strong>Informacyjnych</strong> (<strong>MSI</strong>), wykład 11 19


Implementacja ograniczenia {subset}o Powiązania w ramach asocjacji opisanej przez role„składa się”, , „należy do” dodajemy „normalnie”.o Przed dodaniem powiązania w ramach asocjacjiopisanej przez role „kierowana przez”, , „kieruje” kieruje”,sprawdzamy czy istnieje powiązanie dododawanego obiektu w ramach „nadrzędnej”asocjacji.*asocjacji.składa się * należy doPracownikkierowana przezkierujeGrupa{subset}**<strong>Modelowanie</strong> Systemów <strong>Informacyjnych</strong> (<strong>MSI</strong>), wykład 11 20


Implementacja ograniczenia {subset} (2)o Zmodyfikujemy klasę ObjectPlusPlusoDodamy metodę, która sprawdzi czy istnieje powiązanie do podanegoobiektu w ramach danej roli.o Utworzymy nową klasę ObjectPlus4dziedziczącą z ObjectPlusPlusenkapsulującą funkcjonalność związaną z realizacjąograniczeń.<strong>Modelowanie</strong> Systemów <strong>Informacyjnych</strong> (<strong>MSI</strong>), wykład 11 21


Implementacja ograniczenia {subset} (3)o Metoda w ObjectPlusPlus, , którasprawdza czy istnieje powiązanie dopodanego obiektu w ramach danej roli.public boolean czyIstniejePowiazanie(String nazwaRoli, ObjectPlusPlus obiektDocelowy)throws Exception {HashMap powiazaniaObiektu;}if(!powiazania.containsKey(nazwaRoli)) {// Brak powiazan dla tej rolithrow new Exception("Brak powiazan dla roli: " + nazwaRoli);}powiazaniaObiektu = powiazania.get(nazwaRoli);if(powiazaniaObiektu.containsValue(obiektDocelowy)) {// Obiekt docelowy istniejereturn true;}// brak obiektureturn false;<strong>Modelowanie</strong> Systemów <strong>Informacyjnych</strong> (<strong>MSI</strong>), wykład 11 22


Implementacja ograniczenia {subset} (4)o Metoda w ObjectPlus4, , która dodaje nowepowiązanie uwzględniając ograniczenie{subsetsubset}public class ObjectPlus4 extends ObjectPlusPlus {public ObjectPlus4() {super();}public void dodajPowiazanie_subset(String nazwaRoli, String odwrotnaNazwaRoli,String nazwaRolinadrzednej, ObjectPlusPlus obiektDocelowy) throws Exception {if(czyIstniejePowiazanie(nazwaRoliNadrzednej, obiektDocelowy)) {// Istnieje powiazanie do dodawanego obiektu w ramach roli nadrzednej// Mozemy utworzyc nowe powiazaniedodajPowiazanie(nazwaRoli, odwrotnaNazwaRoli, obiektDocelowy);}else {// Brak powiazania do dodawanego obiektu w ramach roli nadrzednej ==>wyjatekthrow new Exception("Brak powiazania do dodawanego obiektu '"+ obiektDocelowy + "'w ramach roli nadrzednej '" +nazwaRoliNadrzednej + "'!");}}}<strong>Modelowanie</strong> Systemów <strong>Informacyjnych</strong> (<strong>MSI</strong>), wykład 11 23


Implementacja ograniczenia {subset} (5)o Przykład użycia – wersja automatycznaPracownik p = new Pracownik("Jan", "Kowalski");Grupa g = new Grupa("Grupa nr 1");try {// Dodaj "zwykle" powiazaniep.dodajPowiazanie(Pracownik.rolaNalezyDo, Grupa.rolaSkladaSie, g);p.dodajPowiazanie_subset(Pracownik.rolaKieruje, Grupa.rolaKierowanaPrzez,Pracownik.rolaNalezyDo, g);// Wyswietl informacje o wszystkich powiazaniach tego obiektup.wyswietlPowiazania(System.out);} catch (Exception e) {e.printStackTrace();}Pracownik powiazania w roli kieruje:Grupa: Grupa nr 1Pracownik powiazania w roli nalezy do:Grupa: Grupa nr 1<strong>Modelowanie</strong> Systemów <strong>Informacyjnych</strong> (<strong>MSI</strong>), wykład 11 24


Implementacja ograniczenia {subset} (5)o Przykład użycia - ręcznePracownik p = new Pracownik("Jan", "Kowalski");Grupa g = new Grupa("Grupa nr 1");try {// Dodaj "zwykle" powiazaniep.dodajPowiazanie(Pracownik.rolaNalezyDo, Grupa.rolaSkladaSie, g);// Sprawdz czy istnieje "nadrzedne" powiazanieif(p.czyIstniejePowiazanie(Pracownik.rolaNalezyDo, g)) {// Powiazanie nadrzedne istnieje => mozna dodac nowe powiazaniep.dodajPowiazanie(Pracownik.rolaKieruje, Grupa.rolaKierowanaPrzez, g);}else {// Brak powiazania nadrzednegoSystem.out.println("Brak powiazania nadrzednego w roli: " +Pracownik.rolaNalezyDo);}// Wyswietl informacje o wszystkich powiazaniach tego obiektup.wyswietlPowiazania(System.out);} catch (Exception e) {// Blade.printStackTrace();}Pracownik powiazania w roli kieruje:Grupa: Grupa nr 1Pracownik powiazania w roli nalezy do:Grupa: Grupa nr 1<strong>Modelowanie</strong> Systemów <strong>Informacyjnych</strong> (<strong>MSI</strong>), wykład 11 25


Implementacja ograniczenia {ordered}o Dla asocjacjiMusimy użyć kontenera gwarantującego kolejnośćprzechowywanych elementów. W przypadku:• kolejności dodawania - np. List• Indywidualnie zdefiniowanej kolejności, np. TreeSet razem zodpowiednim komparatorem (Comparator).o Dla ekstensjiAnalogicznie jak dla asocjacji.o Klasa ObjectPlusPlus domyślnie używaklasy Vector dla ekstensji (kolejnośćgwarantowana) oraz HashMap dla powiązań.<strong>Modelowanie</strong> Systemów <strong>Informacyjnych</strong> (<strong>MSI</strong>), wykład 11 26


Implementacja ograniczenia {bag}ooW przypadku asocjacji, musimy użyć konteneraumożliwiającego przechowywanie duplikatów elementów.Duplikaty chcemy przechowywać najczęściej gdy korzystamyz atrybutu asocjacji podającego dodatkowe informacje o„duplikacie”.oA w takiej sytuacji i tak wprowadzamy klasę pośredniczącą,więc problem „duplikatów” znika.<strong>Modelowanie</strong> Systemów <strong>Informacyjnych</strong> (<strong>MSI</strong>), wykład 11 27


Implementacja ograniczenia {bag} (2)o Gdyby jednak ktoś chciał trzymać duplikaty totrzeba wybrać kontener, który na to pozwala,np. Vector.o Klasa ObjectPlusPlus domyślnie używaklasy HashMap dla powiązań, która pilnujeunikalności kluczy. Można dodawaćduplikowane wartości, ale z unikalnymikluczami.<strong>Modelowanie</strong> Systemów <strong>Informacyjnych</strong> (<strong>MSI</strong>), wykład 11 28


Implementacja ograniczenia {history}o Czy użycie ograniczenia {history}oznacza jakieś szczególne konsekwencje (wporównaniu z {bag})?o Wydaje się, że nie.o Wniosek: Implementacja ograniczenia{history} jest analogiczna doimplementacji ograniczenia {bag}.<strong>Modelowanie</strong> Systemów <strong>Informacyjnych</strong> (<strong>MSI</strong>), wykład 11 29


Implementacja ograniczenia {XOR}o Musimy zadbać aby w zdefiniowanej grupieasocjacji(ról)występowałotylkojednopowiązanie.o Wykorzystamy odpowiednio zmodyfikowanąklasę ObjectPlus4.<strong>Modelowanie</strong> Systemów <strong>Informacyjnych</strong> (<strong>MSI</strong>), wykład 11 30


Implementacja ograniczenia {XOR} (2)public class ObjectPlus4 extends ObjectPlusPlus {private List roleXOR = new LinkedList();// [...]public void dodajRoleXOR(String nazwaRoliXor) {roleXOR.add(nazwaRoliXor);}public void dodajPowiazanie_xor(String nazwaRoli, String odwrotnaNazwaRoli,ObjectPlusPlus obiektDocelowy) throws Exception {if(roleXOR.contains(nazwaRoli)) {// Aktualnie dodawana rola jest objeta ograniczeniem XOR// Sprawdz czy jest juz jakies powiazanie w ramach rol objetych ograniczeniemif(czyIstniejePowiazanie()) {throw new Exception("Istnieja juz powiazanie w ramach rol objetychograniczeniem {XOR}!");}// Nie ma powiazan, wiec ponizej dodajemy powiazanie korzystajac z "normalnej"metody z nadklasy}// Dodaj powiazaniesuper.dodajPowiazanie(nazwaRoli, odwrotnaNazwaRoli, obiektDocelowy);}// [...]<strong>Modelowanie</strong> Systemów <strong>Informacyjnych</strong> (<strong>MSI</strong>), wykład 11 31


Implementacja ograniczenia {XOR} (3)public class ObjectPlus4 extends ObjectPlusPlus {// [...]private boolean czyIstniejePowiazanie() {for(String rola : roleXOR) {if(this.czySaPowiazania(rola)) {return true;}}}}return false;o Ewentualnie do zrobienia:Uwzględnienie ograniczenia {xor} w przypadkudodawania powiązań z „drugiej strony”<strong>Modelowanie</strong> Systemów <strong>Informacyjnych</strong> (<strong>MSI</strong>), wykład 11 32


Implementacja dowolnych ograniczeńo W przypadku dowolnych, innych ograniczeń,np. pisanych „zwykłym tekstem”Niestety trzeba zrozumieć „co autor miał namyśli”,Zaimplementować to wykorzystując odpowiedniemetody.Czasami, może być wymagana zmiana podejściado tworzenia programu, np. zastosowanieortodoksyjnej hermetyzacji.Brak gotowych rozwiązań.<strong>Modelowanie</strong> Systemów <strong>Informacyjnych</strong> (<strong>MSI</strong>), wykład 11 33


o WpopularnychPodsumowaniejęzykachprogramowaniaograniczenia nie występują bezpośrednio.o Pewne ich rodzaje można implementowaćkorzystając z gotowych rozwiązań, np.Dotyczące atrybutów,Predefiniowane: {subset}, {xor}.o W ogólnym przypadku (ograniczenia pisanezwykłym tekstem) konieczna jest ich ręcznaimplementacja.<strong>Modelowanie</strong> Systemów <strong>Informacyjnych</strong> (<strong>MSI</strong>), wykład 11 34

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!