Entries Categorized as 'Design Pattern'

Perlakuan Tak Pantas Terhadap JSP

Date April 14, 2006

Sambil menunggu praktikan menyiapkan pekerjaannya untuk didemokan ke saya, tadi malam di lab NCC, saya tertarik untuk membaca buku bahasa Indonesia yang membahas mengenai soal Java Server Pages (JSP). Untuk kesekian kalinya, saya amat kecewa dengan buku-buku terbitan berbahasa Indonesia dan saya anggap tidak layak untuk dijadikan referensi.

Java dan seluruh keluarganya adalah bahasa-bahasa yang konsep Object Oriented-nya sangat mapan dan matang. Sehingga segala buku penuntun tentang keluarga ini juga harus menerapkan paradigma ini. Meskipun Java Server Pages, web-scripting keluarga Java, bisa bertindak sebagai scriptlet yang melakukan On the fly HTML creation, tidak berarti dia harus diperlakukan seperti web scripting biasa seperti PHP! Jika demikian, JSP tidak ada bedanya dengan PHP.

Perlakuan seperti PHP ini, maksud saya, adalah penyisipan semua kode JSP pada file HTML. Semua, termasuk bussiness logic, akses database, dan presentasi dicampur jadi satu. Padahal sejak awal, JSP sudah bisa memisahkan bussiness logic dan presentasi dengan menggunakan JavaBean. Segala hal mengenai bussiness logic dituliskan dalam class yang berbeda dan bertindak sebagai pustaka dan diambil dengan menggunakan objek JavaBean yang melukiskan objek yang sedang diolah.

Ah, masalah sepele seperti ini saja kenapa harus diributkan? Alasannya, karena buku-buku tersebut ditujukan untuk pemula. Artinya, buku-buku itu memberikan fondasi keilmuan yang akan terus dipakai menjadi kebiasaan hingga tingkat mahir nanti. Tidak seharusnya buku-buku itu memberikan konsep yang asal jalan saja. Jika fondasinya sudah salah dan lemah, maka bangunannya pun akan bermasalah kelak. JSP memiliki framework yang hebat seperti Java Server Faces (JSF), Struts, Spring, dll yang juga berkonsep object oriented. Mustahil kita bisa menguasai framework tersebut tanpa didukung fondasi tentang JSP dengan benar.

Sebagian besar, buku-buku karya pengarang Indonesia berisi konsep yang sangat dangkal dan asal jadi tanpa menyentuh sisi keilmuannya sama sekali. Sepertinya, pengarang-pengarang tersebut selalu bernafsu membuat buku teknologi yang sedang ngetren secepat-cepatnya. Jika pengarang mempelajari konsep teknologi secara mendalam untuk menghasilkan buku yang berkualitas bagus, mereka akan kehabisan angin tren sehingga bukunya pun menjadi tidak laku, atau tidak booming. Prinsipnya, siapa paling cepat mengeluarkan buku teknologi terbaru, dialah yang akan menjadi raja. Betapa menyedihkan! Apakah ini bukan pembodohan namanya?

Cobalah perhatikan perbedaan buku terbitan Indonesia dengan buku terbitan Pretince Hall atau Mc-Graw Hill atau O’Reilly. Betapa jauh jarak kualitasnya. Dilihat secara sepintas dari jumlah halamannya pun sudah terlihat mana yang lebih berkualitas. Jika Anda ingin konsep keilmuan yang benar-benar matang, bacalah buku textbook berbahasa Inggris. Lebih sulit dimengerti memang, tapi ilmu yang akan Anda dapatkan jauh-jauh lebih dari yang Anda harapkan.

Proteksi Variabel Field pada Objek Java (1)

Date April 9, 2006

Design Pattern, atau dikenal juga dengan Refactoring, adalah salah satu cabang ilmu komputer (Software Design) yang membuat code kita lebih mapan, mudah ditelusuri, mudah dibaca, dan reusable. Nah, kali ini aku akan nulis yang agak berat, namun tingkatannya cukup pemula bagi programmer/mahasiswa yang baru saja masuk ke dunia Objek Oriented Programming, khususnya Java.

