Selasa, 07 Mei 2013

Adapter Pattern

,
Kegunaan umum :
Menurut Gang of Four, Adapter patter digunakan untuk mengkonversi nama nama fungsi dan nama agar cocok dengan yang diinginkan oleh client (kelas yang akan menggunakan). Adapter memungkinkan kelas untuk bisa bekerja bersama sama walaupun sebelum tidak memungkinkan Karen a perbedaan nama nama fungsi dan variabel.
Konteks :
-          Diinginkan untuk menggunakan suatu class dengan antar muka (method-method public) tertentu tanpa mengubah definisi class tersebut. Class ini kita sebut adaptee.
-          Konteks permasalahan dimana kita ingin menggunakan class ini membutuhkan antar muka yang berbeda dari yang dimiliki class adaptee.Antarmuka yang  diperlukan  untuk kita sebut target.
-          Antarmuka untuk target dan antarmuka yang dimiliki adaptee secara konsep berkaitan.
Solusi :
-          Antarmuka yang dibutuhkan client(target) didefinisikan sebagai interface dengan method-method yang dibutuhkan untuk menyelesaikan tugas.
-          Definisikan sebuah class adapter yang mengimplementasikan interface target ini.
-          Class adapter memiliki referensi terhadap objek adaptee (relasi compose a.k.a HAS_A).class adapter  menerjemahkan  method yang dideklarasikan pada interface target ke dalam method dari adaptee.
-          Client membungkus objek adaptee ke dalam objek adapter. Client melaksanakan tugasnya dengan memanggil method adapter, dan adapter menerjemahkannya dengan memanggil method adaptee yang bersesuaian.

Desain umum class diagram Adapter :


Studi Kasus
Misalkan kita telah memiliki sebuah kelas lingkaran dalam desain aplikasi existing. Pada tahapan berikutnya muncul beberapa kelas baru yang yang hamper sejenis seperti garis, titik dan segiempat. Garis titik dan segiempat merupakan mengimplementasikan interface bidang_datar. Garis titik dan segiempat menshare beberapa fungsi seperti : tampil(), aturwarna(), sembunyikan(). Ketinya merupakan turunan dari kelas bidangdatar.
Kelas lingkaran merupakan kelas existing yang sebenarnya bukan turunan dari kelas bidang_datar karena pada saat kelas lingkaran ini dibuat kelas bidang_datar juga belum ada.  Celakanya adalah kelas lingkaran ini telah memiliki beberapa fungsi yang mirip tetapi namanya lain misal untuk menampilkan nama fungsinya display(), menyembunyikan hide() dan mengeset warna setcolor()
Pada tahap ini ada 2 solusi yang mungkin bisa dilakukan :
·Mengubah isi kelas lingkaran dengan mengubah kelas lingkaran menjadi turunan dari kelas bidang_datar dan mengubah nama nama fungsi milik lingkaran sesuai dengan nama nama fungsi yang telah dideklarasikan di kelas bidang_datar sebagai induknya. Solusi ini merupakan pilihan yang buruk karena 2 hal,
·pertama karena belum tentu kita mendapatkan source code kelas lingkaran.
·Kedua karena mengunah kode program selalu menghasilkan error baru, ingat bahwa kelas lingkaran adalah kelas eksisting yang barangkali sudah ada kelas lain yang menginstansiasi dan memanggil fungsi fungsi asli milik kelas ini sehingga ketika diganti mungkin akan menimbulkan error di berbagai tempat lain kode program kita.
·Membuat sebuah kelas baru yang merupakan implementasi dari kelas bidang_datar, kelas ini dapat mewakili kelas lingkaran misalkan diberi nama lingkaran_new. Lingkaran_new sebagai turunan dari kelas bidang_datar akan mewarisi semua fungsi milik bidang_datar yaitu : tampil(), aturwarna() dan sembunyikan().  Agar kelas ini dapat memanfaatkan semua resource (kode program) yang telah ada di kelas lingkaran asli (existing) maka di buat kelas ini memiliki salah satu atribut yang bertipe lingkaran. Isi fungsi tampil adalah mengeksekusi fungsi display milik kelas lingkaran yang asli demikian juga dengan fungsi fungsi yang lain.

