Apa Itu Abstraksi dalam Pemrograman?
Dalam pemrograman, abstraksi (abstraction) berarti menyembunyikan detail cara kerja sesuatu di balik interface yang lebih sederhana, sehingga kamu bisa memakainya hanya dengan tahu apa yang dilakukannya. Memanggil sorted(names) mengurutkan sebuah list tanpa kamu perlu menulis, atau bahkan melihat, algoritma pengurutannya.
Diperbarui 24 September 2026
Saat kamu menulis print("hi"), kamu tidak memikirkan bagaimana huruf-huruf itu sampai ke layar. Di bawah satu baris itu, Python mengubah teksnya menjadi byte dan meminta sistem operasi untuk menuliskannya, sistem operasi menyerahkannya ke terminalmu, dan terminal menggambar setiap huruf sebagai piksel dengan sebuah font. Setiap lapisan menawarkan janji sederhana kepada lapisan di atasnya dan menyembunyikan cara ia menepati janji itu. Penyembunyian itulah abstraksi, dan setiap program berdiri di atas banyak lapisan seperti itu.
Tingkatan abstraksi
| Tingkatan | Yang kamu olah | Yang disembunyikannya |
|---|---|---|
| Programmu | print("hi"), sorted(names) | Cara library mengerjakannya |
| Python dan library standarnya | String, list, file | Manajemen memori, system call |
| Interpreter (CPython) | Bytecode | Kode C dan kode mesin yang menjalankannya |
| Sistem operasi | File, proses | Blok disk, driver perangkat, penjadwalan CPU |
| Hardware | Instruksi mesin | Transistor dan sinyal listrik |
Setiap tingkatan dibangun dari tingkatan di bawahnya dan bisa dipahami tanpanya. Kamu bisa menulis Python yang berjalan tanpa tahu apa itu blok disk, dan sistem operasi bisa menyimpan file tanpa tahu bahwa isinya kode Python.
Cara kerja abstraksi dalam kode
Programmer membangun lapisannya sendiri dengan dua cara utama.
Abstraksi prosedural adalah fungsi. Nama, parameter, dan nilai kembaliannya adalah interface-nya; badannya adalah detail yang disembunyikan. Begitu average(scores) ada, bagian program lainnya memakainya tanpa membaca bagaimana fungsi itu menjumlahkan dan membagi.
Abstraksi data mendefinisikan sebuah tipe berdasarkan apa yang bisa kamu lakukan dengannya, bukan bagaimana tipe itu menyimpan sesuatu. Queue berarti "tambah di belakang, ambil dari depan". Bagaimana item-itemnya tersusun di memori adalah keputusan privat:
serving soup
serving pasta
serving cake
Kode di bagian bawah tidak tahu apa pun tentang deque. Kalau kamu menggantinya dengan list biasa dan pop(0), output-nya identik, hanya lebih lambat untuk antrean yang panjang, karena menghapus item pertama dari sebuah list memindahkan setiap item lainnya. Interface-nya tetap sama, jadi tidak ada yang perlu diubah di luar class itu.
Abstract class dan interface
Dalam pemrograman berorientasi objek, abstraksi biasanya berarti menyatakan apa yang harus dilakukan sekelompok class sambil menyerahkan bagaimana-nya kepada setiap class. Di Python, modul abc menandai sebuah method sebagai abstract; class dengan abstract method yang belum diimplementasikan tidak bisa diinstansiasi:
email to ana@example.com: Your package arrives today
sms to +15550100: Your package arrives today
Notifier is abstract: create an Email or an SMS instead
remind() hanya bergantung pada abstraksinya: apa saja yang punya method send. Menambahkan push notification berarti menulis satu class baru, dan remind() tetap tidak tersentuh. Langkah terakhir itu, satu pemanggilan yang menjalankan kode berbeda untuk class yang berbeda, adalah polimorfisme: abstraksi mendefinisikan interface bersama, polimorfisme membuatnya berfungsi.
Java punya tool yang sama dalam bentuk kata kunci:
interface Notifier {
void send(String to, String text);
}
class Email implements Notifier {
public void send(String to, String text) { /* talk to the mail server */ }
}
Menulis new Notifier() adalah compile error, karena interface tidak punya implementasi yang bisa dijalankan. Dokumentasi menjelaskan abstract class dan interface di Java secara detail.
Abstraksi vs enkapsulasi
Kedua ide ini begitu sering muncul bersama sehingga mudah tertukar.
| Abstraksi | Enkapsulasi | |
|---|---|---|
| Pertanyaan yang dijawabnya | Apa yang dilakukan ini? | Siapa yang boleh menyentuh datanya? |
| Fokus | Interface: operasi yang ditawarkan | Bagian dalam: data di balik interface |
| Tool utama | Fungsi, abstract class, interface, modul | private, _name, property, #fields |
| Contoh | Notifier.send() berfungsi untuk email dan SMS | _balance hanya berubah lewat withdraw() |
| Tingkatan | Desain | Implementasi |
Abstraksi menentukan operasi mana yang ditampilkan; enkapsulasi memastikan sisanya tetap tersembunyi. Queue di atas melakukan keduanya: add dan next adalah abstraksinya, dan garis bawah pada _items adalah enkapsulasinya.
Abstraksi yang bocor dan kesalahan lainnya
Joel Spolsky menamai law of leaky abstractions pada 2002: setiap abstraksi yang tidak sepele membiarkan sebagian detail tersembunyinya bocor keluar. Bilangan floating point adalah contoh kebocoran yang klasik. Bilangan ini terlihat seperti desimal biasa, sampai penyimpanan biner di bawahnya ikut terlihat:
0.30000000000000004
False
Baik 0,1 maupun 0,2 tidak bisa disimpan secara persis dalam bit biner, jadi hasil penjumlahannya sedikit meleset. Kamu bisa memakai float bertahun-tahun tanpa memikirkan hal ini, tetapi tidak selamanya, itulah sebabnya ada gunanya mengenal satu lapisan di bawah lapisan tempatmu bekerja.
Dua kesalahan lain juga umum:
- Membuat abstraksi terlalu cepat. Hierarki class yang dibangun untuk kasus yang tidak pernah datang adalah kode tambahan yang harus dibaca dan diubah. Sandi Metz merumuskannya sebagai "duplication is far cheaper than the wrong abstraction" (duplikasi jauh lebih murah daripada abstraksi yang salah).
- Menyamakan abstraksi dengan kata kunci
abstract. Abstract class hanya salah satu tool. Setiap fungsi yang dinamai dengan baik juga merupakan abstraksi.
Lanjut ke mana
Baca enkapsulasi dan polimorfisme untuk melengkapi gambaran pemrograman berorientasi objek. Halaman sistem operasi menunjukkan abstraksi terbesar yang diandalkan program-programmu. Untuk berlatih, kursus Python membangun class dan fungsi sejak awal, dan kursus Java membahas abstract class dan interface.
Pertanyaan yang sering diajukan
Apa contoh abstraksi?
len(items) dengan tahu apa yang dikembalikannya, bukan bagaimana Python menghitungnya. Pedal mobil adalah versi sehari-harinya, karena kamu mengatur kecepatan tanpa tahu bagaimana mesin membakar bahan bakar. Dalam kode berorientasi objek, interface seperti Notifier dengan satu method send adalah abstraksi atas email, SMS, dan push notification.Apa itu abstraksi di Python?
abc membuatmu bisa mendeklarasikan abstract base class dengan @abstractmethod; Python lalu menolak membuat objek dari class itu, atau dari subclass mana pun yang belum mengimplementasikan setiap abstract method.Apa itu abstraksi dalam pemrograman Java?
new. Interface mendaftar method-method yang wajib disediakan oleh setiap class yang mengimplementasikannya, dan sebuah class bisa mengimplementasikan beberapa interface.Apa saja empat pilar OOP?
Enkapsulasi, abstraksi, inheritance, dan polimorfisme. Enkapsulasi melindungi data sebuah objek, abstraksi hanya menampilkan apa yang dilakukan objek itu, inheritance membuat sebuah class bisa memakai ulang kode class lain, dan polimorfisme membuat satu potong kode bisa bekerja dengan banyak tipe lewat interface yang sama.
Bisakah abstraksi membuat kode lebih buruk?
Bisa, kalau datang terlalu cepat atau menyembunyikan hal yang salah. Kode yang dibuat untuk kasus yang tidak pernah datang punya lapisan tambahan yang harus dibaca dan diubah tanpa manfaat apa pun. Pedoman yang umum adalah menunggu sampai kamu menulis kode yang mirip dua atau tiga kali, supaya bentuk yang sama di antaranya sudah jelas sebelum kamu memberinya nama.