Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

P.Habela, K.Subieta. SSR, Wykład 12, Folia 1 czerwiec 2009 Standardy w zakresie systemów rozproszonych i baz danych Piotr Habela Kazimierz Subieta Polsko-Japońska.

Podobne prezentacje


Prezentacja na temat: "P.Habela, K.Subieta. SSR, Wykład 12, Folia 1 czerwiec 2009 Standardy w zakresie systemów rozproszonych i baz danych Piotr Habela Kazimierz Subieta Polsko-Japońska."— Zapis prezentacji:

1 P.Habela, K.Subieta. SSR, Wykład 12, Folia 1 czerwiec 2009 Standardy w zakresie systemów rozproszonych i baz danych Piotr Habela Kazimierz Subieta Polsko-Japońska Wyższa Szkoła Technik Komputerowych, Warszawa Wykład 12: Wprowadzenie do języka VIDE

2 P.Habela, K.Subieta. SSR, Wykład 12, Folia 2 czerwiec 2009 Całościowa architektura systemu VIDE

3 P.Habela, K.Subieta. SSR, Wykład 12, Folia 3 czerwiec 2009 Język programowania VIDE dla poziomu PIM Obiektowy język programowania oparty na UML Umożliwia programowanie zadań biznesowych na bardzo wysokim poziomie abstrakcji –Podobnie do SQL –Łatwy do nauczenia się do użycia OCL jako język wyrażeń lub zapytań Istotna semantyczna nowość: aby umożliwić aktualizację, zapytania OCL mogą zwrócić referencje do obiektów, a nie (złożone) wartości Mocna kontrola typologiczna zarówno OCL jak i VIDE Ortogonalna trwałość: zarówno system typów jak i OCL nie wprowadzają różnic w dostępie do trwałych i nietrwałych obiektów OCL jest zaimplementowany na bazie SBQL (ten sam runtime) Optymalizacja zapytań (odziedziczona z SBQL) Dostęp do zewnętrznych relacyjnych baz danych (odziedziczony z SBQL) Dostęp do plików XML i Web Services (odziedziczony z SBQL)

4 P.Habela, K.Subieta. SSR, Wykład 12, Folia 4 czerwiec 2009 Bezszwowa integracja OCL i VIDE Brak niezgodności impedancji pomiędzy zapytaniami i programami –Niezgodność impedancji jest charakterystyczna dla SQL Zapytania są używane wewnątrz programów (konstrukcji imperatywnych) jako wyrażenia –Nie ma innych wyrażeń Zapytania mogą być komunikowane jako parametry procedur i metod (zarówno in jak i out) Zapytanie określa wynik procedury/metody funkcyjnej Zunifikowany styl syntaktyczny i system typów dla zapytań i programów (kompromis pomiędzy UML i OCL) Makroskopowe konstrukcje imperatywne (wiele obiektów przetwarzanych quasi-równolegle) –Podobnie do konstrukcji update, insert i delete języka SQL Zapytania OCL oraz programy VIDE podlegają tym samym regułom nazewnictwa danych, zakresów nazw, wiązania nazw i mocnej kontroli typów

5 P.Habela, K.Subieta. SSR, Wykład 12, Folia 5 czerwiec 2009 Struktury UML zaadoptowane w VIDE Cechy UMLZałożenia VIDE Pakiety Wspierane jako zasadniczy środek dekompozycji złożonych modeli Opisy klasBez zmian, każda klasa ma nazwę, listę własności i operacji Własności klas Bez zmian, każda własność ma nazwę, typ, krotność i widoczność (prywatność) Asocjacje Ograniczone wyłącznie do binarnych. Rozróżnia się kompozycje i normalne asocjacje Dziedziczenie Wspomagane jest wielokrotne dziedziczenie, ale konflikt nazw traktowany jest jako błąd. TypyZaadoptowano zestaw prostych typów języka OCL

