Wprowadzenie do programowania aspektowego

Transkrypt

Wprowadzenie do programowania aspektowego
Problem
Programowanie obiektowe
Programowanie aspektowe
Wprowadzenie do programowania aspektowego
Michał Stochmiałek
Michał Stochmiałek
Wprowadzenie do programowania aspektowego
Problem
Programowanie obiektowe
Programowanie aspektowe
Plan prezentacji
Problem
Wymagania klienta
Ortogonalność
Programowanie obiektowe
Apache Tomcat OOP?
Problem na przykładzie
Programowanie aspektowe
Idea
Przykład
Tkacz
Michał Stochmiałek
Wprowadzenie do programowania aspektowego
Problem
Programowanie obiektowe
Programowanie aspektowe
Wymagania klienta
Ortogonalność
Wielowymiarowość wymagań klienta
Klient wymaga oprócz realizacji głównego zagadnienia systemu,
również inne poboczne np:
I
logowanie transakcji do dziennika systemowego
I
spójność transakcyjną
I
autoryzację użytkowników
I
rozproszenie obliczeń
Michał Stochmiałek
Wprowadzenie do programowania aspektowego
Problem
Programowanie obiektowe
Programowanie aspektowe
Wymagania klienta
Ortogonalność
Metafora pryzmatu
[Źródło: Laddad, I want my AOP!, part 1]
Michał Stochmiałek
Wprowadzenie do programowania aspektowego
Problem
Programowanie obiektowe
Programowanie aspektowe
Wymagania klienta
Ortogonalność
Ortogonalność wymagań?
Michał Stochmiałek
Wprowadzenie do programowania aspektowego
Problem
Programowanie obiektowe
Programowanie aspektowe
Wymagania klienta
Ortogonalność
Czy implementacja jest na to
przygotowana?
Michał Stochmiałek
Wprowadzenie do programowania aspektowego
Problem
Programowanie obiektowe
Programowanie aspektowe
Apache Tomcat OOP?
Problem na przykładzie
Programowanie obiektowe
Pozwala na modelowanie systemów informatycznych w kategoriach
świata rzeczywistego, dostarczając:
I
klasy
I
generalizacja
I
enkapsulacja
Michał Stochmiałek
Wprowadzenie do programowania aspektowego
Problem
Programowanie obiektowe
Programowanie aspektowe
Apache Tomcat OOP?
Problem na przykładzie
Apache Tomcat - realizacja przetwarzania plików XML
Michał Stochmiałek
Wprowadzenie do programowania aspektowego
Problem
Programowanie obiektowe
Programowanie aspektowe
Apache Tomcat OOP?
Problem na przykładzie
Apache Tomcat - obsługa logowania
Michał Stochmiałek
Wprowadzenie do programowania aspektowego
Problem
Programowanie obiektowe
Programowanie aspektowe
Apache Tomcat OOP?
Problem na przykładzie
Problem na przykładzie
Michał Stochmiałek
Wprowadzenie do programowania aspektowego
Problem
Programowanie obiektowe
Programowanie aspektowe
Apache Tomcat OOP?
Problem na przykładzie
public void sellSelfDefenceTShirts(Client client, int num)
{
super.getLogger().info("Klient " + client.getFullName()
+ " rozpoczął transakcje zakupu koszulek.");
UserTransaction ut = getUserTransaction();
try {
ut.begin();
// *** wykonaj operację zakupu koszulek ***
ut.commit();
super.getLogger().info("Klient " + client.getFullName()
+ " pomyślnie zakończył transakcje zakupu koszulek.");
} catch(Exception e) {
ut.rollback();
super.getLogger().info("Przerwana transakcja zakupu koszulek"
+ " (klient: " + client.getFullName() + ").");
}
}
Michał Stochmiałek
Wprowadzenie do programowania aspektowego
Problem
Programowanie obiektowe
Programowanie aspektowe
Apache Tomcat OOP?
Problem na przykładzie
Pomysł na refaktoryzację?
Czy metoda nie powinna wyglądać tak?
public void sellSelfDefenceTShirts(Client client, int num)
{
// *** wykonaj operację zakupu koszulek ***
}
Michał Stochmiałek
Wprowadzenie do programowania aspektowego
Problem
Programowanie obiektowe
Programowanie aspektowe
Apache Tomcat OOP?
Problem na przykładzie
Konsekwencje przeplatania kodu
I
programista nie skupia się na właściwej odpowiedzialności
danej klasy czy metody
I
zmniejszenie zdolności do ponownego użycia danego kodu
I
rozproszenie kod związanego z ortogonalnymi wymaganiami
klienta
I
trudna do refaktoryzacji duplikacja kodu źródłowego
Michał Stochmiałek
Wprowadzenie do programowania aspektowego
Problem
Programowanie obiektowe
Programowanie aspektowe
Idea
Przykład
Tkacz
Rozwiązanie
Michał Stochmiałek
Wprowadzenie do programowania aspektowego
Problem
Programowanie obiektowe
Programowanie aspektowe
Idea
Przykład
Tkacz
Paradygmat programowania aspektowego
Aspect-Oriented Programming - AOP
I
rozszerza paradygmat programowania obiektowego
I
dodaje nowy wymiar do programowania
I
Aspekt - jednostka modularności analogiczna do klasy
Michał Stochmiałek
Wprowadzenie do programowania aspektowego
Problem
Programowanie obiektowe
Programowanie aspektowe
Idea
Przykład
Tkacz
Anatomia programu aspektowego
I
Aspekt (aspect) - analogiczna do klasy, jednostka
modularności
I
Rada (advice) - analogiczna do metody, zawiera kod
wykonywany przez aspekt
I
Punkty łączeń (join points) - miejsca uruchomienia rad w
kodzie obiektowym (połączenie kodu aspektowego i
obiektowego)
I
Linie podziału (pointcuts) - zbiór punktów łączeń
Michał Stochmiałek
Wprowadzenie do programowania aspektowego
Problem
Programowanie obiektowe
Programowanie aspektowe
Idea
Przykład
Tkacz
Nieśmiertelny HelloWorld
public class HelloWorld {
public static void say(String message) {
System.out.println(message);
}
public static void sayToPerson(String message, String name) {
System.out.println(name + ", " + message);
}
}
[Źródło: Laddad, I want my AOP!, part 2]
Michał Stochmiałek
Wprowadzenie do programowania aspektowego
Problem
Programowanie obiektowe
Programowanie aspektowe
Idea
Przykład
Tkacz
Aspekt dodający uprzejmości
public aspect MannersAspect {
pointcut callSayMessage()
: call(public static void HelloWorld.say*(..));
before() : callSayMessage() {
System.out.println("Good day!");
}
after() : callSayMessage() {
System.out.println("Thank you!");
}
}
[Źródło: Laddad, I want my AOP!, part 2]
Michał Stochmiałek
Wprowadzenie do programowania aspektowego
Problem
Programowanie obiektowe
Programowanie aspektowe
Idea
Przykład
Tkacz
Tkacz - silnik AOPu
[Źródło: Laddad, I want my AOP!, part 1]
Michał Stochmiałek
Wprowadzenie do programowania aspektowego
Problem
Programowanie obiektowe
Programowanie aspektowe
Idea
Przykład
Tkacz
Implementacje AOP
I
AspectJ - rozszerzenie Java
(http://eclipse.org/aspectj/)
I
AspectC - rozszerzenie C++ (http://www.aspectc.org)
I
RAPIER-LOOM.NET - biblioteka .NET
Michał Stochmiałek
Wprowadzenie do programowania aspektowego
Problem
Programowanie obiektowe
Programowanie aspektowe
Idea
Przykład
Tkacz
Podsumowanie
Michał Stochmiałek
Wprowadzenie do programowania aspektowego
Problem
Programowanie obiektowe
Programowanie aspektowe
Idea
Przykład
Tkacz
Do zapamiętania
I
I
problem ortogonalności wymagań klienta
paradygmat programowanie aspektowe - AOP
I
I
rozszerzenie paradygmatu obiektowego
przejrzysty sposób na modelowanie ortogonalnych wymagań
Michał Stochmiałek
Wprowadzenie do programowania aspektowego
Problem
Programowanie obiektowe
Programowanie aspektowe
Idea
Przykład
Tkacz
Do przemyślenia :-)
I
rozwiązanie problemu refaktoryzacyjnego?
I
brak przyjętego języka modelowania (jak UML)
Michał Stochmiałek
Wprowadzenie do programowania aspektowego
Problem
Programowanie obiektowe
Programowanie aspektowe
Idea
Przykład
Tkacz
Bibliography
Laddad Ramnivas, I want my AOP!, Part 1-3, Separate
software concerns with aspect-oriented programming,
JavaWorld, 2002
AspectJ Team, The AspectJTM Programming Guide,
http://eclipse.org/aspectj/
Stochmiałek Michał, Wprowadzenie do programowania
aspektowego, CodeGuru.pl, 2004
Michał Stochmiałek
Wprowadzenie do programowania aspektowego