#14 ABSTRAKSI

 A. Pengertian Abstraksi

Abstraksi (Abstraction) adalah konsep penting dalam PBO yang digunakan untuk:
Menyembunyikan detail yang tidak penting dan hanya menampilkan fitur penting dari suatu objek.
Dengan abstraksi, programmer cukup fokus pada “apa yang dilakukan objek”, bukan “bagaimana cara objek melakukannya”.

Contoh Singkat:

Saat menekan tombol "start" pada motor:

  • Yang kita lihat hanya tombolnya
  • Kita tidak perlu tahu bagaimana busi menyala, oli berjalan, piston bekerja, dll

→ Itulah abstraksi.


B. Analogi Abstraksi dalam Kehidupan Nyata

1. ATM

Saat menekan “Tarik Tunai”:

- Kamu tidak tahu proses enkripsi
- Kamu tidak tahu komunikasi ke server bank
- Kamu tidak tahu bagaimana saldo dikurangi

Kamu hanya melihat fitur penting: tarik uang.
Detail kompleks tersembunyi.

2. Tombol Lampu

- Kamu hanya menekan saklar
- Kamu tidak perlu tahu kabel mana
- Kamu tidak perlu tahu tegangan listrik

Fokus pada apa (menyalakan), bukan bagaimana.

3. Kendaraan

Semua kendaraan bisa “bergerak”, tetapi:

- Mobil → roda
- Kapal → baling-baling
- Pesawat → mesin turbofan

Kata “bergerak” adalah abstraksi, sedangkan cara bergeraknya berbeda-beda.

4. Pahlawan Super

Semua pahlawan bisa “menyerang”, tetapi:

- Iron Man → laser
- Thor → palu
- Hulk → pukulan

Nama tindakan sama (“menyerang”), tapi cara berbeda.


C. Tujuan Abstraksi

1. Mengurangi kompleksitas program.
2. Membuat sistem lebih mudah dipahami.
3. Memisahkan konsep apa yang harus dilakukan dari bagaimana melakukannya.
4. Mencegah pengguna mengakses detail yang tidak diperlukan.
5. Mempermudah pengembangan sistem skala besar.


D. Mengapa Abstraksi Penting dalam PBO?

  • Tanpa abstraksi, programmer harus tahu detail mesin, database, UI, struktur data, dll.
  • Dengan abstraksi, setiap bagian sistem dapat berkomunikasi tanpa tahu cara kerja internal.

Contoh:

Program kasir cukup memanggil pembayaran.qris(), tanpa tahu cara bank memverifikasi transaksi.


E. Jenis Abstraksi dalam PBO

Abstraksi Data
  • Menyembunyikan data dalam class menggunakan private.
  • Diakses melalui getter/setter (ini mirip enkapsulasi).

Abstraksi Behavior : Mendefinisikan perilaku umum menggunakan:
  • Abstract Class
  • Interface
Ini yang paling sering dipakai dalam PBO lanjutan.


F. Abstraksi Menggunakan Abstract Class

1. Pengertian Abstract Class

  • Class yang tidak dapat dibuat objek secara langsung.
  • Mengandung method abstrak (tanpa isi).
  • Berfungsi sebagai template / kerangka dasar.

Format:

public abstract class NamaClass {
    public abstract void namaMethod();
}

2. Contoh Abstract Class

public abstract class Bentuk {
    public abstract double hitungLuas();
}

Penjelasan:

  • Bentuk adalah konsep umum
  • Semua bentuk pasti punya luas, tapi cara menghitungnya beda-beda.
  • Karena rumusnya berbeda, method hitungLuas() dibuat abstrak.

G. Subclass Konkret (Implementasi Abstraksi)

Subclass 1: Persegi

public class Persegi extends Bentuk {
    private double sisi;

    public Persegi(double sisi) {
        this.sisi = sisi;
    }

    @Override
    public double hitungLuas() {
        return sisi * sisi;
    }
}

Subclass 2: Lingkaran

public class Lingkaran extends Bentuk {
    private double r;

    public Lingkaran(double r) {
        this.r = r;
    }

    @Override
    public double hitungLuas() {
        return Math.PI * r * r;
    }
}

Class Main (Pengujian)

public class Main {
    public static void main(String[] args) {
        Bentuk b1 = new Persegi(5);
        Bentuk b2 = new Lingkaran(7);

        System.out.println("Luas Persegi   : " + b1.hitungLuas());
        System.out.println("Luas Lingkaran : " + b2.hitungLuas());
    }
}

Output

Luas Persegi   : 25.0
Luas Lingkaran : 153.93804002589985


 

H. Pembahasan Kode (Ringkas & Jelas)

1. Kenapa Bentuk harus abstrak?

Karena Bentuk adalah konsep umum yang tidak bisa dibuat objek secara nyata.

2. Kenapa hitungLuas() abstrak?

Karena setiap bentuk memiliki rumus berbeda, jadi detail perhitungan diserahkan ke subclass.

3. Apa manfaatnya?

Saat menambah bentuk baru (misalnya Segitiga), kita tidak perlu mengubah class lain.



I. Abstraksi Menggunakan Interface

Interface mendefinisikan perilaku murni tanpa implementasi.

Contoh Interface

public interface Kendaraan {
    void bergerak();
}

Subclass yang Mengimplementasikan Interface

public class Mobil implements Kendaraan {
    public void bergerak() {
        System.out.println("Mobil bergerak dengan roda.");
    }
}

public class Kapal implements Kendaraan {
    public void bergerak() {
        System.out.println("Kapal bergerak dengan baling-baling.");
    }
}

Main

public class Main {
    public static void main(String[] args) {
        Kendaraan k1 = new Mobil();
        Kendaraan k2 = new Kapal();

        k1.bergerak();
        k2.bergerak();
    }
}

Output:

Mobil bergerak dengan roda.
Kapal bergerak dengan baling-baling.

J. Studi Kasus

Sistem Pembayaran Kantin Digital

Abstract Class

public abstract class Pembayaran {
    public abstract void prosesPembayaran(int total);
}

Subclass

public class Cash extends Pembayaran {
    @Override
    public void prosesPembayaran(int total) {
        System.out.println("Bayar tunai sebesar: " + total);
    }
}

public class QRIS extends Pembayaran {
    @Override
    public void prosesPembayaran(int total) {
        System.out.println("Bayar via QRIS sebesar: " + total);
    }
}

Main
Pembayaran p = new QRIS();
p.prosesPembayaran(15000);
Output:
Bayar via QRIS sebesar: 15000

Posting Komentar

Lebih baru Lebih lama

Formulir Kontak