Belajar Java Memahami Abstraction Dengan Mudah

Abstraction adalah proses untuk menyembunyikan detail implementasi dari user sehingga hanya sisi fungsionalitas saja yang ditampilkan, atau dengan kata lain user akan menerima informasi mengenai apa yang dapat dilakukan oleh suatu objek namun user tidak akan mengetahui bagaimana objek itu melakukannya. Abstraction merupakan salah satu dari empat konsep penting Java selain encapsulation, inheritance dan polymorphism.

Misalkan ketika anda mengirim email, anda tidak akan mengetahui proses komplek yang ada di dalamnya seperti proses pada server. Anda tinggal menulis email tersebut kemudian menekan tombol send, dan email yang anda tulis akan dikirimkan pada alamat yang dituju.

belajar_java_abstraction_pemula


Dalam Java abstraction ini dapat dicapai dengan menggunakan class abstract dan interfaces.

Jika anda membuat suatu class misalnya:

public class Binatang{

}

Mungkin yang ada dipikiran anda adalah bagaimanakah properti dan behaviour atau tingkah laku yang dimiliki binatang tersebut?

Apakah binatang tersebut memiliki kaki? bisa terbang? bisa berlari? bisa berenang? makan rumput? makan daging? berwana Putih? dan masih banyak lagi pertanyaan lainnya.

Jadi ketika anda membuat objek dari class binatang, anda dapat menyadari bahwa tidak semua class harus di buat instance-nya.

Bandingkan jika kita membuat objek dari class Kambing yang lebih logis, misalnya anda dapat dengan mudah menyatakan bahwa kambing itu makan rumput, berkaki empat, bisa berlari, dapat bersuara, dan sebagainya, dengan kata lain class Kambing adalah class yang konkrit.

Lantas bagaimana dengan objek Binatang? Mencoba membuat objek dengan tipe Binatang itu tak terbayangkan, dengan kata lain ini adalah abstrak.

Tapi anda misalnya memerlukan class Binatang sebagai superclass ini untuk bekerja dengan konsep Java lainnya yaitu inheritance dan polymorphism. Jadi apa yang dapat dilakukan? Sementara anda tidak ingin kalau class Binatang ini dapat dibuat objeknya. Contohnya anda hanya menginginkan objek Harimau dan objek Kambing yang merupakan subclass, bukan objek Binatang.

Jawabannya sangat mudah, yaitu dengan membuat class Binatang itu sebagai abstract class. Dengan menandai class sebagai abstract, maka compiler dapat menghentikan kode dimana saja untuk membuat instance dari tipe class tersebut.

Ah, jika berfikir kalo begitu mending saya buat semuanya sebagai class yang konkrit saja, maka anda akan kehilangan konsep berharga dari pemrograman Java, yaitu si keren polymorphism.

Ketika mendesain class struktur, anda dapat memutuskan sendiri mana saja class yang merupakan abstract dan mana class yang merupakan konkrit. Class yang konkrit adalah class yang lebih spesifik sehingga bisa di buat objeknya.

Harap diingat:
Suatu class abstract tidak memiliki nilai, tidak memiliki tujuan atau kegunaan, kecuali class abstract itu di extends-kan

Untuk membuat class menjadi abstract, anda tinggal melakukannya dengan menambahkan keyword abstract. Contohnya:

public abstract class Binatang {
   
    protected void bergerak (){
       
    }
}


Bila anda melihat Java API, maka anda dapat menemukan banyak sekali abstract class. Tapi seperti apakah GUI Component tersebut? class Component merupakan superclass dari banyak sekali class yang terkait seperti button, dialog box, text area dan sebagainya.

Tapi apakah anda membuat objek langsung dari class Component tersebut? Tentu saja tidak, melainkan anda membuat objek dari class konkritnya seperti membuat objek dari class JButton.

Pewarisan Dari Class Abstract

Untuk penggunaan class abstract, perhatikan contoh simpel di bawah ini :


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package com.bahasaJava.Abstraction;

public abstract class Binatang {
 
 private String nama, lokasi, makanan;
 private double berat;
 
 //Konstruktor, walaupun class abstract tidak bisa di instance-kan
 //namun bisa dibuat konstruktornya.
 public Binatang(String nama, String lokasi, String makanan, double berat){
  this.nama = nama;
  this.lokasi = lokasi;
  this.makanan = makanan;
  this.berat = berat;
 }
 
