About Me

Hai, saya Rosihan Ari Yuana. Saya sehari-hari adalah mengajar di Universitas Sebelas Maret.

Bidang riset saya tentang adaptive learning, computer aided learning, dan datascience

Selain itu, saya juga seorang penulis buku dan blogger.

More about me...

  • Home
  • /
  • Java
  • /
  • Java Encapsulation dan Penerapannya

Java Encapsulation dan Penerapannya

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.

Video Tutorial Encapsulation

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.

Studi kasus

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.

Rancangan Struktur Class

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.

Output

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!!!

Bagikan artikel ini jika bermanfaat !

Saya seorang dosen dan peneliti di Universitas Sebelas Maret. Bidang penelitian saya tentang: adaptive learning, datascience, dan computer aided learning. Selain itu saya juga seorang blogger, serta penulis buku tentang pemrograman, dan matematika.

Leave a Reply