Tutorial Java kali ini akan membahas tentang encapsulation atau pengkapsulan, yang merupakan salah satu fitur di dalam pemrograman berorientasi obyek. Secara umum fitur ini bertujuan untuk mengontrol aksesibilitas properti dari sebuah obyek/class, khususnya atribut. Melalui fitur ini, kita dapat menentukan atribut mana yang bersifat read only, atau write only, atau bahkan keduanya. Selain itu, fitur ini juga dapat digunakan melakukan validitas terhadap value yang akan diassign pada sebuah atribut.
Apa dan bagaimana penerapan lebih dalam mengenai encapsulation di Java akan dipaparkan di artikel ini. Penerapan encapsulation nantinya akan diberikan melalui sebuah studi kasus.
Sebelum masuk ke dalam studi kasus. Terlebih dahulu akan diberikan penjelasan mengenai encapsulation yang dapat disimak melalui video tutorial berikut ini.
Setelah penjelasan konsep encapsulation di atas, selanjutnya akan diberikan sebuah studi kasus di mana kita akan menerapkan hal tersebut di Java.
Studi Kasus
Diberikan sebuah obyek bangun datar sebagaimana tampak pada gambar di bawah ini.
Dari obyek bangun datar tersebut, kita diminta membuat program Java untuk menghitung luas bangun daerah yang diarsir.
Ide Penyelesaian
Pada studi kasus di atas, kita dapat identifikasi bahwa terdapat beberapa gabungan bentuk bangun datar, yaitu dua buah segitiga ADE dan CBF. Selain itu terdapat pula bangun persegi panjang CDEF, serta bangun setengah lingkaran di dalam persegi panjang CDEF.
Berdasarkan identifikasi tersebut, kita akan mendapatkan luas daerah yang diarsir dengan menjumlahkan luas dari segitiga ADE dan CBF, dan juga luas persegi panjang CDEF. Selanjutnya total luas ketiga bangun ini dikurangi dengan luas setengah lingkaran yang ada di dalam persegi panjang CDEF, misal kita beri nama setengah lingkarannya dengan X.
Setelah diperoleh ide penyelesaiannya, kita dapat rancang struktur class di Java dengan menerapkan encapsulation.
Rancangan Class
Melalui dasar ide penyelesaian, kita akan buat class untuk masing-masing bangun datar (segitiga, persegi panjang, dan lingkaran) sebagai berikut.
Perhatikan rancangan struktur class di atas! Tanda minus (-) yang ada di depan setiap atribut pada setiap class menandakan memiliki access modifier private. Sedangkan tanda plus (+) yang ada di depan method bersifat public.
Pada class Segitiga, method setAlas()
dan setTinggi()
merupakan setter method yang nantinya digunakan untuk men-set atau meng-assign nilai alas dan tinggi dari segitiganya. Adapun getLuas()
adalah getter method digunakan untuk mendapatkan nilai luas setelah proses perhitungan.
Dalam hal ini, misalkan kita tidak memerlukan getter method untuk nilai alas dan tingginya, karena nantinya yang dibutuhkan hanyalah nilai luas segitiganya saja.
Sedangkan untuk setter method untuk luas segitiga juga tidak diperlukan dikarenakan nilai luas segitiga tidak diassign manual, melainkan diperoleh dari hasil komputasi.
Hal yang sama juga senada untuk class Lingkaran dan PersegiPanjang.
Coding Time..
Setelah kita buat desain struktur classnya, sekarang saatnya coding di Java untuk implementasinya.
Class Segitiga
public class Segitiga { // atribut private int alas; private int tinggi; private double luas; // setter method untuk alas public void setAlas(int a){ if (a > 0){ this.alas = a; } else { this.alas = 0; } } // setter method untuk tinggi public void setTinggi(int t){ if (t > 0){ this.tinggi = t; } else { this.tinggi = 0; } } // getter method untuk luas public double getLuas(){ // hitung luasnya this.luas = this.alas * this.tinggi * 0.5; return this.luas; } }
Class Persegi Panjang
public class PersegiPanjang { // atribut private int panjang; private int lebar; private double luas; // setter method untuk panjang public void setPanjang(int p){ if (p > 0){ this.panjang = p; } else { this.panjang = 0; } } // setter method untuk lebar public void setLebar(int l){ if (l > 0){ this.lebar = l; } else { this.lebar = 0; } } // getter method untuk luas public double getLuas(){ // hitung luasnya this.luas = this.panjang * this.lebar; return this.luas; } }
Class Lingkaran
public class Lingkaran { // atribut private int jejari; private double luas; // setter method untuk jejari public void setJejari(int r){ if (r > 0){ this.jejari = r; } else { this.jejari = 0; } } // getter method untuk luas public double getLuas(){ // hitung luasnya this.luas = Math.PI * Math.pow(this.jejari, 2); return this.luas; } }
Setelah kita buat coding untuk setiap class dari masing-masing bangun datar, selanjutnya kita buat main class nya, yang di dalamnya terdapat proses untuk menghitung daerah yang diarsir.
Main Class
public class MainClass { public static void main(String[] args) { // hitung luas segitiga ADE Segitiga st1 = new Segitiga(); st1.setAlas(8); st1.setTinggi(7); double luasADE = st1.getLuas(); // hitung luas segitiga CBF Segitiga st2 = new Segitiga(); st2.setAlas(8); st2.setTinggi(7); double luasCBF = st2.getLuas(); // hitung luas persegipanjang CDEF PersegiPanjang pp1 = new PersegiPanjang(); pp1.setPanjang(14); pp1.setLebar(7); double luasCDEF = pp1.getLuas(); // hitung luas setengah lingkaran X Lingkaran l1 = new Lingkaran(); l1.setJejari(7); double luasX = 0.5 * l1.getLuas(); // hitung luas daerah diarsir double luasArsir = luasADE + luasCBF + luasCDEF - luasX; System.out.println("Luas daerah diarsir: " + luasArsir + " cm2"); } }
Di dalam main class, pertama kali akan dihitung luas segitiga ADE, dengan alasnya 8 cm, tinggi 7 cm. Selanjutnya dihitung luas segitiga CBF dengan ukuran sama dengan ADE. Proses berikutnya adalah menghitung luas persegipanjang CDEF dengan ukuran panjang 14 cm dan lebar 7 cm. Terakhir dihitung luas setengah lingkaran X dengan ukuran jari-jari 7 cm.
Setelah luas dari masing-masing bangun datar dihitung, barulah bisa dihitung luas daerah yang diarsir sesuai dengan ide penyelesaian di atas.
Apabila program Java dijalankan, maka akan diperoleh hasil outputnya sebagai berikut.
Dengan demikian diperoleh total daerah yang diarsir adalah sekitar 77 cm2.
OK.. mudah bukan membuat programnya?
Exercise..
Oya, selain dengan ide penyelesaian di atas, Anda bisa mencari luas daerah yang diarsir tersebut dengan terlebih dahulu menghitung luas trapesium ABCD kemudian menguranginya dengan luas setengah lingkaran X nya. Nah silakan Anda coba membuat kode program Javanya untuk ide penyelesaian yang ini.
Selamat belajar!!!