Selasa, 10 Juli 2012

Modul 10 - Behavioral Patterns (Template Method, Visitor)


10.1. Template Method Pattern
Tujuan dari template method adalah:
§  Menggambarkan kerangka algoritma dalam sebuah operasi sehingga meminimalisir beberapa langkah subclass
§  Subclasss dapat mendefinisikan algoritma tertentu tanpa harus mengubah struktur algoritmanya.
Method template pattern mendefinisikan kerangka program algoritma. Satu atau lebih dari langkah-langkah algoritma dapat diganti oleh subclass yang berbeda untuk memungkinkan perilaku sambil memastikan bahwa algoritma menyeluruh masih diikuti.
Dalam pemrograman berorientasi obyek, pertama kelas yang dibuat yang menyediakan langkah-langkah dasar dari desain algoritma. Langkah-langkah ini diimplementasikan dengan menggunakan metode abstrak. Kemudian, subclass mengubah metode abstrak untuk melaksanakan tindakan nyata. Dengan demikian, algoritma umum disimpan di satu tempat namun langkah-langkah konkret dapat diubah oleh subclass.

Kamis, 21 Juni 2012

Modul 9 - Behavioral Patterns (State, Strategy)

9.1. State Pattern
State pattern merupakan salah satu design pattern yang tergolong ke dalam behavioral pattern. State pattern muncul akibat adanya kondisi-kondisi (states) yang muncul pada saat pembuatan perangkat lunak. Pattern ini mengijinkan state transition logic untuk disatukan dengan sebuah state object daripada berada dalam kondisional atau switch statement. Pada tugas akhir kali ini, dibuat sebuah perangkat lunak yang mengimplementasikan state pattern untuk menyelesaikan sebuah kasus yang memiliki beberapa kondisi. Untuk mengevaluasi state pattern, dilakukan pengujian serta perhitungan terhadap object-oriented metrics. Sedangkan untuk mengetahui kelebihan dan kekurangan yang ada pada state pattern, akan dibandingkan hasil perhitungan object-oriented metrics perangkat lunak yang menerapkan state pattern dengan perangkat lunak yang tidak menerapkan state pattern untuk sebuah kasus yang serupa. Berdasarkan hasil analisis dan pengujian, jika dilihat dari perhitungan object-oriented metrics, perangkat lunak dengan state pattern memiliki kompleksitas yang lebih tinggi dan membutuhkan usaha yang lebih besar ketika dilakukan maintenance dibandingkan perangkat lunak tanpa state pattern. Namun, jika dilihat dari penanggulangan state yang ada, perangkat lunak dengan state pattern memiliki cara penanggulangan state yang lebih optimal dibandingkan perangkat lunak tanpa state pattern.
Rabu, 20 Juni 2012

Modul 8 - Behavioral Patterns (Mementto, Observer)

8.1. Momento Pattern
Maksud dari pola ini adalah untuk menangkap keadaan internal suatu objek tanpa melanggar enkapsulasi dan sehingga memberikan rata-rata untuk mengembalikan objek ke keadaan awal bila diperlukan. Kadang-kadang perlu untuk menangkap keadaan internal suatu objek pada titik tertentu dan memiliki kemampuan untuk mengembalikan objek untuk menyatakan bahwa di kemudian waktu. Kasus seperti ini berguna jika terjadi kesalahan atau kegagalan. Pertimbangkan kasus suatu objek kalkulator dengan operasi undo seperti kalkulator hanya dapat mempertahankan daftar semua operasi sebelumnya yang telah dilakukan dan dengan demikian akan mampu mengembalikan perhitungan sebelumnya telah dilakukan. Hal ini akan menyebabkan objek kalkulator untuk menjadi lebih besar, lebih kompleks, dan kelas berat, sebagai objek kalkulator akan harus menyediakan tambahan membatalkan fungsi dan harus memelihara daftar semua operasi sebelumnya. Fungsi ini dapat pindah dari kelas kalkulator, sehingga eksternal (sebut saja membatalkan kelas manajer) dapat mengumpulkan keadaan internal kalkulator dan menyimpannya. Namun menyediakan akses eksplisit untuk setiap variabel keadaan kalkulator kepada manajer restore akan tidak praktis dan akan melanggar prinsip enkapsulasi.
Kamis, 14 Juni 2012

