Seri bahasa pemrograman Python: #8 Pemrograman Berorientasi Objek (OOP) untuk Pemula

Seri bahasa pemrograman Python: #8 Pemrograman Berorientasi Objek (OOP) untuk Pemula

Python Pemrograman OOP

Pemrograman Berorientasi Objek (Object-Oriented Programming, OOP) adalah paradigma pemrograman yang berfokus pada objek—entitas yang memiliki data (atribut) dan perilaku (metode).

1️⃣ Apa Itu OOP dan Mengapa Diperlukan?

Pemrograman berorientasi objek sebetulnya tidak hanya digunakan pada Python, bahkan dalam banyak kasus, bahasa pemrograman seperti C++ dan Java lebih dulu dikenal ramah terhadap pengembangan dengan berorientasi objek.

Mengapa diperlukan?

Dengan OOP, program menjadi lebih mudah:

  • dipahami (mengelompokkan bagian-bagian yang terkait),
  • dikembangkan/digunakan kembali (reusability),
  • dan dirawat (maintainability).

📌 Contoh sederhana analogi dunia nyata:

Mobil adalah objek. Benda tersebut memiliki atribut (warna, merek, kecepatan) dan metode (menjalankan, berhenti, belok).

2️⃣ Konsep Dasar: Object dan Class

Konsep Penjelasan
Class Cetak biru (blueprint) atau template untuk membuat objek.
Object Instansiasi dari kelas, yaitu "benda nyata" yang dibuat dari cetak biru tersebut.

Contoh:

class Mobil:
    pass

# membuat objek
avanza = Mobil()
print(type(avanza))  # <class '__main__.Mobil'>

3️⃣ Membuat Kelas dan Objek di Python

Sebuah kelas dibuat dengan kata kunci class, dan objek dibuat dengan memanggil kelas seperti fungsi.

class Mobil:
    def __init__(self, merek, warna):
        self.merek = merek
        self.warna = warna

# Membuat objek
mobil1 = Mobil("Toyota", "Merah")
mobil2 = Mobil("Honda", "Hitam")

print(mobil1.merek)  # Toyota
print(mobil2.warna)  # Hitam
  • Fungsi __init__() disebut constructor, otomatis dipanggil ketika objek dibuat.
  • Parameter self selalu merujuk ke objek itu sendiri.

4️⃣ Attributes dan Methods

Atribut

Atribut adalah variabel yang melekat pada objek. Cek kode berikut ini:

class Mahasiswa:
    def __init__(self, nama, nim):
        self.nama = nama
        self.nim = nim
Metode

Adalah fungsi yang menjadi perilaku objek. Cek kode berikut ini:

class Mahasiswa:
    def __init__(self, nama, nim):
        self.nama = nama
        self.nim = nim

    def perkenalan(self):
        print(f"Halo, saya {self.nama} dengan NIM {self.nim}")

m1 = Mahasiswa("Zaenudin", "2310001")
m1.perkenalan()

5️⃣ Constructor (__init__) dan Self

Konstruktor __init__ digunakan untuk inisialisasi awal atribut, sedangkan self wajib ditulis di parameter pertama setiap metode dalam kelas.

class PersegiPanjang:
    def __init__(self, panjang, lebar):
        self.panjang = panjang
        self.lebar = lebar

    def luas(self):
        return self.panjang * self.lebar

pp = PersegiPanjang(5, 3)
print("Luas =", pp.luas())

Konstruktor self membuat tiap objek mempunyai data sendiri-sendiri.

6️⃣ Enkapsulasi (Encapsulation)

Enkapsulasi adalah menyembunyikan detail internal objek agar tidak bisa diakses langsung dari luar.

class Rekening:
    def __init__(self, pemilik, saldo):
        self.pemilik = pemilik
        self.__saldo = saldo  # atribut privat

    def lihat_saldo(self):
        print(f"Saldo {self.pemilik}: Rp{self.__saldo:,}")

    def setor(self, jumlah):
        self.__saldo += jumlah

    def tarik(self, jumlah):
        if jumlah <= self.__saldo:
            self.__saldo -= jumlah
        else:
            print("Saldo tidak cukup!")

