Konsep OOP Pada Java

Setelah beberapa hari meninggalkan java, ayo kita belajar lagi. OOP merupakan kepanjangan dari Object Oriented Programming, banyak aturan dari pemrograman berorientasi objek ini. Diantaranya dasar yang paling penting yaitu : Enkapsulasi, Inheritance, Overriding, juga Overloading. Kita akan bahas satu per satu nantinya, Cuma sekarang gw bakal nulis tentang Enkapsulasi ajah.

Enkapsulasi merupakan pernyataan untuk pembungkusan sesuatu (capsulate). Kalo dalam dunia nyata seperti ini : Kalo kita mau bikin rekening di salah satu bank, maka kita akan memberikan data diri dan “uang pangkal”. Lalu tanpa kita tahu apa yang terjadi, kita dikasih buku tabungan yang merupakan bukti kalo rekening kita udah dibikin. Nah gitu kira-kira enkapsulasi. Kita hanya memberi data, apa yang kita mau, dan akhirnya tanpa tahu urusan apa yang terjadi dalam pihak internal, kita menerima apa yang kita mau.

Dalam implementasinya di java, enkpasulasi ditandai dengan memberikan private ke semua variabel yang ada di dalam suatu kelas (bukan kelas Main/Driver pastinya), dan pengaksesan terhadap variabel tersebut digunakan ‘setter’ dan ‘getter’ bagi variabel yang memerlukan (kan gak semua variabel perlu nilai balikan/masukan).

Satu hal yang perlu diingat dalam konsep OOP, setiap satu program yang merepresentasikan suatu sistem/model minimal memiliki 2 kelas, yaitu kelas pemrosesan dan kelas Main/Driver untuk memanggil kelas pemrosesan. Dan berikut aturan lainnya (Cuma sebagai bentuk standar dan bukan keharusan):

  • Nama Kelas ditulis dalam huruf kapital untuk huruf pertama dari nama tersebut, contoh jika ingin menuliskan kelas ‘mobil mewah’ maka nama kelas nantinya ditulis ‘MobilMewah’
  • Variabel dalam konsep OOP disebut atribut yang diakses dengan setter dan getter-nya. (lebih jelas lihat contoh implementasi)
  • Satu kelas terdiri dari banyak prosedur pemrosesan, setter dan getter termasuk dalam prosedurnya. Prosedur dalam konsep OOP disebut metode atau method.
  • Penulisan method diawali huruf kecil, contoh untuk ‘setter atribut nomor plat mobil’ diberikan nama ‘setNoPlatMobil’.
Sekarang contoh implementasi :

Kita akan membuat sebuah prosedur penentuan nilai genap/ganjil atau bilangan prima(tidak terlalu merepresentasikan konsep OO, tapi untuk belajar kayaknya cocok2 aja menurut gw). Berarti kita harus membuat satu kelas penghitung dan satu kelas driver (Main). Implementasi berikut menggunakan Netbeans, ok silahkan diikuti langkah2nya.
  • Pertama, bikin project dengan nama AngkaPrima di Netbean File --> New Project --> Pilih Kategori Java, dan Java Application
  • Kedua, buat sebuah kelas OlahAngka seperti gambar :  
(Klik Kanan pada Paket angkaprima, lalu pilih New --> Java Class, Isi nama Kelas dengan nama ‘OlahAngka’ dan tekan Finish dan terbentuklah kelas OlahAngka)

  • Ketiga, sebagai langkah selanjutnya, kita harus membuat method untuk menentukan apakah angka yang diolah adalah bilangan genap/ganjil. Tapi sebelumnya buatlah atribut angka yang akan diolah lengkap dengan setter-getter nya. Cara membuat seperti ini :
  1. Ketik ‘private int angka’ yang berarti kita akan membentuk suatu atribut angka bertipe data integer dengan karakter private (hanya bisa diakses oleh kelas itu saja)
  2. Buatlah setter getter dari atribut ini (kali ini netbeans sangat membantu karena tidak usah ditulis manual cukup lakukan seperti ini : klik kanan di nama atribut tersebut lalu klik )
  3. Ketika muncul pilihannya, pilih set dan get untuk membuat keduanya. Seperti gambar kedua dibawah :

 Setelah terbentuk method set dan get, berarti kita akan membuat satu method untuk menentukan apakah bilangan itu genap atau ganjil. Logikanya gini, Kalo dibagi 2 gak ada sisanya berarti bilangan tersebut adalah bilangan ganjil, dan sebaliknya untuk genap.
  • Karena ada 2 kondisi, maka kita bikin dengan menggunakan sebuah fungsi (method yang mengembalikan nilai). Fungsi yang kita gunakan bertipe boolean. Artinya jika mengembalikan nilai benar/true, maka berarti nilai genap, sedangkan jika mengembalikan nilai salah berarti bilangan tersebut merupakan bilangan ganjil.
  • Fungsi tersebut kita namakan isGenap yang akan mengembalikan nilai true jika bilangan dapat dibagi 2, dan mengembalikan false jika tidak bisa dibagi 2. Pembagian 2 ini dilakukan dengan menggunakan operator mod. Operator mod akan mengembalikan nilai sisa dari hasil operasi. Jadi contohnya gini :
