stdsquare²
🎓 Kelas
stdsquare / materi / slides / pertemuan-12
Tema
Japan
Arcade
Dark Retro
Font
‹ Daftar slide Pertemuan 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 dibuat def __init__(self, nama, harga): self.nama = nama # atribut self.harga = harga # atribut def info(self): # method return 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.

LangkahPerhitunganNilai
1. Atribut harga satuanself.hargaRp150.000
2. Atribut kuantitasself.kuantitas3
3. Subtotal150.000 × 3Rp450.000
4. Nilai diskon (10%)450.000 × 10%Rp45.000
5. Total bayar450.000 − 45.000Rp405.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).

LangkahPerhitunganNilai
1. Atribut total belanjatotal_belanjaRp245.000
2. Rasio program poin1 poin : Rp10.0001 : 10.000
3. Poin mentah245.000 ÷ 10.00024,5
4. Dibulatkan ke bawahint(24,5)24
5. Saldo poin baru0 (saldo lama) + 2424 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.

Object: kaosnama = "Kaos Polos"harga = 150000kaos.info()self ← kaosdef info(self):return f"{self.nama}: Rp{self.harga}"self kini "menjadi" objek kaoshasil: "Kaos Polos: Rp150000"

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 = privat def 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.

class ProdukkaosRp150.000tas_ranselRp275.000sepatuRp420.000
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 object def __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.

Rangkuman & Menuju Pertemuan 13

IstilahArti Singkat
ClassCetakan/blueprint — mendefinisikan atribut & method
Object / InstanceHasil nyata dari class, punya data sendiri
AtributData yang dimiliki objek (mis. nama, harga)
MethodFungsi yang menempel pada objek
selfRujukan ke objek yang sedang memanggil method
EncapsulationMembungkus & melindungi data, akses lewat method
Pertemuan 13: Implementasi OOP lanjutan — inheritance (pewarisan antar-class) dan polymorphism. Tugas: selesaikan & kumpulkan latihan class Pelanggan sebelum pertemuan berikutnya.