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