Programowanie zorientowane aspektowo

Slides:



Advertisements
Podobne prezentacje
Projektowanie Aplikacji Komputerowych
Advertisements

Programowanie obiektowe
Programowanie obiektowe
Rafał Hryniów Tomasz Pieciukiewicz
Zaawansowane metody programowania – Wykład V
Obiektowe metody projektowania systemów Design Patterns STRATEGY.
11 RDF Wertykalne zastosowania XML-a. 22 RDF - Wprowadzenie Problemy Sieć jest nieczytelna dla programów komputerowych. Sieć zawiera zbyt wiele informacji.
Zaawansowana składnia XML XML Schema
Licznik template<class Count_Type> class Count { public:
Generyczne Repozytorium Dokumentów w XML
PySBQL Język zapytań dla obiektowych baz danych. Aplikacje bazodanowe Główny nurt budowania aplikacji opiera się na połączeniu: SQL JDBC Java Jak wyświetlić
Co UML może zrobić dla Twojego projektu?
Podstawy informatyki Rekurencja i rekurencja Grupa: 1A
Obiektowe metody projektowania systemów
Zasady zaliczenia Warunki uzyskania zaliczenia:
Wykład 8 Wojciech Pieprzyca
Pomiary w inżynierii oprogramowania
Enteprise Java Beans Emil Wcisło.
Wstęp do programowania obiektowego
Projektowanie i programowanie obiektowe II - Wykład IV
Praca Inżynierska „Analiza i projekt aplikacji informatycznej do wspomagania wybranych zadań ośrodków sportowych” Dyplomant: Marcin Iwanicki Promotor:
Modele baz danych - spojrzenie na poziom fizyczny
Projektowanie warstwy serwera Programowanie aspektowe.
Projektowanie - wprowadzenie
Wykład 4 Analiza i projektowanie obiektowe
Wykład 5 UML - Unified Modeling Language
C.d. wstępu do tematyki RUP
T: Różnice pomiędzy programowaniem strukturalnym a obiektowym
Źródła: podręcznikopracował: A. Jędryczkowski.
Wanda Klenczon Biblioteka Narodowa
Jakub Wołczko W obiektowym świecie… Jakub Wołczko
Programowanie obiektowe III rok EiT
ŻYWE JĘZYKI PROGRAMOWANIA LIVING IT UP WITH A LIVE PROGRAMMING LANGUAGE Sean McDirmid Ecole Polytechnique Fédérale de Lausanne (EPFL)
Programowanie obiektowe – zastosowanie języka Java SE
WPROWADZENIE W ŚWIAT OBIEKTÓW
Programowanie obiektowe
Rozwiązanie zadań do zaliczenia I0G1S4 // indeks
Podsumowanie metodologii OMT
Programowanie obiektowe – język C++
Programowanie obiektowe 2013/2014
ZWIĄZKI MIĘDZY KLASAMI KLASY ABSTRAKCYJNE OGRANICZENIA INTERFEJSY SZABLONY safa Michał Telus.
1 Każdy obiekt jest scharakteryzowany poprzez: tożsamość – daje się jednoznacznie wyróżnić; stan; zachowanie. W analizie obiektowej podstawową strukturą
2 Odizolowanie danych od kodu może prowadzić do przypadkowych zmian danych przez funkcje, które nie są z nimi logicznie związane. Ponadto modyfikacja.
Unified Modeling Language - Zunifikowany Język Modelowania
Wprowadzenie do UML dr hab. inż. Kazimierz Subieta profesor PJWSTK.
Modelowanie obiektowe Diagramy klas
Programowanie w języku C++
UML W V ISUAL S TUDIO Mateusz Lamparski. UML D EFINICJA Unified Modeling Language (UML) to graficzny język do obrazowania, specyfikowania, tworzenia i.
Interakcja człowiek – komputer Podstawy metod obiektowych mgr inż. Marek Malinowski Zakład Matematyki i Fizyki Wydz. BMiP PW Płock.
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski 1 informatyka +
Programowanie strukturalne i obiektowe C++
Model obiektowy bazy danych
Diagram klas Kluczowymi elementami są: klasy (class)
Walidacja danych alina suchomska.
Proces tworzenia oprogramowania Proces tworzenia oprogramowania jest zbiorem czynności i związanych z nimi wyników, które prowadzą do powstania produktu.
Piotr Czapiewski Wydział Informatyki ZUT. Web Services Description Language.
Hibernate Podstawy.
Odwzorowania relacyjno-obiektowe Hibernate Podstawy.
Waldemar Bartyna 1 Programowanie zaawansowane LINQ to XML.
Platforma .Net.
Object-relational mapping (aka O/RM, ORM, and O/R mapping)
Partnerstwo dla Przyszłości 1 Lekcja 28 Dziedziczenie i rodzaje dziedziczenia.
Architektura Rafał Hryniów. Architektura Wizja projektu systemu, którą dzielą twórcy Struktura komponentów systemu, ich powiązań oraz zasad i reguł określających.
Inżynieria systemów informacyjnych
Programowanie Obiektowe – Wykład 6
Wątki, programowanie współbieżne
(według:
Programowanie Obiektowe – Wykład 2
Modele baz danych - spojrzenie na poziom fizyczny
Zapis prezentacji:

Programowanie zorientowane aspektowo Model obiektowy z rolami Radosław Adamus

Zagadnienia Złożoność Dekompozycja i metody dekompozycji Aspekty Narzędzia zaawansowanej separacji aspektów Model obiektowy z rolami i separacja aspektów

Wymagania, z którymi muszą zmierzyć się projektanci systemów Stworzenie systemu zgodnego z wymaganiami w określonym czasie i budżecie Stworzenie systemu, którego ewolucja nie doprowadza wprowadzających zmiany do załamania nerwowego Stworzenie systemu, który wykorzystuje i tworzy elementy ponownego użycia Złożoność oprogramowania wykorzystywanego w praktyce powoduje, że powyższe wymagania są trudne do spełnienia szczególnie, że spełnienie jednego może wykluczać spełnienie innego.

Narzędzia wspierające twórców w walce ze złożonością Dekompozycja – fundamentalna zasada inżynierii (nie tylko) oprogramowania postulująca rozdzielenie problemu na „niezależne” podproblemy, łatwe do wytworzenia, zarządzania, możliwe do ponownego wykorzystania. Abstrakcja – zasada zwracająca uwagę na ograniczone możliwości człowieka w kontrolowaniu i panowaniu nad złożonością. Najlepiej jest myśleć jednocześnie o wybranej części problemu bez wnikania od razu w szczegóły. Sprzyjanie naturalnym ludzkim właściwościom pojmowania rzeczywistości na poziomie modelowania oraz implementacji.

Divide et impera Podążając za starożytną regułą w inżynierii oprogramowania jedną z podstawowych zasad jest zasada separacji niezależnych kwestii tworzonego oprogramowania tak, aby umożliwić twórcy zajmowanie się tylko jednym zagadnieniem na raz. Reguła ta znana jest pod nazwą „principle of separation of concerns” (Dijkstra 1976) Jakie zagadnienia powinny być odseparowywane? Jaki mechanizm dekompozycji wykorzystać? W jaki sposób dokonać optymalnej dekompozycji? W jaki sposób wyrażać zdekomponowane elementy?

Zalety optymalnej dekompozycji Ułatwienie ewolucji Wprowadzania nieinwazyjnych zmian i udoskonaleń oprogramowania Ułatwienie zrozumienia implementacji Zwiększenie możliwości ponownego użycia Uproszczenie procesu integracji komponentów.

Dekompozycja pod lupą – metody dekompozycji Dekompozycja strukturalna – modelowanie funkcji systemu operujących na danych – struktury danych, funkcje. Dekompozycja zorientowania obiektowo – dekompozycja problemu zgodna z naturalnym sposobem postrzegania przez człowieka opisywanej rzeczywistości - obiekty, komunikaty, dziedziczenie, polimorfizm. Czy to jest optymalna dekompozycja?

public class Stack { private int max_top; private int under_max_top; public Stack(int size) { elements = new Object[size]; top = -1; max_top = size-1; under_max_top = max_top-1; } public synchronized void push(Object element) { while (top == max_top) { try wait(); catch (InterruptedException e) {}; elements[++top] = element; if (top==0) notifyAll(); // signal if was empty public synchronized Object pop() { while (top==-1) Object return_val = elements[top--]; if (top==under_max_top) notifyAll(); // signal if was full return return_val; private int top; private Object [] elements;

Czy obecne metody są lekarstwem na walkę ze złożonością?

Modularyzacja obiektowa

Wnioski Nie wszystkie kwestie związane z tworzonym systemem da się zdekomponować przy wykorzystaniu istniejących narzędzi dekompozycji Istnieją zagadnienia, które nie pasują do metod dekompozycji udostępnianej przez model obiektowy czy strukturalny.

Generowane problemy Proces tworzenia oprogramowania jest trudny i złożony, ponieważ wszystkie aspekty muszą być brane pod uwagę jednocześnie. Implementacja jest trudna do zrozumienia. Kod programu jest często nadmiarowy Wprowadzanie zmian wymaga mentalnej dekompozycji, modyfikacji i ponownego zespolenia. Możliwość występowania tzw. anomalii dziedziczenia (ang. Inheritance anomalies) w językach wspierających programowanie współbieżne czy tworzenie systemów czasu rzeczywistego.

Uogólniona procedura (ang. generalized procedure) Obecne metody i notacje koncentrują się na wyszukiwaniu i tworzeniu jednostek odzwierciedlających funkcjonalne zadania tworzonego systemu. Ich struktura wyrażana jest w postaci obiektów, modułów, procedur, itp., które zostały nazwane uogólnioną procedurą. Jedną z własności złożonych systemów jest to, że pewne kwestie związane z ich tworzeniem przecinają (ang. cross-cut) model stworzony za pomocą uogólnionej procedury.

Komponenty i aspekty Własności systemu, które należy zaimplementować, można podzielić na: Komponenty – jeżeli można je zaimplementować wykorzystując Uogólnioną Procedurę (np.. obiekty, metody). Aspekty – jeżeli nie jest możliwe wydzielenie ich przy zastosowaniu Uogólnione Procedury. G. Kiczales Aspekt Jest to zazwyczaj niefunkcjonalne wymaganie względem systemu, którego implementacja powoduje rozsianie dedykowanego kodu w wielu miejscach modelu funkcjonalnego.

dla aplikacji (np. optymalizacja) Aspekty ograniczenia czasu rzeczywistego obsługa wyjątków i błędów rozproszenie synchronizacja monitoring debugowanie zarządzanie buforami interakcja pomiędzy obiektami trwałość Historia zmian replikacja zabezpieczenia QoS optymalizacje transakcje wizualizacje Aspekty specyficzne dla aplikacji (np. optymalizacja)

„Tangled code” public class Stack { private int max_top; private int under_max_top; public Stack(int size) { elements = new Object[size]; top = -1; max_top = size-1; under_max_top = max_top-1; } public synchronized void push(Object element) { while (top == max_top) { try wait(); catch (InterruptedException e) {}; elements[++top] = element; if (top==0) notifyAll(); // signal if was empty public synchronized Object pop() { while (top==-1) Object return_val = elements[top--]; if (top==under_max_top) notifyAll(); // signal if was full return return_val; private int top; private Object [] elements; „Tangled code”

Programowanie Zorientowane Aspektowo (AOP) Język komponentowy public class Stack { private int s_size; public Stack(int size) { elements = new Object[size]; top = -1; s_size = size; } public void push(Object element) { elements[++top] = element; public Object pop() return elements[top--]; private int top; private Object [] elements; Język aspektowy coordinator Stack { selfex push, pop; mutex {push, pop}; condition full=false, empty=true; guard push: requires !full; onexit { if (empty) empty=false; if (top==s_size-1) full=true; } guard pop: requires !empty; { if (full) full=false; if (top==-1) empty=true;

Programowanie Zorientowane Aspektowo (AOP) Separacja aspektów „Tangled” code Moduły funkcjonalne Moduły funkcjonalne Aspekty Aspekty

Wiązanie aspektów (1) Statyczne włączanie aspektów Moduły funkcjonalne Aspekty Join Points Aspect Weaver Kompilator

Wiązanie aspektów (2) Dynamiczne włączanie aspektów Aspekty Moduły funkcjonalne Kompilator Kompilator Join Points Aspect Weaver Program

Punkty odniesienia (join points) Join Points – powiązanie pomiędzy aspektami a klasami, umożliwiające odpowiednie połączenie. Typy Join Points: Proste : odniesienie do nazwy klasy, metody, atrybutu. Na przykład: każde odwołanie się do metody „C.setFoo()” powinno być zapisywanie w pliku. Syntaktyczne Kwalifikowane: odniesienie do nazwy wraz z warunkiem. Na przykład zapisywane do pliku mają być tylko te wywołania metody M1, które odbywają się z wnętrza metody M2. Włączenie aspektu w zależności od spełnienia danej konstrukcji semantycznej (np. Dla wszystkich metod modyfikujących stan obiektu – niezależnie od typu obiektu). Semantyczne Włączenie aspektu w zależności od dynamicznych warunków, grafu -wywołań, wartości parametrów wejściowych i wyjściowych metody, etc. Dynamiczne

Principle of separation of concerns Advance Separation of Concerns Dynamic Roles Aspect Oriented Programming Subject Oriented Programming Composition Filters Hyperspaces Variation Oriented Programming Adaptive Programming Hybrid Approach

Wymagania względem mechanizmu zaawansowanej separacji kwestii (aspektów) 1. Udostępnieni mechanizmu kompozycji aspektu i klasy w sposób „nieinwazyjny”. Istniejący kod wykorzystujący daną klasę nie powinien być modyfikowany w celu akceptacji wersji z aspektem. 2. Udostępnienie mechanizmu do reprezentacji ogólnych aspektów, które można specjalizować, w celu wykorzystania w różnych kontekstach. 3. Minimalizacja powiązania pomiędzy aspektami. 4. Udostępnienie mechanizmu definiowania syntaktycznych i semantycznych „punktów odniesienia” (join points). 5. Możliwość określania zależnych od kontekstu „punktów odniesienia” (możliwość „przeskakiwania aspektu” w zależności od kontekstu wywołania). 6. Mechanizm umożliwiający definiowanie różnych interfejsów dla różnych kategorii klientów oraz wymuszać poprawne użycie tych interfejsów.

Dynamiczne role OSOBA WŁAŚCICIEL PSA PRACOWNIK PODATNIK STUDENT CZŁONEK KLUBU PACJENT

Właściwości dynamicznych ról pod kątem separacji aspektów Rola może być wstawiona i usunięta z obiektu dynamicznie w czasie wykonania. Możliwość przeskakiwania roli z jednego obiektu na drugi. Role przynależne do jednego obiektu mogą mieć atrybuty, metody o takiej samej nazwie, które mogą mieć zupełnie inną semantykę. Rola posiada swoje własne atrybuty i zachowanie (metody, aktywne reguły) – role aktywne i pasywne

Właściwości dynamicznych ról (pod kątem separacji aspektów) - przykłady RDF Opis zasobów na zasadzie: Zasób (resource) -> właściwość (property)-> wartość właściwości { Subject http://www.w3.org/TR/1999/PR-rdf-schema-19990303#Book Predicate Owner Object “John Wayne” Statement Właściwości: Określanie relacji dziedziczenia pomiędzy klasami opisywanych zasobów (subClassof) oraz terminami opisującymi te zasoby (subPropertyof) (np.. Pojazd -> samochód, biologiczny rodzic -> biologiczny ojciec.). Określanie grupy (domeny) zasobów, które mogą być opisane przez dany termin. np. autor -> domena -> książka, autor -> domena -> artykuł, ilość miejsca na nogi -> domena -> Samochód osobowy ilość miejsca na nogi -> domena -> Minivan

Właściwości dynamicznych ról (pod kątem separacji aspektów) - przykłady RDF Zasoby Właściwości Obiekty Aspekty (role)

Właściwości dynamicznych ról (pod kątem separacji aspektów) - przykłady Dublin Core - podstawowe elementy opisu zasobów WWW: Dotyczące zawartości: Coverage Description Type Relation Source Subject Title Dotyczące własności: Contributor Creator Publisher Rights Opisujące właściwości: Date Format Identifier Language

Wizja architektury projektu ICONS API oparte na obiektowym języku zapytań a la SQL Peryferia systemu Peryferia systemu Repozytorium aktywnej obiektowej bazy danych z dynamicznymi rolami obiektów Relacyjne bazy danych i inne spadkowe technologie XML, RDF i inne technologie Web Repozytorium metadanych zintegrowane z zarządzaniem konfiguracją

Separacja aspektów przy użyciu dynamicznych ról Modelowanie zmian zachowania obiektu w zależności od perspektywy (perspective dependent behaviour variation) OSOBA Nazwisko Nowak RokUr 1951 KSIĘGOWY Zarobek 1000 Staż Pracy 1 PROFESOR Zarobek 1500 Staż Pracy 5 WYKŁADOWCA Zarobek 1500 Staż Pracy 2 stanowisko stanowisko stanowisko pracuje_w pracuje_w pracuje_w INSTYTUT Nazwa IChR INSTYTUT Nazwa DMCS FUNDACJA Nazwa Serce

Separacja aspektów przy użyciu dynamicznych ról Odseparowywanie aspektów przy wykorzystaniu aktywnych ról zabezpieczenia KONTO Nr … Właściciel … monitoring debugowanie ZABEZPIECZENIA event … condition … Action … obsługa wyjątków Dostęp do roli (aspektu) transakcje Dostęp do obiektu wizualizacje

Future Work Zdefiniowanie metamodelu umożliwiającego traktowanie roli jako aspektu Dynamiczna typizacja – refleksja Interfejs do aspektu (roli) a interfejs do obiektu Jednoczesne dołączanie aspektu do obiektów różnych typów Stworzenie prototypu bazy danych

Ten referat powinien mieć tytuł: Zaawansowana separacja aspektów a model obiektowy z rolami

Dziękuję za uwagę