Yani’s Weblog

it’s all about software engineering…

AspectJ – Example

Salah satu bahasa pemrograman yang mendukung aspect oriented programming (AOP) adalah Java dengan library-nya AspectJ. Sempat dibahas sedikit dari tulisan ini dan komentar-komentarnya

Berikut adalah beberapa konsep baru yang diperkenalkan dalam AOP:  joinpoint, poincut, dan advice.

Joinpoint merupakan definisi lokasi pada kode program, dimana saat eksekusi, aspek tertentu akan dieksekusi sesuai dengan aturan yang telah ditetapkan. Joinpoint didefinisikan di dalam sebuah aspect dengan menggunakan dua macam konstruktor, yaitu poincut dan advice.

Pointcut merupakan konstruktor yang digunakan untuk menunjuk joinpoint tertentu pada saat eksekusi. Sebuah pointcut dideklarasikan dengan menggunakan kata kunci pointcut. Ada banyak tipe poincut, berikut adalah contohnya untuk tipe pemanggilan method :   poincut lokasi1 () : call (int Date.getHour());

Artinya, kita mendefinisikan sebuah lokasi pada kode program (lokasi1), yaitu lokasi pemanggilan method getHour() dari kelas Date.

Advice mendefinisikan potongan kode yang akan dieksekusi pada sebuah joinpoint. Ada tiga jenis advice, yang masing-masing menentukan di sebelah mana advice tersebut akan disisipkan. Jenis advice pertama dieksekusi sebelum joinpoint (before advice), jenis kedua dieksekusi setelah joinpoint (after advice), dan yang terakhir dieksekusi pada joinpoint (around advice).

Contohnya:  before () : lokasi1 () { system.out.println (“Before : ” + thisJoinPoint);  }

Kode aspect yang lengkap untuk contoh di atas adalah sbb:

public aspect ngeDebug {
pointcut lokasi1 ()   :  call (int Date.getHour ());
before () : lokasi1 ()    { system.out.println (“Before : ” + thisJoinPoint);}}

Jadi, saat debuging misalnya, kita tidak perlu “menabur” kode println dimana-mana (yang kemudian sering lupa dihapus), tapi cukup mendefinisikan sebuah aspect ngeDebug seperti di atas…

January 14, 2009 Posted by yaniwid | aspect oriented | | 8 Comments

Apa itu Aspect ?

Unit program terkecil yang saat ini digunakan pada paradigma pemrograman prosedural atau berorientasi objek umumnya berupa prosedur dan kelas. Pendekatan tersebut tepat untuk digunakan pada persoalan dimana sistem hanya dibangun dari komponen – komponen fungsional. Namun, pendekatan tersebut tidak dapat digunakan untuk mengimplementasikan aspek – aspek khusus (special concerns) pada sistem. Misalnya aliran data pada sistem terdistribusi, pemulihan (failure recovery), persistensi (persistence), sinkronisasi proses (process synchronization), dan lain – lain. Aspek – aspek khusus tersebut biasanya akan langsung diimplementasikan sebagai barisan kode program yang mungkin tersebar (terduplikasi) pada kelompok kode program yang mewakili komponen – komponen fungsional.

Paradigma atau pendekatan pemrograman tersebut di atas belum mendukung aktivitas separation of concerns yang baik pada fase perancangan dan implementasi, sehingga menyebabkan program yang dihasilkan lebih sulit untuk dikembangkan, dipahami, dan dipelihara.

Pemrograman berorientasi aspek (Aspect Oriented Programming/AOP) merupakan paradigma pemrograman yang relatif baru, diperkenalkan sebagai hasil dari penelitian yang dilakukan oleh Gregor Kiczales di Xerox ‘s Palo Alto Research Center (PARC). Paradigma ini dikembangkan sebagai salah satu solusi untuk persoalan separating crosscutting concerns pada kode program. Dengan pendekatan pemrograman berorientasi aspek ini, persoalan didekomposisi menjadi kumpulan kelas (class) dan aspek (aspect). Kelas mewakili komponen – komponen yang memiliki peran fungsional dalam domain persoalan sistem perangkat lunak yang akan dikembangkan. Sedangkan aspek mewakili komponen – komponen yang tidak dapat didefinisikan sebagai komponen fungsional, namun keberadaannya tetap memiliki pengaruh pada performansi dan semantik sistem secara keseluruhan.

January 12, 2009 Posted by yaniwid | aspect oriented | | 3 Comments