Modul 7 - Behavioral Patterns (Interpreter, Iterator, Mediator)


Modul  7 - Behavioral Patterns (Interpreter, Iterator, Mediator)
Pada Modul ke 7 ini kita akan membahas tentang pola Behavioral pattern yaitu kelas interpreter, iterator, mediator pattern.
7.1. Interpreter Pattern
Sebuah masalah kelas terjadi berulang kali dalam sebuah domain yang jelas dan dipahami dengan baik. Jika domain yang ditandai dengan "bahasa", maka masalah bisa dengan mudah dipecahkan dengan "mesin" interpretasi. Pola Interpreter mendefinisikan bahasa domain (yaitu karakterisasi masalah) sebagai tata bahasa bahasa yang sederhana, yang mewakili aturan domain sebagai kalimat bahasa, dan menafsirkan kalimat-kalimat ini untuk memecahkan masalah. Pola ini menggunakan kelas untuk mewakili setiap aturan tata bahasa. Dan karena tata bahasa biasanya hirarkis dalam struktur, hirarki pewarisan kelas aturan memetakan dengan baik. Kelas dasar abstrak menentukan metode interpret(). Setiap subclass beton mengimplementasikan interpret() dengan menerima (sebagai argumen) kondisi saat ini dari aliran bahasa, dan menambahkan kontribusinya terhadap proses pemecahan masalah.
Interpreter menunjukkan pemodelan domain dengan tata bahasa rekursif. Setiap aturan dalam tata bahasa yang bersangkutan merupakan 'komposit' (aturan bahwa referensi aturan lain) atau terminal (simpul daun dalam struktur pohon). Juru bergantung pada traversal rekursif dari pola Komposit untuk menafsirkan 'kalimat' itu diminta untuk diproses.
Selasa, 12 Juni 2012

Modul 6 - Behavioral Patterns (Chain of Responbility, Command Pattern)


6.1.Chain of responsibility
Dalam menulis sebuah aplikasi dalam bentuk apapun, sering terjadi bahwa peristiwa yang dihasilkan oleh satu objek perlu ditangani oleh objek yang satu lagi. Dan, untuk membuat pekerjaan lebih sulit lagi, ketika terjadi penolakan akses ke objek yang perlu menangani hal tersebut. Chain of responsibility pattern memungkinkan objek untuk mengirim perintah tanpa tahu apa objek akan menerima dan menanganinya. Permintaan yang dikirim dari satu objek ke objek lainnya membuat bagian rantai dan setiap objek dalam rantai ini dapat menangani perintah, menyebarkannya atau melakukan keduanya.
Berikut diagram UML untuk pola Chain of Responsibility:
Dalam diagram di atas beberapa penjelasan diperlukan pada apa peran dari setiap kelas:
Senin, 07 Mei 2012

Modul 5 - Structural Patterns (Flyweight Pattern, Proxy Pattern)


