Implementasi Design Pattern pada AOP

Kalau kemarin-kemarin gw udah ngebahasa sedikit tentang konsep AOP . sekarang gw akan nyoba untuk menjelaskan implementasi Deisgn Pattern dengan menggunakan paradigma AOP. Biasanya design pattern di terapkan dengan menggunakan paradigma OOP. Dimana segala sesuatu dalam Real world dipandang sebagai objek. Dalam metode OOP kadang kita temui kode program (methode) yang sebenarnya bukan merupakan karakteristik dari objek tersebut tetapi penting untuk diterapkan di objek tersebut. Dan methode ini digunakan juga sama objek yang lain sehingga terjadi crosscutting concern. Nah dalam AOP crosscutting concern tersebut di enkapsulasi menjadi sebuah aspect. Contohnya : untuk membuat sebuah instance kita diharuskan untuk melakukan proses logging atau verifikasi dll, sementara proses logging tersbut tidak hanya digunakan oleh sebuah objek.. Maka dalam AOP proses logging tersebut dijadikan aspect. Kali ini gw mencoba menuliskan code program AOP dengan Jboss AOP, cuman sory bro karena code program ditulis do word (gak sempat pake editor java) maka jangan langsung di compile (harus di edit dulu)

Pada karya ilmiah karangan Gregor Kiczales menyebutkan bahwa penerapan design pattern pada AOP memiliki beberapa keuntungan diantaranya :

  • Locality : code functionalitas sedikit mengandung aspect, tidak hanya mengandung class dan hasilnya yang didapat meningkatkan modularitas.
  • Reusability : Refactoring dari code kedalam aspect menjadikan tingkat abstraksi yang tinggi dan reusable yang lebih baik.
  • Composition transparency : sebuah objek dapat mengimplementasikan beberapa pattern tanpa harus mengimplementasikan seluruhnya yang akan mengakibatkan kerancuan.

  • (Un)pluggability : keseluruhan aplikasi kurang mengandalkan implemenasi design pattern. Dengan AOP, dapat mengaktifkan atau tidak mengaktifkan design pattern , seperti pada pembuatan class singleton.

Dari keuntungan diatas tidak semuanya dimiliki oleh desagin pattern. Dari 23 design pattern dalam GoF, hanya 17 yang menampilkan peningkatan dengan menggunakan AOP.

The Singleton Design Pattern

Gambaran tentang design pattern singleton

1. Problem dan Context : beberapa class seharusnya hanya satu instance selama exekusi program. Hal ini penting karena 2 alasan : salah satu model dari class ialah mempunyai object yang unik , seperti menset variable global untuk aplikasi dan mempunyai 2 instance untuk menjalankan run time error; atau alternative, karena satu instance cukup untuk menghandle beberapa service yang diperlukan, dan menjamin tidak lebih dari satu instance yang akan di create, untuk mengekonomiskan memori dan resource computer.

2. Solusi dari masalah : class harus mempunyai atribut yang static yang disebut dengan instance, dan bersifat unik instance, dengan menggunakan methode yang disebut dengan methode getInstance, yang akan mengembalikan nilai dari instance. Jika instance masih null maka akan di create kalau tidak maka getInstace akan membuat instance baru dan menyimpan reference kedalam atribut instance dan mengembalikannya ke pemanggil.

Implentasi Design Pattern dengan AspectJ

Dengan AspectJ membuat kita menyelesaikan masalah menjadi lebih simple dan efektif dengan mendefinisakan aspek untuk memodifikasi behaviour dari constructor, yang mana akan diinvoke oleh operator baru yang akan membuat instance baru dari class. Ketika constructor di invoke, aspek intercept akan mensubstitusi metode baru dengan kode yang dibutuhkan untuk memanage singleton.

Berikut dengan JBoss AOP, kita dapat mendefinisikan interceptor yang diperlihatkan pada listing 8-2.

Package aop.pattern.singleton;

Import org.jboss.advice.interceptor;

Import org.jboss.joinpoint.Invocation;

Public class SingletonInterceptor implements Interceptor {

Private Object singleton;

Public String getName(){

Return “Singleton Interceptor”;

}

Public Object invoke(Invocation invocation) throws Throwable{

If(singleton==null)

{

Singleton = invocation.invokeNext();

}

Return singleton;

}

}

Code interceptor diatas sama dengan object oriented implementasi dari singleton: hal ini termasuk atribut, yang digunakan untuk menyimpan instance singleton yang unik, dan methode invoke yang digunakan untuk mengecek existenci dari instance ketika menyimpan constructor dipanggil. Jika instance belum exis , invoke akan memanggil constructor dan menyimpan instance yang degenerate dalam atribut singleton.

Pengujian class singleton

package aop.patterns.singleton;

public class Stats{

private int orders = 0;

private float totalAmount = 0;

Private String status = “OK”;

Public int getOrders(){

Return orders;

}

Public void incOrders(){

Orders++;

}

Public float getTotalAmount(){

Return totalAmount;

}

Public float addAmount(){

Return totalAmount++;

}

Public String getStatus(){

Return status;

}

Public void setStatus(String p){

Status = p;

}

}

Binding Singleton Design Pattern untuk kelas stat

<bind pointcut=”execution(aop.patterns.singleton.Stats->new())”>

<interceptor class= “aop.patterns.singletonInterceptor”>

</bind>

Main class untuk mengetes class singleton pattern

package aop.patterns.singleton;

public class singletonExample(String[] args)

{

Stats stats1 = new Stats();

Stats stats2 = new Stats();

If(stats1==stats2)

{

System.out.print(“These instanve are the same”);

}

else

{

System.out.print(“The instance are not same”);

}

}

Jika di eksekusi maka akan menghasilkan

“These instance are the same”

Kayanya segitu dulu deh… Selamat Belajar !!!!

2 thoughts on “Implementasi Design Pattern pada AOP

  1. infoGue says:

    artikel anda bagus dan menarik, artikel anda:
    http://www.infogue.com/
    http://design.infogue.com/implementasi_design_pattern_pada_aop

    anda bisa promosikan artikel anda di infoGue.com yang akan berguna untuk semua pembaca. Telah tersedia plugin/ widget vote & kirim berita yang ter-integrasi dengan sekali instalasi mudah bagi pengguna. Salam!

  2. Rhenoo says:

    Salam kenal,

    Mas, saya mo nanya donk
    Saya kan pengguna baru AOP, gimana si cara biar AspectJ bisa ke detect di Netbeans???
    Padahal saya dah ngikutin petunjuk yg ada di Readme, tapi tetep juga gak berhasil.
    Oya, klo boleh saya mo tanya lebih lanjut via email.

    Terima kasih

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s