6 P.Habela, K.Subieta. SSR, Wykład 12, Folia 6 czerwiec 2009 Struktury UML nie wspierane w VIDE Cechy UMLZałożenia VIDE Klasy asocjacji Nie są wspierane, gdyż powodują nadmierny rozrost opcji w języku programowania i wzrost złożoności oprogramowania. Można łatwo je odwzorować na normalne klasy i dodatkowe asocjacje Zależności (dependency) Przeznaczone raczej do modelowania niż do programowania. VIDE wprowadza bardziej specyficzne związki, np. import pakietów. Interfejsy W obecnej wersji nie są zaimplementowane. Można je zastąpić poprzez klasy abstrakcyjne.

7 P.Habela, K.Subieta. SSR, Wykład 12, Folia 7 czerwiec 2009 Hierarchia typów w VIDE Typy prymitywne: Boolean, Integer, Real String Date

8 P.Habela, K.Subieta. SSR, Wykład 12, Folia 8 czerwiec 2009 Zmienne lokalne Wewnątrz każdego bloku kodu (tj. ciała metody, bloku foreach, warunkowego, lub pętli) możemy zadeklarować zmienną lokalną. Zmienne możemy następnie stosować w wyrażeniach OCL tak samo, jak inne nazwane byty (w szczególności – atrybuty czy końce powiązań), podając ich nazwy. Aktualizację wartości zmiennej można wykonać: dla zmiennej jednowartościowej – symbolami przypisania: :=, +=, -=, *=, /=, zaś dla wielowartościowej – instrukcjami insert lub replace. Zmienne mogą być typów prostych (Integer, String, Boolean, Real, Date) oraz klasowych (np. Person). Deklaracja zmiennej jest identyczna z deklaracją atrybutu w diagramach klas, np. lacznaNaleznosc : Integer; Zmienne jednowartościowe można inicjować w miejscu deklaracji – np. lacznaNaleznosc : Integer = 5; Dla zmiennych wielowartościowych musimy explicite podać rodzaj ich kolekcji – np. powiadomienia : Bag[0..*](String);

9 P.Habela, K.Subieta. SSR, Wykład 12, Folia 9 czerwiec 2009 Instrukcje aktualizujące Przypisania wartości dla jednowartościowych właściwości: :=, +=, -=, *=, /= Dla atrybutów wielowartościowych (oraz dla zmiennych lokalnych) - operator insert: wyrZwracająceAtrybut insert wyrażenieZwracająceWartość Chcąc nadpisać istniejącą zawartość użyjemy replace: wyrZwracająceAtrybut replace wyrażenieZwracająceWartość W edytorze tekstowym należy rozróżnić zwykłe atrybuty (ew. złożone) od końców asocjacji. Te drugie aktualizujemy innymi poleceniami – link oraz unlink. Tworzeniu powiązań asocjacyjnych służy instrukcja link.. to: wyrZwracająceObiekt link nazwaKońcaAsocjacji to wyrażenieZwracająceObiekt Usuwanie - unlink: wyrZwracająceObiekt unlink nazwaKońcaAsocjacji [ from wyrażenieZwracająceObiekt ]

10 P.Habela, K.Subieta. SSR, Wykład 12, Folia 10 czerwiec 2009 Instrukcja iteracyjna i instrukcje pętli Instrukcja iteracyjna –Ponieważ większość poleceń imperatywnych działa na pojedynczych obiektach, a przetwarzamy często kolekcje, dużą rolę odgrywa instrukcja iteracyjna: wyrZwracająceWartości foreach { nazwaIteratora |...instrukcje...} Instrukcje pętli –Stanowią odpowiednik popularnych instrukcji for, while i do … while. –Cechuje je niższy poziom abstrakcji, niż instrukcję foreach i stąd okazują się rzadziej potrzebne w VIDE. –Ogólnie działają tak samo jak w popularnych językach (C/C++, Java)

11 P.Habela, K.Subieta. SSR, Wykład 12, Folia 11 czerwiec 2009 Instrukcja warunkowa i powrotu z metody Instrukcja warunkowa –składnia jest podobna, jak np. w Javie: if ( warunek ){...instrukcje...} else {...instrukcje...} if ( warunek ){...instrukcje...} Instrukcja powrotu z metody: return wyrażenie; Instrukcja pusta: nop;