Perhatikan desain di bawah ini :



Solusi menggunakan adapter pattern :


Kode Program
public class main {
    private bidang_datar mbidang_datar;
    public main () {
        mbidang_datar = new Adapter();
        mbidang_datar.setwarna();
        mbidang_datar.tampil();
        mbidang_datar.sembunyi();
        mbidang_datar = new segi4();
        mbidang_datar.setwarna();
        mbidang_datar.tampil();
        mbidang_datar.sembunyi();
    }
}

public class lingkaran {
    public lingkaran () {
    }
    public void display () {
    }
    public void setcolor () {
    }
    public void hide () {
    }
    public void specificRequest () {
    }
}

public class Adapter implements bidang_datar {
    private lingkaran mlingkaran;
    public void request () { 
    }
    public void tampil () {
     mlingkaran.display();
    }
    public void sembunyi () {
        mlingkaran.hide();
    }
    public void setwarna () {
        mlingkaran.setcolor();
    }
}


Facade Pattern

,

The fasad pola (atau pola façade ) merupakan pola desain perangkat lunak yang umum digunakan dengan pemrograman berorientasi obyek . Nama ini dengan analogi ke fasad arsitektur .
Fasad adalah sebuah objek yang menyediakan antarmuka disederhanakan untuk tubuh yang lebih besar dari kode, seperti perpustakaan kelas . Fasad A dapat:
·         membuat perangkat lunak perpustakaan mudah digunakan, memahami dan menguji, karena fasad memiliki metode yang mudah untuk tugas umum;
·         membuat perpustakaan lebih mudah dibaca, karena alasan yang sama;
·         mengurangi ketergantungan kode luar di inner perpustakaan, karena sebagian besar kode menggunakan fasad, sehingga memungkinkan lebih banyak fleksibilitas dalam pengembangan sistem;
·         membungkus koleksi dirancang buruk dari API dengan yang dirancang dengan baik API tunggal (sesuai kebutuhan tugas).

Penggunaan :
Facade A digunakan ketika seseorang ingin antarmuka yang lebih mudah atau sederhana untuk obyek mendasari
pelaksanaan. Selain itu, sebuah adaptor digunakan ketika bungkusnya harus menghormati antarmuka tertentu
dan harus mendukung polimorfik perilaku. Sebuah dekorator memungkinkan untuk menambah atau mengubah
perilaku dari sebuah antarmuka pada saat run-time.
Pola
Maksud
         Adaptor
        Mengkonversi satu antarmuka yang lain sehingga cocok apa yang klien mengharapkan
        Penghias
        Dinamis menambahkan tanggung jawab untuk antarmuka dengan membungkus kode asli
         Penglihat an
        Menyediakan antarmuka disederhanakan

Struktur  :
Penglihatan 
Kelas fasad abstrak Paket 1, 2, dan 3 dari sisa aplikasi. 

Klien
Benda-benda yang menggunakan Pola Facade untuk mengakses sumber daya dari Paket.



Rabu, 24 April 2013

Adapter Pattern

,

Kegunaan umum :
Menurut Gang of Four, Adapter patter digunakan untuk mengkonversi nama nama fungsi dan nama agar cocok dengan yang diinginkan oleh client (kelas yang akan menggunakan). Adapter memungkinkan kelas untuk bisa bekerja bersama sama walaupun sebelum tidak memungkinkan Karen a perbedaan nama nama fungsi dan variabel.
Konteks :
  • -          Diinginkan untuk menggunakan suatu class dengan antar muka (method-method public) tertentu tanpa mengubah definisi class tersebut. Class ini kita sebut adaptee.
  • -          Konteks permasalahan dimana kita ingin menggunakan class ini membutuhkan antar muka yang berbeda dari yang dimiliki class adaptee.Antarmuka yang  diperlukan  untuk kita sebut target.
  • -          Antarmuka untuk target dan antarmuka yang dimiliki adaptee secara konsep berkaitan.

