Tuesday, May 5, 2009

AOP Related Terminology

Join Point

Joseph D Gradecki dan Nicholas Lesiecki menuliskan join point sebagai : well-defined location within the primary code where a concern will crosscut the application.Jelaslah bahwa join point adalah sebuah titik di dalam coding (core concern) di mana kita bisa melakukan crosscut dan menyisipkan coding lain (crosscutting concern) di dalamnya. Join points bisa berupa method call, constructor invocations, exception handlers, atau titik-titik lain pada program. Perhatikan contoh berikut :

Kali ini kita memiliki class Product yang merupakan base class untuk DVD dan Boxset dengan masing-masing variabel dan methodnya. Sebuah class bernama Main bertugas untuk menginstansiasi class DVD dan Boxset.








Selanjutnya kita memiliki sebuah aspect bernama ProductAspect. Di dalamnya berisi sebuah pointcut bernama tracePoint dan advice. Keduanya akan dijelaskan nanti. Yang perlu menjadi perhatian di sini adalah bahwa dengan aspect ini kita akan mencari tahu bagian mana saja dari class-class yang kita miliki di atas yang merupakan join point. Join point ditunjukkan pada baris yang memiliki tanda panah ().

Wow banyak sekali titik yang bisa menjadi join point pada class-class di atas. Sebenarnya bagian mana sajakah yang bisa menjadi join point? Beberapa di antaranya adalah method call (ditunjukkan dengan tanda panah pada nama method), method execution (termasuk variable assignment dan return statement), object construction (lihat saat instansiasi class DVD dan Boxset), dan beberapa point yang tidak ditunjukkan pada class di atas adalah termasuk conditional check, loop (for, while, do-while), dan exception handling.

Perlu diingat bahwa tidak semua join point di atas bisa kita gunakan. Join point yang dapat kita gunakan (dalam hal ini lewat pointcut nantinya) disebut exposed join point. AspectJ misalnya tidak mengikutsertakan loop sebagai join point. Selain itu join point juga memiliki context yang berasosiasi dengannya. Misalnya adalah tiap method call ke join point akan mendapatkan object yang memanggil, object target, dan argumen-argumen method tersebut. Contoh lain adalah join point dalam exception handling akan mendapatkan current object dan thrown exception. Kita akan melihat contoh penggunaannya saat berbicara tentang pointcut dan advice nanti.

Kita akan lihat lebih detil untuk beberapa join point. (Untuk melihat implementasinya silakan dicoba seperti contoh di atas)

1. Method join point
Seperti disebutkan di atas ada dua jenis method join point yaitu method call dan method execution. Join point pada method call adalah saat method tersebut dipanggil (dari manapun). Misalnya starwars.getTitle(). Sedangkan method execution adalah di semua bagian dari body method tersebut, misalnya lihat pada method main() pada class Main.
2. Constructor join point
Sama seperti method join point, ada dua jenis constructor join point yaitu constructor call (object creation) dan construction execution.
3. Field access join point
Adalah saat mengeset atau membaca instance variable BUKAN variabel lokal. Perhatikan juga bahwa join point ini bukan berarti hanya ada di getter dan setter saja namun semua code yang membaca dan mengeset instance variable. Perhatikan kode berikut

baris 13 dan 14 adalah termasuk field access join point untuk instance variable starwars. Baris 13 memiliki 2 penanda untuk before dan after sesuai aspect sebelumnya untuk set starwars. Sedangkan baris 14 memiliki 4 penanda yaitu 2 untuk method call addDVD() dan 2 penanda untuk field access join point untuk membaca starwars.
4. Exception handler execution join point
Join point yang muncul pada blok catch seperti pada gambar di atas
5. Class initilization join point
Join point yang muncul saat loading class, termasuk inisialisasi static variabel dan static blok.
private static DVD dvd1;
static {
dvd1 = new DVD(""); // terdapat 4 penanda; 2 untuk constructor DVD dan 2 untuk field access
}

Aspect


(bersambung...)

0 comments:

 

©2009 Stay the Same | by TNB