12 P.Habela, K.Subieta. SSR, Wykład 12, Folia 12 czerwiec 2009 Tworzenie nowych obiektów Nowy obiekt tworzymy poleceniem create, podając nazwę jego klasy. Nie mamy do dyspozycji konstruktora, ale za to możliwość natychmiastowego zainicjowania powiązań i atrybutów obiektu. Instrukcja ta ma również cechy wyrażenia, tzn. można przypisać ją do atrybutu, linka czy przekazać jako parametr operacji. NazwaKlasy create { nazwaAtrybutu:= wyrażenie;... link nazwaKońcaAsocjacji to wyrażenie;... } –Średnik jest tylko separatorem, po ostatnim poleceniu podstawienia albo instrukcji link wewnątrz create-a nie powinniśmy go umieszczać, np. Feedback create { rating := positive; comment := Very fast delivery! }

13 P.Habela, K.Subieta. SSR, Wykład 12, Folia 13 czerwiec 2009 Składnia VIDE - kontekst VideCodeVCS ::= VideMethodBodyDeclVCS | statementVCSVideMethodBodyDeclVCSstatementVCS Kod może dotyczyć specyfikacji ciała metody lub pojedynczego zdania VideMethodBodyDeclVCS ::= 'context' ActivityReferenceVCSActivityReferenceVCS 'body' statementVCSstatementVCS ActivityReferenceVCS ::= pathNameCS '.' simpleNameCS | simpleNameCS '.' simpleNameCSpathNameCS Ta reguła reprezentuje referencję do metody zdefiniowanej w odpowiednim modelu klas,

14 P.Habela, K.Subieta. SSR, Wykład 12, Folia 14 czerwiec 2009 Zdania języka VIDE statementVCS ::= VideStatementVCS | VideExpressionVCS';' | codeBlockVCSVideStatementVCSVideExpressionVCScodeBlockVCS Ta produkcja reprezentuje zdanie języka VIDE. Średnik kończy wszystkie zdania, ale nie jest dozwolony po bloku znajdującym się w nawiasach klamrowych. VideStatementVCS ::= assignmentStatementVCS';' | ifStatementVCS | switchStatementVCS | forStatementVCS | whileStatementVCS | doWhileStatementVCS | tryStatementVCS | throwStatementVCS ';' | returnStatementVCS ';' | nopStatementVCS ';' | insertStatementVCS ';' | replaceStatementVCS ';' | deleteStatementVCS ';' | linkStatementVCS ';' | unlinkStatementVCS ';' | foreachStatementVCS | withStatementVCS | VariableDeclarationVCS ';'assignmentStatementVCSifStatementVCSswitchStatementVCSforStatementVCSwhileStatementVCSdoWhileStatementVCStryStatementVCSthrowStatementVCSreturnStatementVCSnopStatementVCSinsertStatementVCSreplaceStatementVCSdeleteStatementVCSlinkStatementVCSunlinkStatementVCSforeachStatementVCSwithStatementVCSVariableDeclarationVCS codeBlockVCS ::= '{ statementsVCS '}'statementsVCS Każdy blok kodu może zawierać na początku deklaracje zmiennych lokalnych. Zakres zmiennych jest ustalony w sposób normalny, t.j. obowiązuje w bloku i blokach w nim zagnieżdżonych. Deklaracje zmiennych i zdania VIDE są ograniczone nawiasami klamrowymi.

15 P.Habela, K.Subieta. SSR, Wykład 12, Folia 15 czerwiec 2009 Zdania podstawienia assignmentStatementVCS ::= VideExpressionVCS ':=' VideExpressionVCS | VideExpressionVCS VideExpressionVCS '+=' OclExpressionCS | VideExpressionVCSOclExpressionCS VideExpressionVCS '-=' OclExpressionCS | VideExpressionVCSOclExpressionCS VideExpressionVCS '*=' OclExpressionCS | VideExpressionVCSOclExpressionCS VideExpressionVCS '/=' OclExpressionCSVideExpressionVCSOclExpressionCS Pierwsze zdanie to normalne podstawienie. Następne są podstawieniami z wykonaniem operacji arytmetycznych.