Enkapsulasi/Pembungkusan Objek pada Java direpresentasikan dalam bentuk class-class. Sedangkan semua properti objek dinyatakan dalam method dan field (variabel dalam class). Misalnya,

public class MyClass {

   private int myField1 = 0;

   public double mySecondField = 0;

   private void thisIsPrivateMethod( int parameters ) {

      // do something here…

   }

   public int getComputation() {

   // how to get some value from outer class…

   }

}

Proteksi data dalam sebuah class dinyatakan dalam sintaks public, private, dan default. Public artinya suatu data dalam class dapat diakses dan dimodifikasi dari luar class. Private berarti data sama sekali tidak dapat terlihat dan tidak dapat diubah dari luar class. Data ini hanya terlihat oleh class itu sendiri. Default artinya, data hanya bisa dilihat oleh class-class yang memiliki package yang sama (Aduh, opo meneh package iku?).

Oke, sekarang kita bahas package. Dalam dunia coding, penamaan objek dengan nama yang sama persis seringkali terjadi. Bagaimana satu objek dengan objek yang lain yang memiliki nama yang sama tetap dapat dibedakan? Java menyelesaikannya dengan solusi yang cerdas: package. Package membungkus objek-objek (class-class) dalam bundel yang sama sehingga, objek dengan nama sama dapat dibedakan dengan memberikan nama package yang berbeda. Misalnya, java.awt, javax.swing, com.mysql.jdbc, dan nama-nama lainnya. Tentu saja, pemberian nama yang sama dalam package yang sama tidak diperkenankan.

[bersambung ke JavaBean (2)]

Java Bean (2)

Date April 9, 2006

JavaBean sebenarnya hanyalah sebuah class yang hanya terdiri dari beberapa field private dan dengan method setter untuk menset field dari luar class dan getter untuk mendapatkan nilai dari field. Adanya JavaBean memudahkan kita untuk melakukan refactoring karena JavaBean sebenarnya adalah representasi semua objek apapun di dunia ini. Misalnya,

public class MyJavaBean {

   private int myField1 = 0;

   private double mySecondField = 0;

   // getter

   public int getMyField1() {

      return this.myField1;

   }

   public double getMySecondField() {

      return this.mySecondField;

   }

   // setter

   public void setMyField1( int val ) {

      this.myField1 = val;

   }

   public void setMySecondField( double val ) {

      this.mySecondField = val;

   }

}

Ciri utama dari JavaBean adalah method-method-nya yang selalu diawali dengan kata get/set diikuti nama field dengan huruf pertama dari nama field adalah huruf besar. Lihat caraku menulis di contoh di atas. Ada field bernama myField1, maka setter dan getter-nya adalah setMyField1 dan getMyField1.

Nah, sampai di sini tentunya pertanyaannya menjadi begini: Jika field bertipe private, yang artinya tidak bisa diakses dari luar class, kenapa harus ada method getter dan setter yang bertipe public, yang akhirnya class luar bisa memodifikasi lewat dua method ini? Kenapa tidak field-nya saja yang diberi proteksi public? Toh sama saja kan akhirnya?

Pertanyaan dan argumen di atas memang sangat benar. Tapi di sinilah konsep design pattern itu! Dengan membuat field private dengan dua setter/getter public, kita tidak dapat sembarangan mengubah-ubah isi objek dari luar dengan statement namaClass.namaField = 2; tetapi harus melalui sebuah mekanisme yang mudah terlihat. Dengan menjadikan field tersebut public, kita benar-benar kehilangan konsep object oriented-nya (Properti suatu objek hanya dapat diubah melalui method-nya). Dengan mekanisme yang jelas, maka kode program akan lebih terbaca, lebih mudah ditelusuri, dan terkonsep dengan baik. That’s! inti dari sebuah Design Pattern. (*)

Curhat: Sori yah, ngomongnya bikin banyak orang nggak nyambung, soalnya lagi be-te banget.. program TA gw nggak jalan-jalan