Mengenal Abstraksi dalam OOP C#

0
135

A

bstraksi adalah konsep OOP yang menyembunyikan detail rumit dan hanya menampilkan fungsi penting, seperti remote TV yang cukup tekan tombol tanpa tahu cara kerjanya di dalam. Ini membuat kode lebih sederhana dan aman untuk pemula.

Bayangkan smartphone: Kamu cukup tekan ikon kamera untuk foto, tanpa perlu paham sensor atau prosesornya – itu abstraksi dalam kehidupan nyata.

Apa Itu Abstraksi?

Abstraksi fokus pada “apa” yang dilakukan, bukan “bagaimana”. Di C#, dicapai lewat abstract class (kelas tak lengkap, harus diwarisi) dan interface (kontrak method tanpa implementasi). Ini mencegah penggunaan kelas secara langsung dan paksa turunan isi detailnya.

  • Abstract Class: Punya method abstrak (hanya deklarasi) + method biasa.
  • Interface: Hanya method/properti tanpa body (sebelum C# 8, kini bisa default).

Analogi: Resep masak abstrak bilang “panggang 180°C”, turunan tambah “30 menit untuk kue”.

Abstract Class: Kerangka Dasar

Abstract class dideklarasikan abstract, tak bisa diinstansiasi langsung. Method abstrak wajib di-override di kelas turunan.

Contoh Sederhana (Bentuk):

abstract class Bentuk {
    public abstract double Luas();  // Harus diimplementasi turunan
    public void Info() {  // Method biasa
        Console.WriteLine("Ini bentuk geometri.");
    }
}

class Lingkaran : Bentuk {
    private double radius;
    public Lingkaran(double r) { radius = r; }
    public override double Luas() {
        return 3.14 * radius * radius;
    }
}

class Program {
    static void Main() {
        // Bentuk b = new Bentuk();  // ERROR! Abstract
        Lingkaran l = new Lingkaran(5);
        l.Info();
        Console.WriteLine("Luas: " + l.Luas());  // Output: 78.5
    }
}

Ini seperti blueprint rumah: Tak bisa tinggal di blueprint, harus bangun rumah nyata.

Interface: Kontrak Ketat

Interface semua member abstrak secara default (interface), implementasi di kelas yang implement. Satu kelas bisa punya banyak interface.

Contoh (Kendaraan Bermotor):

interface IBermotor {
    void NyalakanMesin();
    void MatikanMesin();
}

interface IEkonomi {
    double HitungBbm();
}

class Motor : IBermotor, IEkonomi {
    public void NyalakanMesin() {
        Console.WriteLine("Mesin motor menyala!");
    }
    public void MatikanMesin() {
        Console.WriteLine("Mesin mati.");
    }
    public double HitungBbm() {
        return 50.5;  // Liter per 100km
    }
}

class Program {
    static void Main() {
        Motor m = new Motor();
        m.NyalakanMesin();
        Console.WriteLine("BBM: " + m.HitungBbm());
    }
}

Analogi: Interface seperti SIM A (motor) + SIM B (mobil) – kendaraan harus patuhi aturan masing-masing.

Perbandingan Abstract Class vs Interface

Aspek Abstract Class Interface
Inheritance Satu saja (:) Banyak (, koma)
Method Biasa Bisa punya Hanya default/static (C# 8+)
Field Bisa Tidak
Kapan Pakai Kerangka umum + shared code Kontrak perilaku spesifik

Pilih abstract untuk “is-a” (Motor is-a Kendaraan), interface untuk “can-do” (Motor can-do Bermotor).

Studi Kasus Latihan untuk SMK

  1. Bangun Perpustakaan: Buat abstract class Buku dengan abstract string Judul() dan virtual void Pinjam(). Turunan: BukuFiksi, BukuNonFiksi. Test di Main, coba instansiasi Buku – error?
  2. Game Sederhana: Interface IAttack (void Serang()), IDefend (void Bertahan()). Class Prajurit : IAttack, IDefend. Implementasi unik, seperti “Pukul pedang” dan “Angkat perisai”. Jalankan simulasi pertarungan.
  3. Toko Online: Abstract Produk dengan abstract double Harga(). Interface IDiskon (double BeriDiskon(10)). Class Laptop : Produk, IDiskon. Hitung harga diskon di Main.
  4. Kendaraan Umum: Interface IJalan (void Jalan()), abstract Kendaraan (abstract int Roda()). Class Bus : Kendaraan, IJalan. Bandingkan dengan Sepeda hanya IJalan.
  5. Mini Project: Sistem Sekolah dengan abstract Siswa (abstract void Belajar()), interface IKelas (void PindahKelas()). Buat SiswaReguler, SiswaKelasKhusus. Tambah polymorphic array Siswa[] dan loop Belajar().

Coba compile di Visual Studio Community (gratis untuk pelajar). Error adalah guru terbaik – debug dan pahami kenapa! Gunakan override tepat untuk method abstrak.

LEAVE A REPLY

Please enter your comment!
Please enter your name here