16 P.Habela, K.Subieta. SSR, Wykład 12, Folia 16 czerwiec 2009 Zdania sterujące if oraz switch ifStatementVCS ::= 'if' '(' OclExpressionCS ')' statementVCS ('else' statementVCS)?OclExpressionCSstatementVCS switchStatementVCS ::= 'switch' '(' VideExpressionVCS ')' {' casePartsVCS '}' | VideExpressionVCScasePartsVCS 'switch' '(' VideExpressionVCS ')' {' casePartsVCS 'default' ':' statementVCS'}'VideExpressionVCScasePartsVCSstatementVCS switch (wyrażenie OCL) { case Abacki: {zdania dla wartości Abacki} case Babacki: {zdania dla wartości Babacki}... default: {zdania domyślne} } Przykład: Argumentami zdania case mogą być prymitywne literały. Semantyka podobna do znanej z wielu języków programownia.

17 P.Habela, K.Subieta. SSR, Wykład 12, Folia 17 czerwiec 2009 Zdanie sterujące for oraz while forStatementVCS ::= 'for' '(' VariableDeclarationVCS ')' 'while' '(' VideExpressionVCS ')' statementVCSVariableDeclarationVCSVideExpressionVCSstatementVCS for (i : integer = 1) while (i<=10){... i += 2; } Przykład: whileStatementVCS ::= 'while' '(' VideExpressionVCS ')' statementVCSVideExpressionVCSstatementVCS doWhileStatementVCS ::= 'do' statementVCS 'while' '(' VideExpressionVCS ')'statementVCSVideExpressionVCS Semantyka typowa: jeżeli VideExpressionVCS zwróci false, to we wszystkich przypadkach zdanie sterujące jest zakończone.VideExpressionVCS

18 P.Habela, K.Subieta. SSR, Wykład 12, Folia 18 czerwiec 2009 Obsługa wyjątków Podobnie jak w języku Java tryStatementVCS ::= 'try' statementVCS catchPartsVCSstatementVCScatchPartsVCS try { kod zawierający instrukcje rzucania wyjątków } catch (x : ExceptionClass) { kod obsługi wyjątku x } Przykład: catchPartsVCS ::= 'catch' '(' VariableDeclarationVCS ')' statementVCS catchPartsVCS?VariableDeclarationVCSstatementVCScatchPartsVCS Przechwytywanie wyjątków throwStatementVCS ::= 'throw' VideExpressionVCSVideExpressionVCS Rzucanie wyjątków. Wyrażenie powinno zwrócić obiekt.

19 P.Habela, K.Subieta. SSR, Wykład 12, Folia 19 czerwiec 2009 Instrukcje manipulacji obiektami createExpressionVCS ::= simpleNameCS 'create' '{' initStatementsVCS '}'initStatementsVCS initStatementsVCS ::= simpleNameCS ':=' VideExpressionVCS (';' initStatementsVCS)?VideExpressionVCSinitStatementsVCS insertStatementVCS ::= VideExpressionVCS VideExpressionVCS 'insert' VideExpressionVCSVideExpressionVCS replaceStatementVCS ::= VideExpressionVCS VideExpressionVCS 'replace' VideExpressionVCSVideExpressionVCS deleteStatementVCS ::= OclExpressionCS 'delete'OclExpressionCS linkStatementVCS ::= VideExpressionVCS VideExpressionVCS 'link' simpleNameCS 'to' VideExpressionVCSVideExpressionVCS unlinkStatementVCS ::= OclExpressionCS OclExpressionCS 'unlink' simpleNamesListVCS ('from' OclExpressionCS)?simpleNamesListVCSOclExpressionCS Jeżeli klauzula from jest obecna, to rozłączenie dotyczy związków z obiektami wymienionymi po from. W przeciwnym przypadku rozłączenie dotyczy wszystkich związków w danych obiektach posiadających jedną z danych nazw. simpleNamesListVCS ::= simpleNameCS (',' simpleNamesListVCS)?simpleNamesListVCS

