Abstraction
Abstraction (abstraksi) adalah salah satu konsep dalam OOP yang digunakan untuk menyembunyikan detail proses dan hanya menampilkan bagian yang memang perlu digunakan.
Sederhananya: menampilkan yang penting saja dan menyembunyikan detail yang tidak perlu diketahui pengguna.
Contohnya saat login ke sebuah aplikasi. Pengguna cukup memasukkan email dan password lalu menekan tombol login. Proses pengecekan database, validasi password, dan autentikasi tidak perlu diketahui oleh pengguna.
Dalam C#, abstraction biasanya diterapkan menggunakan:
- Abstract Class
- Interface
Abstraction juga berkaitan dengan konsep OOP lain seperti encapsulation, inheritance, dan polymorphism.
1. Abstract Class
1.1 Pengertian
Abstract Class adalah class yang digunakan sebagai dasar untuk class turunannya. Abstract class tidak bisa dibuat menjadi object secara langsung dan biasanya digunakan ketika beberapa class memiliki karakteristik atau proses dasar yang sama.
Abstract class dapat memiliki:
- Method biasa yang sudah memiliki isi.
- Abstract method yang belum memiliki isi.
- Property, field, dan constructor.
- Abstract method yang harus diimplementasikan class turunan menggunakan override.
Contohnya, Kendaraan dapat dijadikan abstract class karena Mobil dan Motor sama-sama termasuk kendaraan, tetapi cara setiap kendaraan berjalan bisa berbeda.
1.2 Contoh Abstract Class
Pada contoh tersebut, Kendaraan adalah abstract class. Method Jalan() belum memiliki implementasi di class Kendaraan, sehingga class Mobil harus mengimplementasikannya menggunakan override. Sementara itu, Info() adalah method biasa yang langsung dapat digunakan oleh class turunannya.
1.3 Contoh pada Sistem Pembayaran
Pada sistem pembayaran, bagian yang sama dapat ditempatkan di abstract class Pembayaran, sedangkan proses pembayarannya dibuat abstract karena setiap metode pembayaran mempunyai proses yang berbeda.
TransferBank dan EWallet sama-sama merupakan jenis Pembayaran, tetapi isi ProsesPembayaran() dibuat berbeda sesuai kebutuhan masing-masing.
2. Interface
2.1 Pengertian
Interface adalah aturan atau kontrak yang menentukan kemampuan yang harus dimiliki sebuah class. Jika sebuah class mengimplementasikan interface, class tersebut harus menyediakan implementasi dari anggota yang dibutuhkan interface tersebut.
Sederhananya: interface menentukan apa yang harus tersedia, sedangkan class menentukan bagaimana cara menjalankannya.
Interface cocok digunakan ketika beberapa class memiliki kemampuan yang sama meskipun tidak harus memiliki hubungan parent-child. Satu class juga dapat mengimplementasikan lebih dari satu interface.
2.2 Contoh Interface
IHewan menentukan bahwa class yang menggunakannya harus memiliki Suara(). Kucing dan Anjing sama-sama memenuhi kontrak tersebut, tetapi implementasinya berbeda.
2.3 Interface dalam Sistem Pembayaran
Pada sistem pembayaran, interface IPembayaran dapat digunakan sebagai kontrak agar setiap metode pembayaran memiliki proses pembayaran.
PaymentService cukup menerima object bertipe IPembayaran. Selama sebuah class memenuhi kontrak IPembayaran, class tersebut dapat digunakan oleh service tanpa harus mengetahui detail prosesnya.
Perbedaan Abstract Class dan Interface
Keduanya sama-sama dapat digunakan untuk abstraction, tetapi tujuan penggunaannya berbeda.
|
Abstract Class |
Interface |
|---|---|
Digunakan sebagai dasar class turunan |
Digunakan sebagai aturan atau kontrak |
Bisa memiliki method biasa dan abstract method |
Berfokus pada kemampuan/perilaku yang harus tersedia |
Bisa memiliki property, field, dan constructor |
Tidak digunakan sebagai class dasar yang menyimpan state dengan cara yang sama |
Class hanya dapat mewarisi satu class |
Class dapat mengimplementasikan beberapa interface |
Cocok untuk hubungan parent-child |
Cocok untuk kemampuan yang sama pada beberapa class |
Contoh Abstract Class: Mobil, Motor, dan Bus dapat diturunkan dari Kendaraan karena memiliki hubungan yang jelas sebagai jenis kendaraan.
Contoh Interface: TransferBank, EWallet, dan KartuKredit dapat menggunakan IPembayaran karena semuanya memiliki kemampuan melakukan pembayaran.
3. Class Library
3.1 Pengertian
Class Library adalah project yang berisi kumpulan kode yang dibuat agar dapat digunakan kembali oleh project lain. Isinya dapat berupa class, abstract class, interface, enum, utility, atau service.
Class Library biasanya tidak memiliki Main() karena bukan aplikasi yang dijalankan secara langsung. Pada .NET, hasil build Class Library biasanya berupa file .dll.
Kegunaan Class Library antara lain:
- Menghindari penulisan kode yang sama berulang kali.
- Memisahkan logic program dari aplikasi utama.
- Membuat struktur project lebih rapi dan modular.
- Mempermudah maintenance dan penggunaan kembali kode.
Contohnya, PaymentLibrary dapat menyimpan kode pembayaran dan kemudian digunakan oleh Console App, Desktop App, atau project lain.
3.2 Contoh Isi Class Library
Project lain yang sudah mereferensikan PaymentLibrary cukup memanggil namespace dan class yang tersedia di dalam library tersebut.
Membuat Class Library di Visual Studio
Contoh sederhana: PaymentLibrary sebagai Class Library dan PaymentConsole sebagai project yang menggunakannya.
- Buka Visual Studio, pilih Create a new project, lalu pilih Class Library (.NET).
- Beri nama project, misalnya PaymentLibrary.
- Tambahkan class atau interface yang dibutuhkan, misalnya IPembayaran.cs dan TransferBank.cs.
- Klik kanan PaymentLibrary → build → cek directory hasil.
- Pada Navigasi di atas, pilih File→ New → Procect/Solution → Console App, lalu beri nama PaymentConsole.
- Klik kanan PaymentConsole → Add → Project Reference → browse file .dll hasil build → centang PaymentLibrary → OK.
- Di Program.cs, tambahkan using PaymentLibrary; lalu gunakan class dari library.
Setelah Project Reference ditambahkan, PaymentConsole dapat menggunakan class public yang berada di PaymentLibrary. Ketika dibuild, Class Library akan menghasilkan file .dll.`
Ringkasan
| Konsep | Fungsi |
| Abstraction | Menyembunyikan detail implementasi dan menampilkan bagian penting. |
| Abstract Class | Menjadi dasar untuk class turunannya. |
| Interface | Memberikan aturan atau kontrak yang harus dipenuhi. |
| Class Library | Menyimpan dan mengorganisasi kode agar dapat digunakan kembali. |