Ngoding Tanpa OOP Itu Kayak Nyetir Tanpa Setir
Fundamentals
Ditulis 24 June 2025 Baca ± 15 menit
Adi sudah mulai nyaman dengan dunia ngoding.
Fungsi? Bisa.
If-else? Hafal luar kepala.
Looping? Kayak lagu favorit—diputar terus.
Dia bahkan sempat merasa percaya diri. “Ngoding itu ternyata nggak sesulit itu ya,” katanya suatu malam sambil menyeduh kopi sachet yang udah mulai jadi ritual sebelum ngoding.
Tapi suatu hari, semuanya berubah.
Tugas kuliah datang seperti hujan di pagi hari—tidak diminta, tidak dihindari,
tapi tetap bikin malas gerak:
"Buatlah program dengan pendekatan Object-Oriented Programming."
Adi membacanya seperti membaca resep masakan dengan bahan yang gak ada di
dapur.
Tidak ada kata print(),
tidak ada while True, dan
tidak ada contoh nyata yang bikin dia klik.
“Object... Oriented... Programming?” gumamnya sambil menatap terminal yang
kosong.
“Bikin objek? Ngapain bikin objek? Emang saya tukang plastik?”
Dia pun memulai perjalanan gelisahnya:
Googling sampai jari pegal, nonton video YouTube yang awalnya semangat tapi
lima menit kemudian udah kayak nonton dokumenter tanpa subtitle.
Ia buka forum-forum lama yang judulnya ‘Belajar OOP untuk Pemula’, tapi isinya
malah berdebat soal Single Responsibility Principle dan abstract factory
pattern—yang malah bikin tambah pening.
- Semua penjelasan terdengar teknis banget:
- “Class adalah blueprint”
- “Object adalah instance dari class”
- “Gunakan inheritance untuk reusability”
- “Encapsulation menyembunyikan data”
- “Polymorphism membuat kode lebih fleksibel”
Terdengar seperti mantra yang harus dihafalkan, bukan dipahami.
Alih-alih tercerahkan, Adi malah merasa tersesat.
Ia coba mengimplementasikan yang ia pahami seadanya, tapi hasilnya? Malah makin
ribet.
"Padahal kodenya yang lama jalan-jalan aja," pikirnya.
"Ya emang sih, agak acak-acakan. Tapi kan tetep bisa jalan.
Lah kenapa harus repot-repot ngubah ke OOP? Toh, hasil akhirnya sama aja,
kan?"
Itu yang ia pikir.
Sampai akhirnya, di tengah rasa frustrasi dan nyaris pasrah, Adi bertemu dengan
seseorang yang tidak menjelaskan OOP dengan textbook, tapi dengan cerita.
Dan sejak saat itu, semuanya mulai masuk akal.
Ketemu dengan Pak Bagas
Pak Bagas bukan dosen biasa. Ia bukan tipe yang suka menatap layar
presentasi sambil membaca slide yang bahkan mahasiswanya udah hafal di luar
kepala.
Ia lebih sering terlihat duduk di sudut kafe kampus, ngoding sambil menyeruput
kopi hitam tanpa gula, lengkap dengan laptop yang stiker Linux-nya mulai
mengelupas.
Ia dikenal karena analogi-analogi anehnya—tapi anehnya hal itu justru nyangkut di
kepala.
Pernah suatu kali ia menjelaskan konsep recursion pakai cerita anak
kecil yang nanya terus, “Habis itu gimana?”
Atau waktu bahas debugging pakai perumpamaan cari kunci rumah yang ketinggalan,
padahal kamu gak yakin tadi masukin ke tas atau nggak.
Dan yang paling legendaris:
“Kode yang jalan belum tentu bener… apalagi kalau cuma kamu yang ngerti.”
Bagi sebagian mahasiswa, kalimat itu sekilas terdengar bijak tapi membingungkan. Tapi bagi Adi, kalimat itu mulai terasa relevan—karena kodenya memang jalan, tapi makin lama makin sulit dipahami, bahkan oleh dirinya sendiri.
Satu sore, setelah berkutat dengan tugas OOP yang makin bikin stres, Adi akhirnya mendekat ke meja Pak Bagas yang dikelilingi aroma espresso dan tumpukan buku teknik yang tampak tidak tersentuh.
Dengan wajah lelah dan jari yang masih bekas tekanan keyboard, Adi bertanya:
“Pak, kenapa sih kita harus pake OOP? Emangnya def sama if doang gak cukup? Saya udah bisa bikin program pakai itu semua. Dan jalan.”
Pak Bagas tidak langsung menjawab. Ia hanya tersenyum seperti orang yang
tahu bahwa ini pertanyaan yang akan muncul cepat atau lambat.
Ia menyandarkan tubuh, menutup laptopnya perlahan, lalu menatap Adi.
“Adi, kamu bisa nyetir mobil?”
Adi agak bingung, tapi menjawab, “Bisa, Pak.”
“Kalau aku copotin setirnya, kamu masih bisa nyetir gak?”
Adi tertawa kecil, “Ya… gak bisa dong, Pak. Mau belok gimana?”
Pak Bagas mengangguk, lalu berkata sambil mengetuk meja dengan jarinya:
“Nah. Kode kamu itu ibarat mobil. Tanpa OOP, kamu nyetir mobil tanpa setir. Bisa jalan sih… tapi ngacau. Kamu gak tahu arahnya mau ke mana. Dan yang lebih parah, orang lain yang naik mobil itu bisa nabrak tembok karena gak ngerti sistemnya.”
Ia lalu menambahkan,
“Ngoding tanpa OOP mungkin bikin kamu ngerasa serba bisa. Tapi ketika programmu tumbuh, dan kamu harus kerja bareng orang lain—tanpa OOP, kode itu jadi monster yang kamu ciptakan sendiri, dan gak ada yang bisa jinakkan, termasuk kamu.”
Adi terdiam.
Itu mungkin analogi paling aneh yang pernah dia dengar…
...tapi entah kenapa, justru itu yang pertama kali masuk akal.
OOP Itu Kayak Merancang, Bukan Sekadar Nulis
“Ngoding procedural itu kayak numpuk bata sembarangan biar cepet jadi
tembok,” lanjut Pak Bagas sambil menggambar kotak-kotak acak di tisu kafe.
“Kamu emang bisa punya bangunan, tapi coba kalau temboknya retak—kamu bingung
yang mana harus dibongkar. Mau pasang jendela aja, bisa jadi satu sisi roboh
semua.”
Ia lalu menggambar ulang:
Garis-garis lurus, ruang-ruang dengan label: dapur, ruang tamu,
kamar tidur.
“Ngoding pakai OOP itu kayak jadi arsitek. Rancangannya jelas, tiap bagian punya tugas, dan gampang diperbaiki kalau ada yang rusak. Kalau kamar mandi bocor, kamu gak perlu bongkar ruang tamu.”
Adi memperhatikan gambar itu dengan saksama. Rasanya baru sekarang ia melihat koding seperti menyusun rumah, bukan hanya ngetik baris demi baris yang panjang dan ribet.
Pak Bagas melanjutkan:
“Kita sering mikir ngoding itu soal ‘gimana biar bisa jalan’. Padahal yang penting itu bukan cuma jalan, tapi bisa dibaca, dirawat, dikembangkan, bahkan dibagi ke tim. Nah, OOP hadir buat bantu kamu mikir kayak desainer sistem, bukan cuma tukang ketik kode.”
Object-Oriented Programming (OOP) bukan sekadar teknik.
Ia adalah cara memecah dunia nyata menjadi bagian-bagian kecil yang
bisa direpresentasikan dalam kode—yang masing-masing punya tanggung
jawab sendiri dan bisa bekerja sama dalam sistem yang lebih besar.
Alih-alih bikin daftar panjang perintah dari atas ke bawah, kamu membentuk sistem yang lebih seperti ekosistem:
- Ada objek yang menyimpan data,
- Ada yang memproses,
- Ada yang menampilkan,
- Dan semuanya berkomunikasi satu sama lain seperti manusia yang saling bicara lewat peran masing-masing.
“Kamu tahu kenapa banyak kode spaghetti itu muncul?” tanya Pak Bagas.
“Karena semuanya dicampur. Variabel global, fungsi tumpang tindih, logika
loncat-loncat. Tanpa OOP, kamu kayak chef yang nyampur semua bahan ke dalam
satu panci tanpa urutan. Hasilnya? Bubur rasa buncis saus cokelat.”
Adi ngakak kecil. Analogi itu aneh, tapi ngena banget.
“Kalau OOP?” tanya Adi.
“Kalau OOP, kamu kayak punya dapur profesional. Ada bagian yang motong bahan, ada yang masak, ada yang plating. Semuanya punya tugas, dan kalau ada masalah, kamu tahu harus cek di bagian mana. Lebih tenang, lebih elegan.”
Dan sejak percakapan itu, Adi mulai melihat kode dari sudut pandang yang
berbeda.
Ia tak lagi sekadar nulis kode yang bisa dieksekusi, tapi mulai belajar merancang
kode yang bisa dipahami, disusun ulang, dan diwariskan.
Karena ngoding itu bukan sprint—itu maraton.
Dan OOP? Itu seperti sepasang sepatu lari yang bikin kamu tetap kuat sampai
garis akhir.
Kenapa Harus Pakai “Objek”?
Coba kamu pikirin deh: kamu diminta bikin program untuk toko buku
kecil-kecilan.
Tanpa OOP, pendekatannya biasanya begini:
- judul_buku1 = "Laskar Pelangi"
- harga_buku1 = 50000
- stok_buku1 = 12
- judul_buku2 = "Bumi"
- harga_buku2 = 78000
- stok_buku2
= 7
...dan seterusnya.
Kalau kamu punya 100 buku? Selamat, kamu sedang membuat neraka
variabel.
Dan ketika nanti ada diskon besar-besaran atau perubahan harga massal? Kamu
bakal scroll ratusan baris kode, berharap gak typo satu pun.
Di sinilah OOP bikin hidup jadi lebih manusiawi.
Alih-alih membuat ratusan variabel global yang rawan tumpang tindih, kamu cukup buat satu cetakan, satu "class" bernama Buku.
classBuku: def__init__(self, judul, pengarang, harga, stok):< self.judul = judul self.pengarang = pengarang self.harga = harga< self.stok = stok deftampilkan_info(self): print(f"{self.judul} oleh {self.pengarang}, harga: {self.harga}, stok: {self.stok}") defubah_harga(self, harga_baru): self.harga = harga_baru defstok_berkurang(self, jumlah): self.stok -= jumlah Lalu, kalau kamu ingin menambahkan buku ke sistem? buku1 = Buku("Laskar Pelangi", "Andrea Hirata", 50000, 12) buku2 = Buku("Bumi", "Tere Liye", 78000, 7)
Jadi jauh lebih elegan, kan?
Sekarang setiap Buku yang
kamu buat adalah objek, seperti "benda virtual" yang hidup dalam
dunia programmu.
Setiap objek punya data (judul, pengarang, harga, stok) dan perilaku
(menampilkan informasi, mengubah harga, mengurangi stok).
Mau nambah ratusan buku? Gampang.
Mau bikin semua buku diskon 10%? Tinggal buat satu metode baru.
Mau ekspor semua buku ke file CSV? Tinggal looping objek-objek itu dan akses
atributnya satu per satu.
Ini bukan cuma soal gaya penulisan—tapi soal cara berpikir.
Dengan OOP, kamu diajak untuk memodelkan dunia nyata ke dalam logika
program.
Buku itu bukan sekadar judul_buku3
dan stok_buku3.
Tapi benar-benar jadi entitas utuh yang bisa diperlakukan seperti tokoh dalam
cerita—bisa berubah, bisa diakses, dan bisa berinteraksi.
Dan yang paling penting: kamu bisa fokus ke ide utama, bukan ke detail teknis kecil yang bikin capek.
Gimana kalau program toko bukumu nanti berkembang: Ada kasir, pelanggan, diskon,
nota, retur, laporan bulanan…
Kalau semua itu ditulis tanpa objek, kamu akan menciptakan tumpukan kode yang
menjulang lebih tinggi dari semangatmu ngoding.
Tapi kalau semua entitas itu kamu jadikan objek dengan class-nya
masing-masing?
Programmu akan terasa seperti organisasi yang rapi—masing-masing tahu tugasnya,
dan saling berkomunikasi dengan tertib.
Empat Pilar OOP
(a.k.a. Setir, Rem, Gas, dan Dashboard di Dunia Pemrograman)
Kalau kamu anggap program seperti
kendaraan, maka empat pilar OOP ini adalah bagian vitalnya. Tanpa salah
satunya, programmu mungkin tetap bisa jalan...
...tapi siap-siap oleng, sulit dikendalikan, dan bikin penumpangnya mabuk
logika.
1. Encapsulation – Rahasiakan yang Perlu Dirahasiakan
“Kamu nggak perlu tahu gimana mesin ATM kerja, kamu cuma perlu tekan tombol.”
Ini prinsip yang melindungi data
dari tangan-tangan usil.
Coba bayangkan kamu bikin program keuangan, dan semua orang bisa langsung
mengakses atau mengubah saldo user seenaknya. Ngeri, kan?
Dengan encapsulation, kamu membungkus data dan hanya memberikan akses lewat pintu resmi—alias metode yang kamu sediakan.
classATM: def__init__(self): self.__saldo = 0 # disembunyikan defsetor(self, jumlah): self.__saldo += jumlah defcek_saldo(self): return self.__saldo
Perhatikan: variabel __saldo diawali dengan dua garis bawah. Itu tandanya: "ini rahasia dalam rumah, jangan diobrak-abrik dari luar."
Mau tahu saldo? Harus lewat cek_saldo().
Mau nambah uang? Harus lewat setor().
Coba
kamu pikirkan, gimana kalau saldo bisa diubah dari luar dengan atm.__saldo =
9999999—satu baris, dan sistemmu hancur.
Itulah kenapa encapsulation penting: untuk membatasi akses, menjaga
integritas data, dan memaksa pengguna kode untuk lewat jalur yang benar.
2. Abstraction – Sembunyikan Kerumitan, Tampilkan Kesederhanaan
“Kalau bisa cukup satu tombol, kenapa harus buka kabel-kabel?”
Abstraction itu seperti
menyembunyikan dapur kotor di balik pintu restoran.
Pengunjung cukup lihat makanan datang ke meja. Mereka gak perlu lihat
panci-panci, api, atau adonan yang berantakan.
Dalam pemrograman, abstraction artinya menyembunyikan detail teknis dan hanya menampilkan antarmuka yang mudah digunakan.
classKamera: defambil_foto(self): print("Klik! Foto diambil.")
Kamu tinggal panggil ambil_foto(), dan selesai.
Kamu gak perlu tahu cara kerja sensor, shutter speed, atau pengaturan ISO.
Abstraction bikin kode:
- Lebih mudah digunakan
- Lebih mudah dibaca
- Lebih gak bikin stres
Intinya: kamu kasih hasil,
bukan keribetan.
Dan itu penting banget kalau kamu bikin program buat orang lain, atau bahkan...
diri kamu sendiri beberapa minggu ke depan.
3. Inheritance – Turunkan Sifat, Jangan Ulangi Kode
“Kalau punya banyak anak kelas, ngapain ajarin dari nol semua hal yang sama?”
Misalnya kamu bikin sistem hewan. Semua hewan bisa makan dan tidur, tapi masing-masing punya suara yang beda-beda.
Dengan inheritance, kamu
cukup bikin satu class
Hewan, lalu class Kucing dan class
Anjing tinggal warisi sifatnya.
Gak perlu nulis ulang fungsi makan() dan tidur() di setiap class.
classHewan: defmakan(self): print("Makan...") classKucing(Hewan): defsuara(self): print("Meong~") classAnjing(Hewan): defsuara(self): print("Guk!")
Sekarang Kucing dan Anjing otomatis bisa makan(), karena mereka anak dari Hewan.
Ini sesuai prinsip DRY: Don’t
Repeat Yourself.
Jangan ngoding kayak kaset rusak yang muter kalimat sama terus.
Dengan inheritance, kamu tinggal warisi fitur umum, dan fokus bikin fitur yang unik.
4. Polymorphism – Satu Perintah, Banyak Perilaku
“Kata ‘jalan’ artinya beda kalau yang jalan itu manusia, mobil, atau kucing.”
Polymorphism adalah tentang
fleksibilitas.
Kamu punya satu metode yang sama—tapi ketika dipanggil oleh objek berbeda,
hasilnya juga beda.
Contoh:
classManusia: defjalan(self): print("Manusia berjalan.") classMobil: defjalan(self): print("Mobil melaju.") defjalankan(objek): objek.jalan()
Sekarang kamu bisa panggil:
jalankan(Manusia()) # Output: Manusia berjalan. jalankan(Mobil()) # Output: Mobil melaju.
Metode jalan() tetap satu nama, tapi tiap objek menafsirkan dengan caranya sendiri.
Ini bikin kode terstruktur tapi lentur—bisa diubah dan dikembangkan tanpa mengacak-acak fungsi utama.
Kalau nanti kamu tambahkan class Robot, kamu cukup buat fungsi jalan() di sana—dan jalankan() tetap bisa pakai robot tanpa perubahan.
Studi Kasus Mini: Keranjang Belanja
Setelah tercerahkan, Adi iseng bikin aplikasi belanja kecil:
classProduk: def__init__(self, nama, harga): self.nama = nama self.harga = harga classKeranjang: def__init__(self): self.isi = [] deftambah(self, produk): self.isi.append(produk) deftotal(self): returnsum(p.harga for p in self.isi)
Dan hasil penggunaannya:
p1 = Produk("Kopi", 18000) p2 = Produk("Susu", 15000) k = Keranjang() k.tambah(p1) k.tambah(p2) print("Total belanja:", k.total())
Simple, rapi, dan scalable. Mau tambah diskon? Mau simpan ke database? Tinggal kembangkan tanpa pusing bongkar semua.
Pertanyaan klasik dari banyak pemula—dan Adi pun pernah menanyakannya:
“Kalau programnya masih kecil, ngapain repot-repot mikirin OOP segala?”
Dan ya, itu bukan pertanyaan bodoh.
Bahkan itu pertanyaan yang sehat.
Karena pada dasarnya, kita semua ingin solusi yang praktis dan gak ribet.
Tapi begini kata Pak Bagas waktu Adi nanya hal itu:
“Kalau programmu masih 50 baris ya
nggak terlalu terasa. Tapi coba nanti ketika udah ribuan baris.
Tanpa OOP, kamu bakal tenggelam di lautan variabel dan fungsi acak.”
Kamu akan mulai merasa:
- Kok nama variabelnya sama?
- Ini fungsi buat apa ya tadi?
- Kalau aku ganti di sini, bagian lain rusak nggak?
- Ini kenapa semua file saling nyangkut kayak kabel headset?
Kalau kamu pernah buka proyek lama
dan butuh waktu sejam buat ngerti kode kamu sendiri…
Maka kamu udah merasakan gejala awal dari “teknikal utang” akibat nggak pakai
struktur yang jelas.
Dan di sinilah OOP bersinar.
Bukan karena dia keren, bukan karena dia tren—tapi karena dia membantu kamu
berpikir dalam unit-unit kecil yang masuk akal.
Setiap objek mewakili satu bagian nyata dalam sistemmu.
Setiap class punya tanggung jawab sendiri.
Dan kalau ada bug, kamu tahu harus periksa siapa, bukan nebak-nebak dari
mana asalnya.
Framework modern seperti Laravel,
Django, Spring, Flask (versi OOP), Unity, Flutter—semuanya berdiri di atas
pondasi OOP.
Bahkan library Python seperti pandas, requests, atau matplotlib pun pakai pendekatan berbasis objek.
Coba aja ketik df.head() di pandas.
df adalah objek. head() adalah metode milik objek itu.
Tanpa sadar, kamu udah pakai OOP meskipun belum belajar formalnya.
Dan ketika kamu pakai library pihak
ketiga, mereka gak nyuruh kamu copas ribuan baris fungsi.
Mereka kasih kamu objek siap pakai—yang bisa kamu panggil, kombinasikan, dan
kendalikan.
Artinya: dunia nyata pemrograman modern udah default-nya pakai OOP.
Ngoding tanpa OOP? Bisa.
Tapi seperti nyetir mobil manual tanpa power steering. Bisa juga. Tapi coba
pakai itu di tengah macet, pas jalan menanjak, sambil nahan rem tangan karena
rem utama agak ngadat.
Capek. Berat. Frustrasi.
Sementara ngoding dengan OOP itu
seperti nyetir mobil matic, setir enteng, semua fitur ada di tempatnya.
Ketika kamu mau belok, kamu cukup gerakkan tangan—bukan putar setir tiga
putaran penuh sambil ngelawan gravitasi.
OOP itu bukan aturan kaku. Tapi alat
bantu.
Dia bukan wajib—tapi kalau kamu serius mau bikin program yang tumbuh besar,
dia jadi kebutuhan.
Karena pada akhirnya, kamu bukan
cuma sedang menulis kode.
Kamu sedang membangun sistem, yang mungkin suatu hari harus kamu
kembangkan, serahkan ke tim lain, atau debug dalam waktu mepet deadline.
Dan percaya deh, saat itu tiba…
...kamu bakal bersyukur pernah kenal OOP.
Karena Kode Bukan Sekadar Jalan, Tapi Perlu Arah dan Kendali
Setelah ngobrol panjang di kafe, ditemani aroma kopi hitam dan coretan-coretan di tisu yang entah kenapa justru lebih masuk akal daripada buku tebal pegangan kuliah, Adi pulang dengan satu kesadaran baru.
Selama ini, ia merasa "asal kodenya jalan, ya udah cukup."
Tapi ternyata... nggak sesederhana itu.
Ngoding itu bukan soal banyaknya baris kode yang kamu ketik,
Tapi gimana kamu menyusunnya.
Karena pada akhirnya, kode bukan cuma untuk komputer.
Komputer sih nggak peduli kamu pakai nama variabel x, y,
atau data_final_final_fix123.
Tapi manusia peduli. Termasuk kamu sendiri, tiga minggu dari sekarang, saat
harus revisi sistem yang kamu bangun dengan mata setengah ngantuk dan deadline
mepet.
Dengan OOP, kamu gak cuma ngoding buat hari ini.
Kamu sedang menanam struktur—fondasi—yang bisa kamu bangun pelan-pelan.
Yang bisa kamu ajak tumbuh.
Yang bisa kamu wariskan ke rekan timmu, atau bahkan ke dirimu sendiri di masa
depan.
OOP ngajarin kamu berpikir sebagai arsitek sistem, bukan tukang tambal kode.
Kamu jadi tahu siapa bertanggung jawab atas apa.
Kamu gak lagi bingung, "fungsi ini ngapain ya?"
Kamu bisa lihat struktur programmu kayak rumah yang kamu desain sendiri—rapi,
teratur, dan punya alur logika yang enak diikuti.
Dan satu hal penting lagi:
OOP bukan cuma alat teknis. Dia mengubah cara kamu berpikir.
Kamu mulai membayangkan masalah dalam bentuk objek nyata.
Kamu mulai fokus pada peran, bukan cuma proses.
Adi kini tahu: ngoding bukan hanya soal menyuruh komputer melakukan
sesuatu.
Tapi soal membangun dunia logika yang masuk akal.
Karena ngoding tanpa OOP, itu kayak nyetir tanpa setir:
Bisa sih… tapi mau belok ke mana?
Dan kalau tiba-tiba harus ngerem mendadak atau ganti rute—kamu siap?
Dan pada akhirnya, Adi sadar:
Bukan seberapa cepat kamu bisa menulis kode,
Tapi seberapa jauh dan stabil kamu bisa melaju dengannya.
Karena kode yang baik bukan yang cepat selesai—
Tapi yang bisa terus berjalan,
bahkan saat kamu nggak lagi jadi satu-satunya pengemudi.
Leave a comment