Solusi :
-          Antarmuka yang dibutuhkan client(target) didefinisikan sebagai interface dengan method-method yang dibutuhkan untuk menyelesaikan tugas.
-          Definisikan sebuah class adapter yang mengimplementasikan interface target ini.
-          Class adapter memiliki referensi terhadap objek adaptee (relasi compose a.k.a HAS_A).class adapter  menerjemahkan  method yang dideklarasikan pada interface target ke dalam method dari adaptee.
-          Client membungkus objek adaptee ke dalam objek adapter. Client melaksanakan tugasnya dengan memanggil method adapter, dan adapter menerjemahkannya dengan memanggil method adaptee yang bersesuaian.

Desain umum class diagram Adapter :




Selasa, 16 April 2013

Builder pattern

,

Builder Pattern adalah sebuah software design pattern. Tujuannya adalah sebagai langkah-langkah abstract kerangka (kontruksi) object, jika suatu implementasi menggunakan langkah-langkah yang berbeda, maka akan membuat representasi object yang berbeda juga.
Builder Pattern sering digunakan untuk membangun produk sesuai dengan sebuah pola struktur Composite Pattern, dengan cara memisahkan pembangunan kompleks object dari representation, sehingga proses konstruksi yang sama dapat membuat representation yang berbeda.

Abstract Factory Pattern

,


Abstract Factory Pattern (AFP) merupakan salah satu jenis Creational Pattern yang menangani mekanisme penciptaan object secara adaptif Abstract Factory menyediakan sebuah interface untuk menciptakan keluarga yang terkait atau object yang tergantung tanpa menentukan concrete class mereka.

Abstract Factory mampu pengenkapsulasian sekelompok factory, dimana masing-masing factory memiliki “motif” khasnya. AFP menjadi sentral penentuan factory yang akan diinisialisasi sehingga product yang diciptakan dapat mewarisi behaviour yang sesuai dengan motif yang dipilih. Keistimewaan lain adalah product yang diciptakan terbebas dari pernyataan penciptaan concrete class secara langsung. Hal ini memberikan keuntungan yaitu AFP dapat mencegah coupling problem yang pasti terjadi apabila penciptaan object memakai operator new dalam bahasa OOP.

Factory Method Pattern

,


Dengan membuat Factory Method dan mendefinisikan sebuah class interface, kita bisa men-
generate object yang dinamis sesuai kebutuhan dan implementasi yang diinginkan. Harap di-ingat lagi,
ruang lingkup dari Factory Method adalah class, Factory Method sendiri adalah class object yang static.
Contoh di bawah menggambarkan bagaimana ObjectFactory memanfaatkan class interface object menjadi lebih dinamis. Contoh lain implementasi pattern ini adalah BorderFactory atau SocketFactory yang merupakan standart package Java API.
Observer Pattern menerapkan mekanisme Publisher dan Subscriber untuk mengatur bagaimana sebuah object mengetahui perubahan state di object lainnya.

Jumat, 29 Maret 2013

Pengenalan Design Pattern

,
Istilah design patterns dimulai di bidang perancangan bangunan oleh Christopher Alexander. Dalam bukunya A Pattern Language [Alex77], ia menerangkan pola-pola yang terdapat di dalam berbagai rancangan arsitektur bangunan. Arti design pattern diterangkannya dalam kalimat berikut:
Each pattern describes a problem which occurs over and over again in our environment, and then describes the core of the solution to that problem, in such a way that you can use this solution a million times over, without ever doing it the same way twice [Alex77].