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].

Design patterns adalah unsur-unsur rancangan yang seringkali muncul pada berbagai sistem yang berbeda. Setiap kemunculan ini menguji pattern tersebut di berbagai situasi. Ada juga yang mengartikan istilah design pattern sebagai sebuah solusi untuk mengulang masalah design. Solusi ini telah dikembangkan, dicompile, dan disaring oleh programmer yang sebelumnya telah menghadapi masalah ini. Design pattern pada dasarnya merupakan petunjuk atau langkah-langkah dalam menyelesaikan solusi, mirip seperti halnya dengan algoritma. Sebagai contoh : jika kita ingin melakukan sebuah operasi pencarian pada sebuah daftar bilangan, kita tidak perlu menyelesaikan dengan solusi kita sendiri, terdapat beberapa algoritma yang menyediakan fungsi searching ini seperti binary tree searching.
Perbedaan antara design pattern dan algoritma adalah algoritma fokus pada implementasi solusi.  Sebuah algoritma biasanya me-list dari atas ke bawah menuju ke tahap akhir dengan statement yang terurut  untuk menghasilkan sebuah solusi. Sedangkan design pattern menginformasikan kepada developer apa yang harus dilakukan, bukan bagaimana cara melakukannya.
Dalam dunia programmasi, berbagai jenis problem identik yang sering dijumpai telah dikenal, di identifikasi dan lebih penting lagi telah di ditemukan pemecahannya. GOF atau Gang Of Four sebuah study group yang terdiri dari para praktisi informatika : Erich Gamma, Richard Helm, Ralph Johnson dan John Vlissides mengumpulkan problem-problem tersebut beserta metoda pemecahannya. Dengan mengkhususkan dalam hal pemograman berorientasi objek (OO), mereka membuat sebuah buku berjudul "Design Patterns: Elements of Reusable Object-Oriented Software" yang berisi solusi-solusi beserta penjelasannya. Kemudian dalam perkembangan selanjutnya solusi umum tersebut dikenal dengan nama Design Pattern.
Design Pattern ini merupakan pattern yang paling sederhana di antara pattern-pattern yang lain. Hanya membutuhkan satu kelas pada class diagram.
Design Pattern dalam perkembangannya mendapat antusiasme yang cukup besar oleh para praktisi programmasi. Karena design pattern sangat membantu dalam menghasilkan kode yang berkualitas, mudah di jaga dan mudah dikembangkan.
Untuk menguasai sebuah design pattern tertentu anda tidak perlu menghapal (baik diagram UML, maupun definisi formalnya). Tapi anda harus mengerti apa yang menjadi dasar penggunaannya, mengenali problemasi-problemasi apakah yang cocok dengan design pattern tersebut. Sebelum masuk dan terintegrasi dalam kode anda. Terlebih dahulu prinsip design pattern harus masuk dan terintegrasi di dalam otak anda.
Metoda pembelajaran yang di rencanakan adalah :
  • Definisi formal dari sebuah design pattern
  • Studi kasus penggunaan design pattern
  • Contoh dalam bentuk kode java
  • Pengembangan design pattern
  • Berdiskusi di forum yang disediakan disetiap artikel
  • Mengulang sendiri.



private Singleton() {

}



Definisi design pattern :
Singleton Pattern memastikan suatu kelas hanya terdapat satu instance dan kelas tersebut menyediakan akses ke instance itu.
Studi Kasus design pattern :
Ada banyak situasi dimana kita hanya membutuhkan satu objek. Misalnya, objek yang berfungsi sebagai driver dari suatu device seperti printer. Apa jadinya bila lebih dari satu? Pernah lihat pesan yang menampilkan drivers conflict. Yeah, sort of it.
Faktanya, banyak lagi tipe objek yang jika di-instance-kan lebih dari satu menyebabkan terjadinya masalah seperti penggunaan resource yang tidak normal, behavior program yang tidak benar, dan hasil yang tidak konsisten.
Contoh dalam bentuk kode :
public class Singleton {
    private static Singleton myInstance;

    // atribut yang lain
     
    private Singleton() {  
     
    }

    public static Singleton getInstance() {
        if (myInstance == null) {
            myInstance = new Singleton();
        }
        return myInstance;
    }

    // method yang lain
}

Penjelasan code :
Sekarang, pertanyaannya, apa artinya kode di atas?
Kenapa kode tersebut bisa memunculkan efek Singleton?
Dimulai dengan constructor berikut:
private constructor ? 

Di Java, kita buat objek baru minimal dengan menuliskan statement new SomeObject(). Nah, tanda kurung di belakang SomeObject menyatakan: sebelum membuat objek baru, kita panggil constructor-nya.
Bagaimana kalau kelas kita tidak punya constructor ? 
See, I don’t have a constructor, so I don’t need to invoke constructor. Meskipun kelas kita tidak mempunyai constructor, JVM menambahkan default-nya untuk kita:

public SomeObject() {

}

Jadi, kelas kita pasti ada constructor-nya, biarpun kita tidak menuliskannya secara eksplisit.
Sekarang, apa artinya modifier private pada constructor ?
Memang tidak seperti constructor kebanyakan yang menggunakan public. Private di sini berarti hanya kode yang sekelas dengan constructor yang dapat mengakses constructor ini. Tidak ada yang bisa mengaksesnya di luar kelas. Dengan kata lain, tidak ada yang bisa mengeksekusi statement “new” di luar kelas, karena kita tidak bisa mengakses constructor-nya.
Jadi, kelas Singleton di atas tidak bisa di-instance-kan ?
Bisa, asal di-instance-kan di dalam kelas Singleton.
Sekarang, kita telusuri lagi kelas Singleton, dan menemukan snippet kode seperti ini:

public static Singleton getInstance() {
        if (myInstance == null) {
            myInstance = new Singleton();
        }
        return myInstance;
    }


Method getInstance() di atas bertipe static. Dengan bertipe static menjadikan method tersebut hanya terdapat satu saja di antara instance-instance. Karena static method hidup di kelas, dan bukan di instance-instance. Berbeda dengan constructor yang private, method ini bersifat public sehingga bisa dipanggil di luar kelas Singleton. Dan karena bertipe static, method tersebut kita panggil dengan mengkualifikasikan nama kelas dan nama method seperti ini:
Singleton.getInstance()
Method getInstance() menyediakan cara bagi kita untuk meng-instance-kan kelas Singleton dan mengembalikan instance tersebut.
Jika myInstance null, artinya kita belum membuat instance. Kemudian, kita meng-instance-kan Singleton melalui private constructor-nya dan meng-assign instance ini ke myInstance. Ini bisa dilakukan karena kita meng-instance-kan di dalam kelas Singleton. Atribut myInstance ini bertipe static juga, karena instance kita merupakan satu-satunya instance kelas Singleton.
Jika myInstance tidak null, artinya kita sudah mempunyai instance, dan instance tersebut yang akan dikembalikan ke kita.
Jadi, kita masih bisa membuat instance dari kelas Singleton. Tapi, hanya satu. Tidak lebih! Karena itulah yang kita harapkan dari Singleton pattern ini.

0 komentar to “Pengenalan Design Pattern”

Posting Komentar