 //Getter dan setter nama binatang
 public String getNama() {
  return nama;
 }

 public void setNama(String nama) {
  this.nama = nama;
 }

 
 //Getter dan setter lokasi binatang
 public String getLokasi() {
  return lokasi;
 }

 public void setLokasi(String lokasi) {
  this.lokasi = lokasi;
 }

 //Getter dan setter makanan binatang
 public String getMakanan() {
  return makanan;
 }

 public void setMakanan(String makanan) {
  this.makanan = makanan;
 }

 //Getter dan setter berat binatang
 public double getBerat() {
  return berat;
 }

 public void setBerat(double berat) {
  this.berat = berat;
 }



 //Method cara bergerak binatang
 public void bergerak(String gerakan){
  System.out.println(this.nama + " bergerak dengan " + gerakan );
 }
 
 //Method makan
 public void makan(){
  System.out.println(this.nama + " memakan " + this.makanan );
 }
 
 //Method berkembang biak
 public void berkembangBiak(String caraBerkembangBiak){
  System.out.println(this.nama + " berkembang biak dengan cara " + caraBerkembangBiak );
 }
 
 public void lokasi(){
  System.out.println(this.nama + " memiliki habitat di " + this.lokasi );
 }

}

Ketika anda mencoba membuat instance dari class abstract binatang tersebut akan terjadi error, misalnya seperti di bawah ini:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
package com.bahasaJava.Abstraction;

public class TestAbstract {
 public static void main(String args []){
  /* Kode berikut ini tidak diizinkan dan akan memberikan keterangan error*/
  Binatang binatang = new Binatang("Harimau", "Afrika", "Rusa", 120,26);
  binatang.bergerak("berlari");
  binatang.berkembangBiak("beranak");
  binatang.makan();
 }
}

Contoh keterangan error:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
    Cannot instantiate the type Binatang
    at com.bahasaJava.Abstraction.TestBinatang.main(TestBinatang.java:6
)

Di keterangan tersebut tertera cannot instantiate the type Binatang, jadi tidak diperbolehkan membuat objek dengan tipe binatang dari class abstract.

Oleh karena itu, objek dari subclass yang akan bekerja, dengan cara membuat extends dari class abstract Binatang tersebut, seperti contoh di bawah ini:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package com.bahasaJava.Abstraction;

public class Harimau extends Binatang  {
 
 private double kecepatanBerlari;
 
 //Konstruktor untuk objek Harimau
 public Harimau(String nama, String lokasi, 
   String makanan, double berat, double kecepatanBerlari) {
  super(nama, lokasi, makanan, berat);
  setKecepatanBerlari(kecepatanBerlari);
 }

 //Method getter dan setter untuk kecepatan berlari Harimau
 public double getKecepatanBerlari() {
  return kecepatanBerlari;
 }
 
 public void setKecepatanBerlari(double kecepatan) {
  if(kecepatan >= 0.00){
   kecepatanBerlari = kecepatan;
  }
  
 }
 
 //Method untuk menghitung jarak tempuh harimau dengan parameter waktu
 public double jarak (double waktu){
  double jarak = waktu * kecepatanBerlari;
  System.out.println("Harimau berlari dengan kecepatan " + kecepatanBerlari +
    " km/jam selama " + waktu + " jam dengan jarak tempuh " + jarak + " km ");
  
  return jarak;
 }

}

Kemudian untuk mengujinya, dibuat satu class lagi seperti di bawah ini:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
package com.bahasaJava.Abstraction;

public class TestAbstract {
 public static void main(String args []){
  
  Harimau harimau = new Harimau("Harimau", "Afrika", "Rusa", 120.26, 50.88);
  
  harimau.bergerak("berlari");
  harimau.makan();
  
  //Sekarang harimau makan kambing
  harimau.setMakanan("kambing");
  harimau.makan();
  
  harimau.lokasi();
  harimau.jarak(0.89);

 }
}

Output:
Harimau bergerak dengan berlari
Harimau memakan Rusa
Harimau memakan kambing
Harimau memiliki habitat di Afrika
Harimau berlari dengan kecepatan 50.88 km/jam selama 0.89 jam dengan jarak tempuh 45.2832 km

Tidak ada komentar

Bahasa Java. Diberdayakan oleh Blogger.