20 P.Habela, K.Subieta. SSR, Wykład 12, Folia 20 czerwiec 2009 Zdanie for each foreachStatementVCS ::= VideExpressionVCS 'foreach' statementVCS | VideExpressionVCSstatementVCS VideExpressionVCS 'foreach' '{' simpleNameCS '|' statementsVCS '}'VideExpressionVCSstatementsVCS Semantyka: przed for each znajduje się wyrażenie zwracające kolekcję. Pierwszy wariant zakłada iterowanie po elementach tej kolekcji, przy czym w każdym obrocie pętli wykonywany jest program znajdujący się po for each. W drugim wariancie podobnie, ale każdy element kolekcji jest nazwany specjalną zmienną. accounts foreach { a | a.chargeFee(); a.calculateInterest(); a.operationIndex += 2; } accounts foreach { chargeFee(); calculateInterest(); operationIndex += 2; } Przykłady: Wariant 1: Wariant 2:

21 P.Habela, K.Subieta. SSR, Wykład 12, Folia 21 czerwiec 2009 Zdanie with Jest to wariant for each, w którym przetwarzany jest dokładnie jeden obiekt. withStatementVCS ::= VideExpressionVCS 'with' statementVCS | VideExpressionVCSstatementVCS VideExpressionVCS 'with' '{' simpleNameCS '|' statementsVCS '}'VideExpressionVCSstatementsVCS emp1 with { job := 'programmer'; salary *= 1.1; } Przykład:

22 P.Habela, K.Subieta. SSR, Wykład 12, Folia 22 czerwiec 2009 Deklaracje zmiennych CollectionRangeVCS ::= IntegerLiteralExpCS '..' IntegerLiteralExpCS | IntegerLiteralExpCS '..' '*' | '*' VideExpressionVCS ::= OclExpressionCS| createExpressionVCSOclExpressionCScreateExpressionVCS VariableDeclarationVCS ::= simpleNameCS ':' typeVCS ('=' VideExpressionVCS)?typeVCSVideExpressionVCS Typ powoływanej zmiennej jest obowiązkowy, natomiast wyrażenie inicjujące powoływaną zmienną nie jest obowiązkowe. W części imperatywnej języka liczność kolekcji może być zdefiniowana jawnie, w ramach collectionTypeVCS. Nie dotyczy to OCL.collectionTypeVCS typeVCS ::= typeCS| collectionTypeVCStypeCScollectionTypeVCS collectionTypeVCS ::= CollectionTypeIdentifierCS '[' CollectionRangeVCS ']' '(' typeCS ')'CollectionRangeVCStypeCS Forma bez określania liczności kolekcji jest również możliwa. Bag[1..30](Integer)Sequence[2..*](String)OrderedSet[7..15](String)Przykłady: Pojedyncza gwiazdka jest równoważna 0..*.

23 P.Habela, K.Subieta. SSR, Wykład 12, Folia 23 czerwiec 2009 Większy przykład – z-Shop Cel przykładu: –osadzenie w procesie biznesowym (model konwersacji z usługami zewnętrznymi) –łatwa redefinicja logiki aplikacji (np. kalkulacja rabatów czy kosztów dostawy zamówienia) –zarządzanie trwałymi danymi –wsparcie dla platformy implementacyjnej z relacyjną bazą danych; dostęp poprzez obiektowe API (JDO?) –komunikacja z istniejącymi wcześniej systemami – poprzez Web Services Uwagi ogólne: –Część klas posłuży jako definicje struktur z sygnatur wołanych usług zewnętrznych. –Jedna z klas posłuży jako pojemnik na główną funkcjonalność i skład danych; –Dodatkowy problem stanowi obiektowość struktury danych a mechanizm przechowywania (mapowanie O-R).

24 P.Habela, K.Subieta. SSR, Wykład 12, Folia 24 czerwiec 2009 Wymagania funkcjonalne (przypadki użycia)

25 P.Habela, K.Subieta. SSR, Wykład 12, Folia 25 czerwiec 2009 Model konwersacji