5.1. Flyweight Pattern
Flyweight Pattern adalah sebuah perangkat lunak desain pattern.  Flyweight pattern adalah sebuah objek yang meminimalkan penggunaan memori dengan berbagi data sebanyak mungkin dengan objek sejenis, yang merupakan cara untuk menggunakan benda-benda dalam jumlah besar ketika representasi diulang sederhana akan menggunakan jumlah yang dapat diterima dari memori. Seringkali beberapa bagian dari negara objek dapat dibagi, dan itu adalah praktek umum untuk menahan mereka dalam struktur data eksternal dan meneruskannya ke objek kelas flyweight sementara ketika mereka digunakan.
Sebuah contoh klasik dari penggunaan pola flyweight adalah struktur data untuk representasi grafis dari karakter dalam pengolah kata. Mungkin diinginkan untuk memiliki, untuk setiap karakter dalam dokumen, sebuah flyweight objek yang mengandung outline font, metrik font, dan data format lain, tapi ini akan berjumlah ratusan atau ribuan byte untuk setiap karakter. Sebaliknya, untuk setiap karakter mungkin ada referensi ke objek mesin flyweight kelas flyweight bersama oleh setiap contoh karakter yang sama dalam dokumen, hanya posisi masing-masing karakter (dalam dokumen dan / atau halaman) akan perlu disimpan secara internal.
Maksud dari pola ini adalah dengan menggunakan berbagi untuk mendukung sejumlah besar objek yang memiliki bagian dari keadaan internal mereka yang sama di mana bagian lain dapat bervariasi.
Kamis, 26 April 2012

Modul 4 - Structural Patterns (Decorator Pattern, Fa├žade Pattern)


4.1. Decorator Patterns
                Maksud dari pola ini adalah dengan menambahkan tanggung jawab tambahan secara dinamis untuk objek. Memperluas fungsionalitas obyek bisa dilakukan secara statis (pada saat kompilasi) dengan menggunakan warisan namun mungkin diperlukan untuk memperluas fungsi suatu objek secara dinamis (saat runtime) sebagai objek yang digunakan. Pola dekorator berlaku ketika ada kebutuhan untuk secara dinamis menambahkan serta menghapus tanggung jawab ke kelas, dan ketika subclassing tidak mungkin karena jumlah besar dari subclass yang dapat terjadi. Tujuan dari decorator pattern adalah menciptakan suatu mata rantai objek,  dimana setiap objek mempunyai object responsible  pada fungsi objek berikutnya. Konteks dari pola ini adalah diinginkan untuk memperkaya behaviour dari suatu class, objek komponen  terdekorasi bisa digunakan sama seperti  objek komponen biasa, tanggung jawab dari proses dekorasi tidak diinginkan  ada pada class  komponen, kemungkinan ada proses dekorasi yang ditambahkan di masa depan yang tak bisa diperkirakan dan harus diantisipasi.
Tujuan Pattern ini adalah  menciptakan suatu mata rantai object, dimana setiap object mempunyai objects responsible pada fungsi objek berikutnya.( The  Decorator  attaches additional responsibilities to an object dynamically.)

Modul 3 - Structural Patterns (Adapter, Bridge, Composite)



3.1.  Adapter Pattern
Menurut Gang of Four, Adapter pattern 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.
Class Diagram

Selasa, 24 April 2012

Modul 2 Creational Pattern (Prototype, Singleton)

2.1. Prototype Pattern
Prototype Pattern adalah sebuah design pattern kreatif yang digunakan dalam pengembangan perangkat lunak. Jenis object untuk membuat object baru ditentukan oleh prototype contoh. Object di kloning untuk menghasilkan object baru. Prototype pattern masuk dalam creational pattern pola ini merupakan pola yang paling mudah.
Pattern ini digunakan untuk:
·       Menghindari subclass dari object kreator dalam aplikasi klien, tidak seperti abstract factory pattern.
·       Menghindari biaya yang melekat (inherent cost) dari object baru yang dibuat sesuai standar (misalnya, dengan menggunakan keyword ‘new‘), saat biaya itu cukup mahal untuk aplikasi tertentu.
Untuk mengimplementasikan pattern, deklarasikan sebuah abstract base class yang menentukan sebuah pure virtual clone () method. Setiap class yang memerlukan sebuah “polymorphic constructor”, maka kemampuan itu berasal dari class abstract base dirinya sendiri, dan mengimplementasikan operasi clone ().
Klien, bukanya menulis kode yang meminta operator “new” pada sebuah hard-coded class name, memanggil method clone () pada prototipe, memanggil sebuah factory method dengan sebuah parameter tertentu yang menunjuk particular concrete  kelas turunan yang diinginkan, atau mengacu pada method clone () melalui beberapa mekanisme yang disediakan oleh design pattern lain.

