18 Februari 2012

Pemrograman Berorientasi Obyek: Enkapsulasi

Dalam post ini saya ingin membicarakan masalah sepeda motor. Ketika kita mengendarai sepeda motor, dan kita ingin berbelok ke arah kanan, kita tidak perlu memalingkan roda depan ke kanan dengan tangan kita sendiri, ada metode stang untuk melakukan hal itu. Atau jika kita ingin memperlambat laju sepeda motor, kita tidak perlu menekan roda dengan tangan untuk memperlambat putaran roda, ada metode pengereman untuk melakukan hal itu. Dua contoh peristiwa tadi merperlihatkan bahwa kita tidak perlu berhubungan langsung dengan komponen untuk menggunakan atau memberikan perintah kepada komponen tersebut. Perlindungan komponen terhadap akses langsung dari luar sistem bertujuan agar kerja dari keseluruhan sistem tidak terganggu. Perlindungan terhadap komponen, juga diterapkan dalam pemrograman berorientasi obyek yang disebut dengan enkapsulasi.

Dalam pemrograman berorientasi obyek, enkapsulasi adalah pembatasan akses dari luar terhadap elemen di dalam obyek atau class. Elemen yang dibatasi bisa berupa metode atau atribut. Seperti halnya pada sepeda motor, jika data penting pada class diisi sembarangan, class tersebut bisa mengalami error. Sebagai contoh, misalnya kita membuat class Kalender dan kita ingin mengisi data bulan. Jika bulan diwakili dengan angka, maka hanya angka 1-12 yang valid, jika diisi selain angka yang ditentukan, maka class Kalender akan menghasilkan data yang tidak valid. Atribut atau metode yang tidak diperbolehkan diakses dari luar class, pada deklarasinya menggunakan kata private.

Berikut ini adalah contoh penerapan enkapsulasi di sebuah program java.

class BulanKalender {
 // Membuat atribut yang tidak bisa diakses dari luar class
 private String namaBulan = "Data kosong";  
 private String namaBln = "Data kosong";
 
 // membuat metode untuk mengisi atribut
 // metode hanya bisa diakses dari dalam class
 private void setAngka(int angkaBulan) {
  if (angkaBulan == 1) {
   namaBulan = "Januari";
   namaBln = "Jan";
  }
  
  else if (angkaBulan == 2) {
   namaBulan = "Februari";
   namaBln = "Feb";
  }
  
  else if (angkaBulan == 3) {
   namaBulan = "Maret";
   namaBln = "Mar";
  }
  
  else if (angkaBulan == 4) {
   namaBulan = "April";
   namaBln = "Apr";
  }
  
  else if (angkaBulan == 5) {
   namaBulan = "Mei";
   namaBln = "Mei";
  }
  
  else if (angkaBulan == 6) {
   namaBulan = "Juni";
   namaBln = "Jun";
  }
  
  else if (angkaBulan == 7) {
   namaBulan = "Juli";
   namaBln = "Jul";
  }
  
  else if (angkaBulan == 8) {
   namaBulan = "Agustus";
   namaBln = "Agu";
  }
  
  else if (angkaBulan == 9) {
   namaBulan = "September";
   namaBln = "Sep";
  }
  
  else if (angkaBulan == 10) {
   namaBulan = "Oktober";
   namaBln = "Okt";
  }
  
  else if (angkaBulan == 11) {
   namaBulan = "November";
   namaBln = "Nov";
  }
  
  else {
   namaBulan = "Desember";
   namaBln = "Des";
  } 
 }
 
 
 // metode bisa diakses dari luar class
 public void inputBulan( int nomorBulan) {
  
  // Kita memeriksa validitas input
  if ( (0 < nomorBulan) && (nomorBulan < 13)) {
   setAngka(nomorBulan);
  }
  
  // Antisipasi jika input tidak valid
  else 
   System.out.println("Input angka bulan tidak valid");
 }
 
 //metode bsa diakses dari luar class
 public String getBulan() {
  return namaBulan;
 }
 
 //metode bisa diakses dari luar class
 public String getBln() {
  return namaBln;
 }

} 
class KalenderJava {
 
 public static void main (String args[]) {
  BulanKalender bulanan = new BulanKalender();
  bulanan.inputBulan(9);
  
  /* Dua baris berikut akan menghasilkan error jika tidak dikomen
     Untuk memperbaikinya, hapuslah dua baris berikut*/
  //System.out.println(bulanan.namaBulan);
  //System.out.println(bulanan.namaBln);
  
  
  // Cara akses atribut yang diperbolehkan
  System.out.println(bulanan.getBulan());
  System.out.println(bulanan.getBln());
 }
}

Jika kita isi metode inputBulan() dengan angka yang mewakili bulan, maka akan metode getBulan() akan mengeluarkan nama bulan yang diwakili, dan metode getBln() akan mengeluarkan kependekan nama bulan. Pada program diatas, output yang dihasilkan adalah

September
Sep
Namun jika metode inputBulan() diisi dengan angka tidakl valid (dibawah 1 atau lebih dari 12) maka yang ditampilkan adalah:
Input angka bulan tidak valid
Data kosong
Data kosong



Tidak ada komentar:

Posting Komentar