Menu
CoddyTech

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.

Oleh Kevin Spektor, Co-founder & CTO

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

TingkatanYang kamu olahYang disembunyikannya
Programmuprint("hi"), sorted(names)Cara library mengerjakannya
Python dan library standarnyaString, list, fileManajemen memori, system call
Interpreter (CPython)BytecodeKode C dan kode mesin yang menjalankannya
Sistem operasiFile, prosesBlok disk, driver perangkat, penjadwalan CPU
HardwareInstruksi mesinTransistor 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.

AbstraksiEnkapsulasi
Pertanyaan yang dijawabnyaApa yang dilakukan ini?Siapa yang boleh menyentuh datanya?
FokusInterface: operasi yang ditawarkanBagian dalam: data di balik interface
Tool utamaFungsi, abstract class, interface, modulprivate, _name, property, #fields
ContohNotifier.send() berfungsi untuk email dan SMS_balance hanya berubah lewat withdraw()
TingkatanDesainImplementasi

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?
Fungsi adalah contoh yang paling sederhana: kamu memanggil 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?
Setiap fungsi, class, dan modul di Python adalah abstraksi atas kode di dalamnya. Untuk versi yang formal, modul standar 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?
Java mengungkapkan abstraksi lewat abstract class dan interface. Abstract class boleh berisi abstract method, yang tidak punya badan dan harus diimplementasikan oleh subclass, dan tidak bisa diinstansiasi dengan 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.

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai