Design Pattern
Design Pattern
Abstract Design Pattern dalam Rekayasa Perangkat Lunak dan Object Oriented Programming merupakan sebuah solusi terhadap masalah pemrograman umum yang sering dihadapi serta berulang kali. Pattern adalah bagaimana mendesain class dan bagaimana interaksi yang terjadi antar class tersebut sehingga class yang kita bangun bisa lebih elegan dan reusable (dapat dipakai berulang-ulang).
Pendahuluan What is a Design Pattern? Christopher le!ander says" #$ach pattern describes a problem %hich occurs o&er and o&er again in our en&ironment" and then describes the core o' the solution to that problem" in such a %ay that you can use this solution a million times o&er" %ithout e&er doing it the same %ay t%ice# ( )*+,,-. Setiap pola mendeskripsikan sebuah permasalahan yang terus muncul dalam lingkungan kita, dan kemudian mendeskripsikan inti solusi dari permasalahan tersebut sedemikian rupa sehingga Anda bisa menggunakan solusi ini sejuta kali tanpa harus melakukannya dengan cara yang sama dua kali .
Design Pattern adalah sebuah istilah !"nglish# dalam $ekayasa %erangkat &unak !Software "ngineering# yang mengacu kepada solusi umum yang dapat digunakan secara berulang kali untuk menyelesaikan masalah' masalah umum yang ditemukan dalam disain perangkat lunak. Sebuah design pattern tidak berbentuk solusi akhir yang dapat langsung diterjemahkan menjadi kode program. Design pattern merupakan penjelasan atau template yang menunjukkan bagaimana cara menyelesaikan sebuah masalah yang kemudian dapat digunakan di berbagai situasi yang berbeda'beda. Design pattern untuk object-oriented biasanya menunjukkan relasi dan interaksi antar kelas dan objek, tanpa menjelaskan kelas dan objek akhir yang terlibat dalam sebuah aplikasi. Algoritma biasanya tidak disebut sebagai design pattern, karena algoritma akan menjadi solusi masalah komputasi dan bukan masalah disain. Model dan Pola Rancang (agaimana cara seseorang mengolah informasi dalam otaknya) (agaimana cara Anda membaca tulisan ini) (ahasa *ndonesia dibaca dengan cara dieja. +uruf ( dan A, dibaca ,(A,, huruf - dan A, dibaca -A , demikian seterusnya. -oba kita lihat kata ,bahasa,. Apakah otak Kita sewaktu melihat kata ,bahasa, akan mengeja keenam huruf tersebut baru kemudian bisa diambil kesimpulan, bahwa keenam huruf b'a'h'a's'a itu harus dibaca sebagai ,bahasa,. Kita yang sudah terbiasa membaca, mengenali kata ,bahasa, dari bentuk, bukan dieja, kecuali untuk anak'anak sekolah dasar tingkat awal. .ika otak harus mengeja setiap kata yang dibaca, betapa meletihkan pekerjaan tersebut. /etapi otak tidak menggunakan cara yang melelahkan tersebut, melainkan dengan cara mencocokkan pola ! pattern matching#. /iap kata digabungkan hingga menjadi kalimat yang dapat dipahami karena memberi makna, sehingga sejumlah perkataan dalam bahasa yang cuma ada beberapa puluh ribu kata, tidak sulit bagi seseorang untuk mengumpulkan pola'pola dalam otaknya. -ara yang sama juga dilakukan oleh pembaca huruf kanji /ionghoa, yang mempunyai puluhan ribu bentuk berbeda. Seseorang mampu mengenali ribuan jenis huruf kanji yang berbeda itu bukanlah keajaiban, tetapi merupakan kemampuan dasar dari otak manusia. 0mumnya setiap orang akan mampu melakukannya jika memang berniat mempelajarinya.
%engenalan pola memungkinkan otak manusia untuk menangani banyak sekali masukan dari alat indera kita. /anpa pengenalan pola, manusia lumpuh. "dward de (ono meneliti tentang mekanisme berpikir dan menyimpulkan bahwa12 #)' the brain %ere not a pattern-making system" %e %ould not be able to read" %rite" or talk. $&ery acti&ity" like getting dressed in the morning" %ould be a major time consuming task. *port %ould be impossible - 'or e!ample" a gol'er %ould ha&e consciously to direct e&ery part o' e&ery s%ing...# 3 .ika otak bukan sistem pemetaan pola, kita tidak akan mampu untuk membaca, menulis atau berbicara. Setiap kegiatan seperti berpakaian di pagi hari, akan menjadi kegiatan yang berat dan melelahkan. Sport tidak mungkin dilakukan, misalnya, seorang pemain golf harus dengan sadar menghitung setiap ayunan yang dia lakukan. Kali ini kita tidak akan membicarakan mekanisme berpikir lebih lanjut, tetapi contoh penggunaan pola dalam mekanisme berpikir merupakan sebuah contoh yang bagus untuk memperlihatkan bagaimana cara pengenalan pola memungkinkan effisiensi di bidang lain. Salah satu dorongan terbesar pada perkembangan teknologi informasi dalam dua dekade terakhir tahun terakhir ini, adalah implementasi dari cara pemrograman berbasis pola. Secara luas, sistem semikian mendasarkan pada (ahasa %ola !Pattern Language#. *mplementasi %attern &anguage bukan sekedar pada cara pengembangan produk, tetapi juga sudah masuk dalam spesifikasi produk itu sendiri sendiri. 4alaupun teknologi informasi dan electical engineering saat kini merupakan bidang'bidang yang paling banyak menggunakan dasar pemikiran berbasis pola, tetapi yang pertama kali merumuskannya secara komprehensif bukan seseorang yang berasal dari latar belakang teknologi informasi atau enjinering elektrical, tetapi seorang arsitek bangunan yang merancang pembangunan kota. 5amanya -hristopher Ale6ander. (ersama dengan rekan'rekannya, dia menulis buku yang ternama dan menjadi karya klasik di bidang arsitektur, dan digunakan dalam banyak bidang lain, yaitu , Pattern Language, pada tahun 17889.
"dward de (ono, ,* am $ight, :ou Are 4rong2 ;rom /his to the 5ew $enaisance,, 1771.
2
(uku tersebut diatas merupakan sumbangan buat bidang arsitektur, tetapi pengaruhnya di Software "ngineering terlihat jauh lebih besar daripada pengaruhnya di bidang arsitektur. (uku itu kemudian diterjemahkan dalam bahasa Software "ngineering oleh /he 1ang o' 2our pada tahun 177<, dengan judul ,Design Patterns. $lements o' Reuseable Object Oriented *o't%are,=. Ada banyak >esign %atterns yang sudah diakui kemampuannya, diterima dan diaplikasikan oleh banyak praktisi. >esign %atterns yang cukup populer adalah yang diperkenalkan /he ?ang of ;our !?o;# ' "rich ?amma, $ichard +elm, $alph .ohnson dan .ohn @lissides. >alam /he ?ang of ;our !?o;# terdapat 9= %attern yang dibagi menjadi = kelompok besar, sebagai berikut 2 Creational Patterns (cara class/object di-inisiasi). 1. Abstract ;actory !-reates an instance of seAeral families of classes# 9. (uilder !Separates object construction from its representation# =. ;actory Method !-reates an instance of seAeral deriAed classes# B. %rototype !A fully initialized instance to be copied or cloned# <. Singleton !A class of which only a single instance can e6ist# Structural Patterns !stru tur/relasi antar object/class) 1. Adapter !Match interfaces of different classes# 9. (ridge !Separates an objectCs interface from its implementation# =. -omposite !A tree structure of simple and composite objects# B. >ecorator !Add responsibilities to objects dynamically# <. ;acade !A single class that represents an entire subsystem# D. ;lyweight !A fine'grained instance used for efficient sharing# 8. %ro6y !An object representing another object# !eha"ioral Patterns (tingkah laku atau fungsi dari classEobject.# 1. -hain of $esponbility !A way of passing a reFuest between a chain of objects# 9. -ommand !"ncapsulate a command reFuest as an object# =. *nterpreter !A way to include language elements in a program# B. *terator !SeFuentially access the elements of a collection# <. Mediator !>efines simplified communication between classes# D. Mementto !-apture and restore an objectGs internal state# 8. HbserAer !A way of notifying change to a number of classes#
3
"rich ?amma, $ichard +elm, $alph .ohnson, .ohn @lissides, , Design Patterns. $lements o' Reusable Object-Oriented *o't%are,, 177<.
I. State !Alter an objectGs behaAior when its state changes# 7. Strategy !"ncapsulates an algorithm inside a class# 1J. /emplate Method !>efer the e6act steps of an algorithm to a subclass# 11. @isitor !>efines a new operation to a class without change# Secara singkatnya, design pattern adalah best practice pola'pola desain kelas pada perancangan berorientasi objek. >engan mengaplikasikan design pattern ini, desain sebuah aplikasi dapat menjadi dinamis terhadap perubahan. (erikut ini beberapa contoh design pattern yang umum digunakan2 a. Creational (erurusan dengan pembuatan objek !object creation#. Pattern jenis ini berkaitan dengan pembuatan objek. #. Singleton Kelas yang hanya dapat diinstansiasi menjadi 1 objek. Setiap yang membutuhkan layanan kelas ini akan mendapatkan instans objek yang sama. Kelas ini memiliki konstruktor yang hak aksesnya adalah priAate !atau protected dalam beberapa kasus#. Konstruktor hanya dapat dipanggil dari dalam kelas. Hbjek lain yang membutuhkan kelas ini dapat meminta instans kelas dengan memanggil method statik GetInstance. -ontoh kelas !dalam bahasa jaAa# yang merupakan Singleton2
class Singleton { private static Singleton instance = null; // konstrukto yang modifiernya private private Singleton { } public static Singleton GetInstance() { if (instance == null) { instance = ne Singleton(); } return instance; } }
9. $actor% Design pattern ini memisahkan kode untuk membuat objek, sehingga ketika jenis objek yang dapat dibuat bertambah, kode yang berubah hanya kode pembuatan objeknya saja. b. !eha"ioral Design pattern yang terkait dengan kelakuan !beha&ior#. #. &bser"er Mempertegas ketergantungan hubungan one to many antara objek'objek agar ketika satu ojek merubah keadaan !status#, maka semua objek yang memiliki ketergantungan melaporkan dan meng'update secara otomatis.
?ambar HbserAer 0M& class diagram 9. Strateg% (erguna untuk memecah algoritma menjadi bagian'bagian kecil, yang dapat diganti dengan mudah.
c.
Structural Pattern yang masuk jenis ini adalah yang terkait dengan masalah struktural. 1. Ada'ter %attern untuk menyesuaikan interface dari sebuah kelas menjadi interface yang lain. 9. $acade %attern untuk memisahkan kode rumit.
Selain design pattern yang disebutkan di atas, masih banyak lagi design pattern lainnya yang tidak sepopuler design pattern-design pattern di atas. Pola Rancang (Design Pattern) Seperti yang disampaikan -hristopher Ale6ander2 Setiap pola mendeskripsikan sebuah permasalahan yang terus muncul dalam lingkungan kita, dan kemudian mendeskripsikan inti solusi dari permasalahan tersebut sedemikian rupa sehingga Anda bisa menggunakan solusi ini sejuta kali tanpa harus melakukannya dengan cara yang sama dua kali. Sederhana sekali, dan sebenarnya tanpa Ale6ander2 katakan sekalipun, semua orang juga sudah tahu tanpa disadari. $oda bulat sudah diciptakan dari jaman dahulu kala, lalu rancangan itu dipergunakan dimana'mana dalam banyak rancangan lain. Seorang perancang membuat satu pintu, lalu dipakai dimana'mana pada banyak rancangan. Anak'anak kecil juga merupakan ahli dalam bidang pola !pattern#. Mereka bisa merangkai mainan &ego sedemikian rupa sampai mencapai bentuk yang rumit, padahal awalnya hanya merupakan repetisi dari elemen'elemen sederhana. Ada yang merancang rumah dengan ukuran besar yang bisa dimasuki oleh manusia dari butir'butir kecil lego tersebut. Apa yang dikemukakan oleh -hristopher Ale6ander itu, sebenarnya tidak ada yang luar biasa. /etapi dia mengemukakan hal yang belum benar'benar disadari banyak orang sebagai satu fondasi penting dalam rancang bangun. Ale6ander juga membicarakan tentang Katalog %ola ! Pattern Catalog# yang tidak lain adalah pengorganisasian pola'pola yang ada. *tu juga sudah dilakukan orang sejak lama.
-oba Anda perhatikan perusahaan supplier, umumnya mereka menyediakan buku katalog produk'produk mereka. %erusahaan bahan bangunan, akan memberi kita katalog bahan'bahan bangunan. >alam katalog itu disusun bahan'bahan dan komponen'komponen secara teratur, misalnya bagian pintu, nanti ada bagian %egangan %intu yang terdiri dari bermacam'macam pegangan, bagian komponen dapur, dsb. Apa yang dimaksud dalam (ahasa %ola tentang Katalog %ola, adalah persis apa yang direpresentasikan oleh buku katalog itu. .adi apa susahnya) /idak ada... >imulai dengan pengetahuan bahwa pattern itu gampang, kita memulai e6plorasi kita dalam dunia pattern ini. /erkadang, cuma bahasa dan jargon' jargon yang bikin seseorang pusing, padahal konsep dibelakangnya sederhana sekali. Model "s Pattern 0mumnya kita lebih mengenal Model daripada %attern. *tu disebabkan Model adalah konsep yang sudah matang, dan dipelajari di banyak tempat. Kita mengenal pesawat model, yaitu pesawat dalam bentuk yang lebih kecil daripada ukuran sebenarnya. Ketika kontraktor ingin membangun sebuah gedung, dia membuat model gedung dalam ukuran kecil, sehingga para inAestor bisa mendapatkan gambaran tentang gedung yang ingin dibangun. %ara perancang pakaian menggunakan model untuk mempromosikan baju' baju rancangan mereka. .adi sebelum seorang wanita memutuskan membeli pakaian tersebut, lihatlah bagaimana pakaian itu dikenakan oleh sang model -atherine 4ilson, dan calon pembelipun membayangkan dirinya seperti -atherine 4ilson !walaupun mungkin dengan ukuran badan yang beda#. Model adalah abstraksi dari realitas. $ealitas di dunia dalam pandangan pertama terlihat seperti chaos, tak teratur. Model memfilter bagian'bagian yang tidak diperlukan untuk memperlihatkan kerangka bagian utama, dan menjadikannya sebagai pengganti dari realitas tersebut untuk diamati atau dimengerti. Misalnya, sebuah patung pualam dari seorang wanita di $oma. 4anita sebenarnya yang dibuat patung mempunyai banyak sekali bulu'bulu di kulit, bintik'bintik di muka, semua itu disepuh halus pada pualam, dan memperlihatkan wanita secara sempurna. /idak heran ada cerita pemahat patung :unani yang jatuh cinta pada patung yang diukirnya !%ygmalion#.
$umus'rumus dalam ilmu fisika merupakan model dari realitas juga, dan selalu berdasarkan asumsi'asumsi tertentu. %ara ekonom sering menggunakan kata ceteris paribus ketika mengemukakan sebuah model sederhana, yang berarti model itu berlaku jika semua hal lain dianggap sama !yang dalam realitas sebenarnya pasti berbeda#. %ola atau pattern itu terutama bukan abstraksi dari realitas. %attern lebih mengacu pada pengalaman !e!perience# berrealitas. %engalaman memperlihatkan adanya repetisi dari realitas. Suatu pattern selalu berulang !kalau tidak berulang, maka tidak lagi dinamakan sebagai pattern#. >ari pengalaman seorang tukang jahit, dia bisa mendapatkan bahwa pola'pola baju pelanggannya mempunyai bagian yang sering berulang. >ari pengalaman itu, dia bisa membuat pola standar, dan kemudian pola ini baru disesuaikan ke badan setiap orang ! customi3ation#. Setiap benda di dunia ini, jika dipotong terus menerus menjadi kecil'kecil, dan akan sampai saatnya ketika benda itu tidak bisa lagi dipotong tanpa menjadikan bagian' bagian potongan menjadi bahan lain. (agian terkecil itu kita sebut molekul. Setiap molekul dengan molekul lain membuat pola yang terus menerus berulang, dan dengan kemudian membuat benda dalam ukuran besar, dan pada akhirnya membentuk jagad raya. Kita melihat jagad raya begitu luas dan kompleks, tetapi sebenarnya semua itu hanyalah pengulangan pola' pola dari molekul'molekul sederhana. (esi)'ulan (aik Model maupun %attern, punya satu tujuan utama, yaitu mengatasi kompleksitas masalah. Model mengatasi kompleksitas masalah dengan memfilter hal'hal yang tidak signifikan untuk mendapatkan bagian yang terpenting yang bisa direpresentasikan. Sedangkan %attern mengatasi kompleksitas dengan mendapatkan repetisi E pengulangan dari pola'pola dasar. Model itu bersifat struktural, sedangkan %attern itu bersifat literal. >engan Model, kita melihat bagaimana komponen'komponen dalam model tersebut saling berhubungan secara struktural dalam membangun model tersebut. >engan %attern, kita melihat bagaimana pola'pola dasar saling melengkapi untuk membuat suatu gambaran yang lebih besar.
Kita menggunakan Model dan %attern untuk mengatasi kompleksitas dari realitas. %erpaduan antara model dan pattern, akan menghasilkan kekuatan ganda dalam mengatasi kompleksitas. Kita bisa mendapatkan 4odelling %ith Patterns, dan Patterns o' 4odels. Semua ini adalah usaha untuk meningkatkan kemampuan kita dalam mengatasi persoalan yang semakin lama semakin rumit. /idak ada yang menyangkal bahwa persoalan teknologi saat ini jauh lebih rumit daripada puluhan tahun lalu. /etapi banyak perancang dan ahli teknologi masa kini merasa bahwa tugas mereka malah semakin mudah, berkat digunakannya Model dan %attern. >ua konsep yang sebenarnya sederhana, tetapi mampu membuat pembedaan yang berarti.
Da*tar Pusta a+ http2EEale6budiyanto.web.idE9JJDEJ8E=JEintroducing'to'design'pattern.html, *ntroducing /o >esign %attern, Software "nginering Ale6 (udiyanto http2EEen.wikipedia.orgEwikiE>esignKpatternK!computerKscience# http2EEwww.dofactory.comE%atternsE%atterns.asp6, >esign %atterns in -L and @(.5"/ ' ?ang of ;our !?H;# http2EEwww.socineer.comEt6tEsains'patmodel.html, Model dan %ola $ancang, /he ?ang of ;our !?o;# "rich ?amma, $ichard +elm, $alph .ohnson, and .ohn @lissides. >esign %atterns2 "lements of $eusable Hbject'Hriented Software !*S(5 J'9J1'D==D1'9#
10