Modul 1 - Creational Pattern (Abstract Factory Pattern, Builder Pattern, Factory Method)


1.1. Abstract Factory Pattern
Abstract Factory Pattern  merupakan salah satu jenis Creational Pattern yang menangani mekanisme penciptaan obyek secara adaptif. Abstract Factory Pattern memberikan kemampuan pengenkapsulasian sekelompok factory dimana masing-masing factory memiliki “motif” khasnya. Abstract Factory Pattern 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 Abstract Factory Pattern dapat mencegah coupling problem yang pasti terjadi apabila penciptaan obyek memakai operator new dalam bahasa OOP. Abstract Factory Pattern menyediakan sebuah interface untuk membangun family yang berkaitan atau bergantung pada objek tanpa menspesifikasikan kelas nyata nya.
Prinsip dasar dari Abstract Factory pattern adalah:
1.    Terdapat kelas Abstract Factory (sebuah interface), dimana Abstract Factory merupakan sebuah interface yang mendefinisikan bagaimana cara untuk, membuat objek dari Abstract Product. Intent dari Abstract Factroy adalah menciptakan family dari objek yang berkaitan tanpa harus bergantung pada concrete class-nya.
2.    Terdapat kelas Concrete Factory, dimana kelas ini akan mengimplementasikan semua metode pada AbstractFactory untuk membuat objek dari concrete Product.
3.    Terdapat kelas Abstract Product, dimana kelas ini merupakan sebuah interface untuk  mendefinisikan tipe dari masing-masing objek produk.
4.    Terdapat kelas Product, merupakan kelas yang akan mengimplementasikan semua metode pada AbstractProduct.
5.    Terdapat Client, adalah kelas yang akan terhubung dengan kelas Abstrac tFactory dan Abstract Product.
Berikut ini adalah contoh program sederhana yang mengimplementasikan konsep factory pattern. Program ini sebenarnya merupakan tugas kelas yang diberikan oleh dosen desain pattern saya, saya sengaja mempublishkan hasil tugas ini agar bisa membantu teman-teman yang juga belajar tentang konsep factori pattern.

Pengertian Design Pattern



Design Pattern adalah sebuah solusi untuk menyelesaikan masalah umum yang sering di temui dan dihadapi, yang membentuk sebuah pola (pattern) tertentu dalam membuat sebuah program. Pattern adalah bagaimana mendesain kelas dan bagaimana interaksi yang terjadi antar kelas tersebut sehingga kelas yang kita bangun bisa lebih elegan dan reusable.
Ada beberapa  pattern yang populer saat ini yang diciptakan oleh GoF (Gang of Four) yaitu Abstract Factory, Builder, Factory Method, Prototype, Singleton, Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy, Chain of Responbility, Command, Interpreter, Iterator, Mediator, Mementto, Observer, State, Strategy, Template Method, Visitor.
Secara singkat, design pattern adalah sebuah solusi untuk mengulang masalah design. Solusi ini telah dikembangkan, dikompile, dan disaring oleh programmer yang sebelumnya telah  menghadapi masalah ini. Sebuah design pattern adalah salah satu jenis petunjuk yang menggunakan tipe "Jika Anda memiliki masalah ini, maka lakukan ini." Hal tersebut serupa dengan sebuah algoritma : sebagai contoh, jika Anda ingin melakukan sebuah operasi pencarian pada sebuah daftar, Anda tidak perlu menyelesaikan dengan solusi Anda sendiri, terdapat beberapa algoritma yang  menyediakan  fungsi sorting ini seperti pencarian biner. Perbedaan antara sebuah Design pattern dan sebuah  algoritma adalah bahwa algoritma fokus pada implementasi solusi, sebuah algoritma biasanya mendaftar dari atas ke bawah menuju ke tahap akhir dari action-action yang terurut dimana yang dibutuhkan untuk menghasilkan sebuah solusi. Sebuah pattern memusatkan untuk menghasilkan beberapa Design.