‹ Daftar slidePertemuan 12: Konsep Object-Oriented Programming (OOP)
Program Studi Bisnis Digital • FEB UNDIP
Algoritma dan Pemrograman
Pertemuan 12 — Konsep Object-Oriented Programming (OOP)
Dari kumpulan fungsi menuju cara berpikir baru: class, object, dan encapsulation — fondasi pemrograman modern yang dipakai hampir semua aplikasi bisnis digital.
RPS MINGGU 13 • 2 × 50 MENIT
Tujuan Pembelajaran Hari Ini
Sesuai RPS minggu 13, setelah pertemuan ini Anda diharapkan mampu menjelaskan dan menerapkan konsep dasar object-oriented programming. Secara rinci:
Konsep
Class & Object
Memahami perbedaan class (cetakan/blueprint) dan object (hasil nyata dari cetakan itu), serta cara membuat keduanya di Python.
Konsep
Encapsulation
Memahami mengapa data sebuah objek perlu "dibungkus" dan dilindungi, bukan diakses sembarangan dari luar.
Mengapa Kita Butuh OOP?
Ingat kembali Pertemuan 6 (fungsi) dan Pertemuan 7–8 (list, dict). Bayangkan Anda mengelola 100 produk toko online: nama, harga, stok, kategori — semua disimpan di variabel dan list terpisah.
Cara lama (prosedural):nama_produk = [...], harga_produk = [...], stok_produk = [...] — semua list terpisah, mudah tertukar indeksnya, sulit dirawat saat aplikasi membesar.
Cara OOP: satu class Produk membungkus nama, harga, dan stok jadi satu paket per produk — rapi, aman, dan mudah dipakai ulang untuk ribuan produk.
Hampir semua framework bisnis digital yang akan Anda temui nanti — Django, Laravel, sistem POS UMKM — dibangun di atas OOP.
Bagian 1 dari 3
Dari Fungsi ke Objek
Mengenal class dan object sebagai satuan dasar OOP — apa bedanya cetakan kue dengan kue yang sudah jadi.
Prosedural vs Object-Oriented
Gaya Prosedural (P1–P11)
Data dan fungsi terpisah
Variabel/list berdiri sendiri
Cocok untuk skrip pendek dan sederhana
Contoh: hitung_diskon(harga, persen)
Gaya OOP (mulai hari ini)
Data dan perilaku dibungkus jadi satu objek
Satu class = cetakan untuk banyak objek serupa
Cocok untuk aplikasi besar yang terus berkembang
Contoh: produk.hitung_diskon()
Bukan berarti fungsi (Pertemuan 6) menjadi tidak berguna — dalam OOP, fungsi tetap dipakai, hanya sekarang "menempel" pada objek dan disebut method.
Class dan Object: Cetakan vs Kue
Class
Cetakan
Blueprint atau rancangan. Mendefinisikan data apa saja (atribut) dan bisa melakukan apa saja (method) yang akan dimiliki setiap objek. Class sendiri belum berupa data konkret.
Object
Kue Jadi
Hasil nyata dari class — disebut juga instance. Satu class Produk bisa menghasilkan ratusan object produk berbeda, masing-masing dengan nama dan harga sendiri.
Analogi: class = cetakan kue bulat; object = kue nastar, kue kastengel, kue putri salju — semua dari cetakan yang sama, isinya beda-beda.
Menulis Class Pertama di Python
Struktur dasar sebuah class: kata kunci class, nama class (huruf besar di awal), lalu method khusus __init__ untuk mengisi data awal.
class Produk:
# __init__ = constructor, jalan otomatis saat objek dibuatdef __init__(self, nama, harga):
self.nama = nama # atribut
self.harga = harga # atributdef info(self): # methodreturn f"{self.nama}: Rp{self.harga}"
kaos = Produk("Kaos Polos", 150000) # membuat object
print(kaos.info())
Glosarium: atribut = data yang dimiliki objek (mis. nama, harga). Method = fungsi milik objek (mis. info()). Constructor = method __init__ yang otomatis dijalankan saat objek dibuat. self = rujukan ke objek itu sendiri (dibahas detail di Slide 11).
Hitung dari Nol: Kalkulator Harga Toko Online
Object Produk: nama "Kaos Polos", harga satuan Rp150.000, kuantitas 3, diskon member 10%. Method hitung_total() menghitung total bayar.
Langkah
Perhitungan
Nilai
1. Atribut harga satuan
self.harga
Rp150.000
2. Atribut kuantitas
self.kuantitas
3
3. Subtotal
150.000 × 3
Rp450.000
4. Nilai diskon (10%)
450.000 × 10%
Rp45.000
5. Total bayar
450.000 − 45.000
Rp405.000
Total Bayar (method hitung_total)
Rp405.000
Hitung dari Nol: Poin Loyalitas Pelanggan UMKM
Object Pelanggan bernama "Bu Siti". Program loyalitas UMKM: 1 poin per Rp10.000 belanja, dibulatkan ke bawah. Method tambah_poin(total_belanja).
Langkah
Perhitungan
Nilai
1. Atribut total belanja
total_belanja
Rp245.000
2. Rasio program poin
1 poin : Rp10.000
1 : 10.000
3. Poin mentah
245.000 ÷ 10.000
24,5
4. Dibulatkan ke bawah
int(24,5)
24
5. Saldo poin baru
0 (saldo lama) + 24
24 poin
Saldo Poin Bu Siti
24 poin
Bagian 2 dari 3
Self dan Encapsulation
Bagaimana Python tahu objek mana yang sedang "berbicara", dan mengapa data objek perlu dilindungi.
Apa Itu self?
self adalah rujukan ke objek yang sedang memanggil method itu. Python otomatis mengoper objeknya sebagai parameter pertama — Anda tidak perlu menuliskannya saat memanggil method.
Encapsulation: Membungkus dan Melindungi Data
Encapsulation (enkapsulasi) adalah prinsip membungkus atribut di dalam objek dan membatasi akses langsung dari luar — data hanya boleh diubah lewat method yang disediakan class.
Tanpa encapsulation: siapa pun bisa menulis rekening.saldo = -500000 langsung dari luar class — saldo minus tidak masuk akal, tapi Python tidak mencegahnya.
Dengan encapsulation: atribut ditandai "privat" (awalan _), diubah hanya lewat method seperti tarik_saldo() yang bisa memvalidasi aturan bisnis.
Encapsulation dalam Kode: Rekening Pelanggan
class RekeningPelanggan:
def __init__(self, nama, saldo_awal):
self.nama = nama
self._saldo = saldo_awal # underscore = privatdef tarik_saldo(self, jumlah):
if jumlah > self._saldo:
return "Saldo tidak cukup"
self._saldo -= jumlah
return f"Berhasil, sisa saldo: Rp{self._saldo}"
rek = RekeningPelanggan("Pak Budi", 100000)
print(rek.tarik_saldo(150000)) # ditolak, saldo < 150000
Method tarik_saldo() jadi "pintu resmi" satu-satunya untuk mengubah _saldo — di sinilah aturan bisnis (saldo tidak boleh minus) ditegakkan.
Satu Class, Banyak Object
Class hanya ditulis sekali, tapi bisa "mencetak" object sebanyak yang dibutuhkan — masing-masing punya data sendiri, method yang sama.
Tiga object di atas semuanya lahir dari class Produk yang sama — struktur (atribut & method) identik, isi data berbeda-beda.
Constructor: Nilai Wajib vs Nilai Default
Parameter __init__ bisa diberi nilai default — objek tetap bisa dibuat walau sebagian data belum diisi saat itu.
class Produk:
def __init__(self, nama, harga, stok=0):
self.nama = nama # wajib diisi
self.harga = harga # wajib diisi
self.stok = stok # default 0 jika tidak diisi
p1 = Produk("Kaos Polos", 150000, 20) # stok = 20
p2 = Produk("Topi", 50000) # stok = 0 (default)
p1.stok
20
p2.stok
0
Bagian 3 dari 3
OOP dalam Bisnis Digital
Menerapkan class dan object pada studi kasus sistem antrian UMKM, lalu mengenali jebakan yang sering dilakukan pemula.
Studi Kasus: Sistem Antrian Sederhana UMKM
Warung makan ingin sistem antrian digital. Setiap pelanggan jadi satu object AntrianPelanggan dengan nomor urut otomatis.
class AntrianPelanggan:
total_antrian = 0 # dihitung bersama semua objectdef __init__(self, nama):
self.nama = nama
AntrianPelanggan.total_antrian += 1
self.nomor = AntrianPelanggan.total_antrian
def panggil(self):
return f"Nomor {self.nomor}: {self.nama}, silakan"
p1 = AntrianPelanggan("Bu Ani") # nomor = 1
p2 = AntrianPelanggan("Pak Joko") # nomor = 2
print(p2.panggil()) # "Nomor 2: Pak Joko, silakan"
Kesalahan Umum Pemula Menulis Class
Lupa parameter self def info(): ... akan error — setiap method wajib punya self sebagai parameter pertama.
Salah nama constructor Menulis def init(self): (lupa dua underscore) — Python tidak akan memanggilnya otomatis.
Lupa self. di dalam method Menulis nama = nama tanpa self. — data tidak tersimpan di objek, hilang setelah method selesai.
Class tanpa huruf besar Menulis class produk: tetap berjalan, tapi melanggar konvensi PascalCase yang dipakai seluruh komunitas Python.
Latihan Kelas: Class Pelanggan UMKM
Kerjakan berpasangan, 15 menit. Buat class Pelanggan untuk toko kelontong daring:
Instruksi
Atribut: nama, total_belanja (mulai dari 0)
Method belanja(jumlah) — menambah total_belanja
Method cek_status() — kembalikan "Member VIP" jika total_belanja > Rp500.000, selain itu "Member Biasa"
Buat 2 object pelanggan, uji method-nya, cetak hasilnya
Gunakan pola encapsulation dari Slide 13 sebagai referensi — validasi di dalam method, bukan di luar class.