r1 = Rekening("Andi", 100000)
r1.setor(50000)
r1.lihat_saldo()
# print(r1.__saldo)  ❌ tidak bisa, atribut privat

📘 Atribut yang diawali __ (dua garis bawah/underscore) dianggap private.

7️⃣ Pewarisan (Inheritance)

Pewarisan atau inheritance memungkinkan kelas baru mewarisi atribut & metode dari kelas lain. Cek kode berikut, di mana kelas Kendaraan digunakan kembali dan memberikan pewarisan terhadap kelas Mobil.

class Kendaraan:
    def __init__(self, nama, roda):
        self.nama = nama
        self.roda = roda

    def info(self):
        print(f"{self.nama} memiliki {self.roda} roda")

class Mobil(Kendaraan):  # mewarisi Kendaraan
    def __init__(self, nama, roda, bahan_bakar):
        super().__init__(nama, roda)  # panggil constructor induk
        self.bahan_bakar = bahan_bakar

    def info(self):
        super().info()
        print(f"Bahan bakar: {self.bahan_bakar}")

m = Mobil("Avanza", 4, "Bensin")
m.info()

8️⃣ Polimorfisme (Polymorphism)

Polimorfisme berarti “banyak bentuk”. Metode yang sama dapat berperilaku berbeda tergantung objeknya. Cek kode berikut ini:

class Burung:
    def bersuara(self):
        print("Cuit...")

class Ayam(Burung):
    def bersuara(self):
        print("Kukuruyuk!")

class Bebek(Burung):
    def bersuara(self):
        print("Kwek kwek!")

for hewan in [Ayam(), Bebek(), Burung()]:
    hewan.bersuara()

Output:

Kukuruyuk!
Kwek kwek!
Cuit...

9️⃣ Method Overriding dan super()

Kelas turunan dapat mengganti metode dari induknya. Kode super() digunakan untuk memanggil versi induk agar tidak hilang.

class Pegawai:
    def gaji(self):
        return 5000000

class Manajer(Pegawai):
    def gaji(self):
        return super().gaji() + 3000000

m = Manajer()
print("Gaji:", m.gaji())  # 8.000.000

🔟 Komposisi (Composition)

Selain pewarisan, kita dapat membangun kelas dari gabungan objek-objek lain. Misalnya:

class Mesin:
    def __init__(self, tenaga):
        self.tenaga = tenaga

class Mobil:
    def __init__(self, merek, mesin):
        self.merek = merek
        self.mesin = mesin

mesin1 = Mesin("120 HP")
mobil1 = Mobil("Honda", mesin1)
print(f"{mobil1.merek} dengan mesin {mobil1.mesin.tenaga}")

Komposisi membuat sistem modular dan fleksibel.

1️⃣1️⃣ Praktik Baik dalam OOP Python

  • Gunakan nama kelas PascalCase, misalnya MahasiswaAktif.
  • Simpan satu kelas per file jika programnya besar. Ingat konsep reusability dan maintainability.
  • Gunakan property untuk kontrol akses aman.
  • Gunakan docstring dan tipe anotasi untuk dokumentasi.
  • Gunakan abc (Abstract Base Class) untuk mendefinisikan antarmuka umum.
  • Gunakan komposisi jika hubungan bukan “is-a” tapi “has-a”.
  • Pertimbangkan dataclasses untuk kelas data murni, misalnya:
from dataclasses import dataclass

@dataclass
class Titik:
    x: float
    y: float

t = Titik(2.5, 4.1)
print(t.x, t.y)

1️⃣2️⃣ Ringkasan & Cheat Sheet

Konsep Penjelasan Singkat Contoh
Class Cetak biru (blueprint) objek class Mobil:
Object Instance dari class m = Mobil()
Atribut Data milik objek self.warna
Metode Fungsi milik objek def jalan(self):
Constructor Inisialisasi otomatis __init__()
Encapsulation Menyembunyikan data __saldo
Inheritance Pewarisan class Anak(Induk):
Polymorphism Metode berbeda, nama sama obj.metode()
Composition Gabungan objek lain Mobil(mesin=Mesin())

Referensi

  • Dokumentasi resmi Python: Classes
  • Buku Fluent Python (Luciano Ramalho)
  • Tutorial Real Python: “OOP in Python”

Tambah komentar

Previous Post Next Post