26 P.Habela, K.Subieta. SSR, Wykład 12, Folia 26 czerwiec 2009 Interfejsy Web Services dostawcy VIDE traktuje Web Services w sposób transparentny – programista aplikacji widzi je jak normalne metody: Wołanie usług Web Services w modelu w sposób analogiczny do wywołań lokalnych metod. Import definicji usług z WSDL do postaci specyfikacji klas/interfejsów w VIDE (i odwrotnie).

27 P.Habela, K.Subieta. SSR, Wykład 12, Folia 27 czerwiec 2009 Struktura danych po stronie sklepu

28 P.Habela, K.Subieta. SSR, Wykład 12, Folia 28 czerwiec 2009 Przykład kodu VIDE dla metody Shop::processOrder processOrder(in customerId : Integer) : Boolean Sygnatura metody: res : Boolean = false; customer->select(custId = customerId) with { res := placeOrder(); } return res; Ciało metody: Pominięto sprawdzenie, czy identyfikator klienta istnieje w systemie. Niniejszy przykład wykorzystuje klauzulę with, która pozwala uruchomić sekwencję dowolnych instrukcji imperatywnych w środowisku obiektu znajdującego się po jej lewej stronie. –Stanowi odpowiednik foreach, ale wzmocniony dodatkową dynamiczną kontrolą, czy wyrażenie po lewej stronie with zwraca dokładnie jeden element rezultatu. Metody pozbawione efektów ubocznych mogą być wołane wewnątrz wyrażeń OCL. Ponieważ nie kontrolujemy obecności efektów ubocznych w metodach, powyższe ciało metody można zapisać następująco: return customer->select(custId = customerId).placeOrder();

29 P.Habela, K.Subieta. SSR, Wykład 12, Folia 29 czerwiec 2009 Przykład kodu VIDE dla metody Customer::placeOrder placeOrder() : Boolean Sygnatura metody: item : OrderLine [0..*]; // struktura danych wymagana dla wywołania serwisu orderNo : Integer; basket.basketContent foreach { bc | item insert OrderLine create { productId := bc.prodId; quantity := bc.qty } } orderNo := productOrdersRef.reserve(items); // wywołanie serwisu if(orderNo=0) return false // produkt niedostępny else this link order to Order create { orderId := orderNo; orderItem insert items } return true; Ciało metody:

30 P.Habela, K.Subieta. SSR, Wykład 12, Folia 30 czerwiec 2009 Co dalej? W MDA po napisaniu kodu na poziomie PIM powinno nastąpić jego rozłożenie na elementy metamodelu PIM, w danym przypadkuUML + OCL. –Na nim mogą działać dodatkowe narzędzia, np. kontrola jakości lub aspektowość. Następnie z tego modelu odpowiedni kompilator modelu powinien wyprodukować model na poziomie PSM, np. metamodel dla J2EE. Następnie z tego drugiego metamodelu powinien być wygenerowany kod. –który może być uruchomiony na konkretnej platformie. Podejście VIDE zmienia tę sytuację poprzez umożliwienie pisania, debugowania i optymalizowania programów na poziomie PIM: –OCL jest optymalizowany, po tej optymalizacji generowanie kodu dla PSM może być utrudnione i/lub może zniszczyć efekt optymalizacyjny. –Dostęp do zewnętrznych zasobów (RDB, XML, WS) następuje poprzez wrappery zaimplementowane na poziomie PIM. Wywołanie tych wrapperów na poziomie PSM może stać się niemożliwe. W efekcie, VIDE nieco rozkłada koncepcję MDA, podważając jej fundamentalne założenia –…. które dla większości przypadków nie wydają się rozsądne. Trwałymi zdobyczami VIDE jest więc: –programowanie na wyższym poziomie abstrakcji –bezszwowa integracja narzędzia implementacyjnego z narzędziem projektowym (UML)


Pobierz ppt "P.Habela, K.Subieta. SSR, Wykład 12, Folia 1 czerwiec 2009 Standardy w zakresie systemów rozproszonych i baz danych Piotr Habela Kazimierz Subieta Polsko-Japońska."

Podobne prezentacje


Reklamy Google