- 5 mod 2 = 1 (Sisa 5 dibagi 2 itu 1)
- 10 mod 4 = 2
- 10 mod 2 = 0
  • Dengan keterangan diatas, berarti kita dapat membuat fungsi isGenap dengan kode berikut : (mod dalam java dituliskan dengan %)
 
public boolean isGenap() {
   if (this.angka % 2 == 0) {
      return true;
   } else {
      return false;}
} 

}
  • Setelah itu, untuk menentukan bilangan prima atau tidak kita tambahkan kode seperti berikut :
  • Kode diatas dimaksud untuk menentukan bilangan prima dengan langkah seperti ini :

    - Bilangan prima merupakan bilangan yang tidak habis dibagi bilangan lain kecuali oleh dirinya sendiri dan 1.
    - Karna itu, untuk setiap bilangan yang dimasukkan, di cek satu persatu dari satu hingga bilangan tersebut. Jika ditemukan hasil pembagian bersisa 0, berarti bilangan itu habis dibagi.
    - Bilangan prima dengan definisi diatas, berarti mempunyai jumlah habis dibagi (status_nol) bernilai 2, yaitu untuk pembagian terhadp dirinya sendiri dan angka 1.
    - Karena itu setiap status_nol bernilai 2, maka akan dikembalikan nilai true yang berarti bilangan input adalah bilangan prima, dan sebaliknya.
  • Setelah itu, kita tinggal memanggil fungsi2 tersebut di kelas Main dengan kode :


  • Baris pertama berarti membetntuk objek dari kelas OlahAngka, yang nantinya method dari kelas tersebut dipanggil pada pengkondisian.
  • Baris Kedua merupakan kelas Scanner yang meminta input user, silahkan lihat posting-an sebelumnya.
  • Baris kelima merupakan pemanggilan setter untuk memasukkan angka ke dalam atribut bilangan yang ada di kelas OlahAngka. Dan seterusnya
  • Nah, mengapa gw pake getAngka untuk mengambil nilai dari angka yang udah kita input sebelumnya? Hal ini karena sifat dari object oriented programming yang memang hanya memberikan akses terhadap setter dan getter (enkapsulasi). Lalu mengapa tidak menuliskan angka yang ada seperti dibaris kelima? Hal ini dikarenakan bisa jadi ada pengolahan dari angka tersebut yang mengubah nilainya. Jadi kita harus mengambilnya dari kelas tempat diolahnya angka tersebut, dan bukan angka aslinya sebelum dilakukan pengolahan.
Oh, dan hasil running seperti yang tercantum :



Kode Selengkapnnya :


//OlahAngka.java

public class OlahAngka {
 private int angka;
 public int getAngka() {
     return angka;
 }
 public void setAngka(int angka) {
     this.angka = angka;
 }
 public boolean isGenap() {
     if (this.angka % 2 == 0) {
         return true;
     } else {
         return false;
     }
 }
     public boolean isPrima() {
       int status_nol = 0;
       for (int i = 1; i <= this.angka; i++) {             if (this.angka % i == 0) {                 status_nol++;             }         }         if (status_nol == 2) {             return true;         }         else return false;     } }  
 }
}

//Main.java
import java.util.Scanner;

/**
 *
 * @author Arby
 */
public class Main {
    public static void main(String[] args) {
        // TODO code application logic here
        OlahAngka oa = new OlahAngka();
        Scanner s = new Scanner(System.in);
        System.out.println("Masukkan angka yang ingin di-cek : ");
        int angka = s.nextInt();
        oa.setAngka(angka);
        if (oa.isGenap()&&oa.isPrima()){
            System.out.println("Angka "+oa.getAngka()+" adalah bilangan genap prima");
        }
        else if (!oa.isGenap()&&oa.isPrima()){
            System.out.println("Angka "+oa.getAngka()+" adalah bilangan ganjil prima");
        }
        else if (oa.isGenap()&&!oa.isPrima()){
            System.out.println("Angka "+oa.getAngka()+" adalah bilangan genap");
        }
        else if (!oa.isGenap()&&!oa.isPrima()){
            System.out.println("Angka "+oa.getAngka()+" adalah bilangan ganjil");
        }
    }

}


0 komentar:

Posting Komentar