Praktikum PBO

Abstraction

Menyembunyikan detail implementasi, fokus pada "kontrak" atau "aturan main".

1. Pengantar & Analogi Dunia Nyata

Abstraction itu kayak Syarat Kelulusan dari kampus. Kampus cuma membuat aturan besar: "Setiap mahasiswa WAJIB punya Tugas Akhir & Sidang".

Kampus tidak peduli gimana detail teknisnya.

  • Ada yang bikin Game RPG.
  • Ada yang bikin Robot IoT.
  • Ada yang bikin Aplikasi Web.

Yang penting, method sidang() itu ada dan harus dijalankan oleh setiap mahasiswa. Kampus cuma memberikan kerangka (interface/abstract), mahasiswa yang mengisi detailnya (concrete implementation).

Identity vs Capability

Biar gak bingung bedanya Abstract Class sama Interface:

  • Abstract Class (Identity): Menjelaskan SIAPA dia.
    • Contoh: Mahasiswa (Abstrak). MahasiswaTeknik, MahasiswaSastra (Konkrit). Karena gak mungkin ada orang yang cuma "Mahasiswa" doang tanpa jurusan.
  • Interface (Capability): Menjelaskan APA YANG BISA dia lakukan.
    • Contoh: BisaCoding, BisaPresentasi. Mahasiswa Teknik bisa coding, Mahasiswa Sastra mungkin tidak.

2. Konsep Teknis

Abstraction adalah proses menyembunyikan detail implementasi yang rumit dan hanya menampilkan fungsionalitas penting kepada pengguna.

Di Java, kita pakai dua cara:

  1. Abstract Class: Kelas setengah jadi (bisa punya method biasa + abstract method).
  2. Interface: Kontrak murni (semua method otomatis abstract/public).

3. Komponen Utama

A. Abstract Class

  • Kelas yang gak bisa dibikin object-nya langsung (new Student() -> ERROR).
  • Dipakai kalau kita mau bikin template dasar yang sebagian sudah jadi.

B. Interface

  • Isinya cuma daftar method kosong (janji/kontrak).
  • Dipakai kalau kita mau "memaksa" class lain untuk punya perilaku tertentu.
  • Kata kuncinya implements.

Multiple Implementation

Ini keunggulan Interface! Kalau extends cuma bisa satu (Single Inheritance), tapi implements bisa BANYAK.

class MahasiswaHebat implements JagoCoding, JagoPresentasi, JagoOrganisasi { ... }

Perbedaan Utama

Berikut adalah perbandingan Abstract Class vs Interface:

FiturAbstract ClassInterface
Pewarisanextends (Single Inheritance)implements (Multiple Inheritance)
ConstructorPunyaTidak punya
VariableBebas (static, final, non-final)Otomatis public static final (Konstanta)
MethodBisa ada body-nya (Concrete)Default kosong (Abstract), kecuali method default

Aturan Instansiasi

Kamu TIDAK BISA membuat object langsung dari Interface/Abstract Class.

FinalProject fp = new FinalProject(); // ❌ Compile Error!

4. Studi Kasus Koding (Java)

Kita pakai Interface FinalProject sebagai kontrak kelulusan.

File 1: FinalProject.java (Kontrak)

// Interface: Cuma berisi 'janji'
public interface FinalProject {
    // Method ini KOSONG (gak ada body {})
    // Siapapun yang pakai interface ini, WAJIB bikin isinya.
    void presentDefense(); 
}

File 2: Implementasi (Mahasiswa Kreatif)

// Mahasiswa Game Dev MENYETUJUI kontrak FinalProject
public class GameDevProject implements FinalProject {
    @Override
    public void presentDefense() {
        System.out.println("Mendemonstrasikan Game RPG 3D buatan sendiri.");
    }
}

// Mahasiswa IoT MENYETUJUI kontrak FinalProject
public class IoTProject implements FinalProject {
    @Override
    public void presentDefense() {
        System.out.println("Menunjukkan sistem Smart Home dengan sensor.");
    }
}

File 3: Main.java (Eksekusi)

public class Main {
    public static void main(String[] args) {
        // Kita gak bisa bikin object dari Interface langsung
        // FinalProject project = new FinalProject(); // ❌ ERROR! Karena abstrak.

        // Tapi kita bisa tampung implementasinya ke dalam variabel Interface
        // (Polymorphism juga main di sini!)
        
        FinalProject skripsiSaya = new GameDevProject();
        FinalProject skripsiTeman = new IoTProject();

        System.out.println("--- Sidang Skripsi Hari Ini ---");
        
        // Penguji gak perlu tau detail kodingannya
        // Cukup panggil method yang dijanjikan di Interface
        
        skripsiSaya.presentDefense();     
        // Output: Mendemonstrasikan Game RPG 3D buatan sendiri.
        
        skripsiTeman.presentDefense(); 
        // Output: Menunjukkan sistem Smart Home dengan sensor.
    }
}

5. Bedah Kode

  1. interface FinalProject: Ini cuma kertas perjanjian. "Siapa yang mau lulus, harus bisa presentDefense!".
  2. implements FinalProject: GameDevProject dan IoTProject tanda tangan kontrak. Mereka wajib nulis kode untuk method presentDefense. Kalau tidak, error compile!
  3. FinalProject skripsiSaya = ...: Di Main, kita lihat variabelnya bertipe FinalProject, tapi isinya object nyata (GameDevProject). Ini membuat kode fleksibel. Kita bisa ganti isinya jadi IoTProject tanpa ubah tipe variabelnya.

6. Latihan

Sebuah sistem operasi membutuhkan driver universal untuk mencetak dokumen. Semua jenis dokumen (Tagihan, Laporan, Surat) harus memiliki kemampuan standar "Bisa Dicetak".

Gunakan Interface untuk membuat kontrak "Printable":

1. Interface Printable

  • Method void print(): Kontrak wajib tanpa implementasi.

2. Class Invoice (implements Printable)

  • Attributes: nomorInvoice (String), jumlah (int).
  • Constructor: Menerima nomorInvoice dan jumlah.
  • Implementasi Method: print(): Cetak Mencetak Invoice #<nomor> senilai Rp<jumlah>.

3. Class Report (implements Printable)

  • Attributes: judul (String).
  • Constructor: Menerima judul.
  • Implementasi Method: print(): Cetak Mencetak Laporan: <judul>.

Output yang Diharapkan

Mencetak Invoice #INV-001 senilai Rp150000
Mencetak Laporan: Laporan Tahunan
Main.java

7. Kesimpulan

Abstraction menyembunyikan kerumitan di balik layar.

  • Penguji Sidang (User) tidak perlu tau ribetnya coding game engine.
  • Dia cuma perlu tau satu hal: Mahasiswa ini bisa presentDefense() atau tidak.

Selamat! 🚀 Kamu sudah mempelajari 4 pilar utama OOP:

  1. Encapsulation: Melindungi data.
  2. Inheritance: Mewarisi sifat (Reusability).
  3. Polymorphism: Satu nama, banyak bentuk.
  4. Abstraction: Menyembunyikan detail, fokus pada kontrak.

Sistemmu sudah rapi dengan Abstraction, tapi apa yang terjadi jika koneksi internet putus saat sidang? Mari belajar menangani situasi darurat di modul selanjutnya: Exception Handling

On this page