Modul 5 — Pemrograman Berorientasi Objek (PBO / OOP)

5.4 Polymorphism

Konsep polimorfisme ('banyak bentuk'), mekanisme Method Overriding pada hierarki class, konsep dinamis Duck Typing khas Python, penanganan heterogen objek via antarmuka superclass, serta perbedaan mendasar Overriding vs Overloading.

Progres disimpan di browser ini saja.

A. Konsep Dasar Polymorphism

Polymorphism berasal dari bahasa Yunani yang berarti 'banyak bentuk'. Dalam paradigma OOP, polimorfisme memungkinkan pemanggilan satu nama method yang sama menghasilkan aksi atau perilaku yang berbeda-beda tergantung pada tipe objek nyata yang sedang mengeksekusinya.

B. Method Overriding (Penimpaan Method)

Method Overriding terjadi ketika sebuah subclass mendefinisikan ulang method yang sudah ada pada superclass-nya dengan nama dan parameter identik, namun memberikan logika isi perintah yang berbeda:

class Hewan:
    def suara(self):
        return '...'

class Kucing(Hewan):
    def suara(self):          # Override method suara milik Hewan
        return 'Meong'

class Anjing(Hewan):
    def suara(self):          # Override method suara milik Hewan
        return 'Guk guk'

class Sapi(Hewan):
    def suara(self):          # Override method suara milik Hewan
        return 'Moo'

# Eksekusi Polimorfis Melalui Satu Perulangan Tunggal
daftar_hewan = [Hewan(), Kucing(), Anjing(), Sapi()]
for h in daftar_hewan:
    print(h.suara(), end=' ')  # Output: ... Meong Guk guk Moo

C. Penggunaan Referensi Superclass & Duck Typing

Fungsi yang sama dapat menerima berbagai jenis objek turunan yang berbeda selama objek-objek tersebut mengimplementasikan method yang dipanggil:

def bunyikan(obj_hewan):
    # Fungsi ini tidak peduli apakah yang masuk Kucing, Anjing, atau Sapi
    # Selama memiliki method suara(), fungsi dapat mengeksekusinya secara mulus
    print(obj_hewan.suara())

bunyikan(Kucing())  # Output: Meong
bunyikan(Sapi())    # Output: Moo

Prinsip Duck Typing di Python: *'Jika sesuatu berjalan seperti bebek dan bersuara seperti bebek, maka ia dianggap sebagai bebek.'* Python tidak mewajibkan tipe data statis yang kaku; yang terpenting adalah ketersediaan method yang sesuai.

D. Perbedaan Hakiki: Overriding vs Overloading

Kriteria PembandingMethod Overriding (Penimpaan)Method Overloading (Beban Lebih)
Lokasi / Ruang LingkupTerjadi antara dua class yang memiliki relasi pewarisan (Class Induk vs Class Anak).Terjadi di dalam satu class yang sama.
Nama MethodNama method sama persis.Nama method sama persis.
Parameter / SignatureJumlah dan nama parameter sama persis.Jumlah atau tipe parameter berbeda-beda.
Dukungan di PythonDidukung penuh secara langsung bawaan bahasa.Tidak didukung langsung (jika ada dua `def` sama nama di satu class, fungsi terakhir menimpa yang lama; disiasati memakai parameter default `*args`).

E. Analisis Kasus Soal MCMA (Prototipe Matriks)

class A:
    def xxx(self): return 'A'
class B(A):
    def xxx(self): return 'B'
class C(A):
    def xxx(self): return 'C'

def proses(obj):
    return obj.xxx()

for item in [A(), B(), C()]:
    print(proses(item))      # Output: A, B, C

Penilaian Pernyataan Soal:

  • Benar: Method `xxx()` pada class B dan C merupakan implementasi dari *method overriding* terhadap class A.
  • Benar: Fungsi `proses()` dapat menerima argumen objek dari berbagai class yang berbeda selama memiliki method `xxx()`.
  • Benar: Hasil pemanggilan `obj.xxx()` menyesuaikan secara dinamis dengan class asal objek yang bersangkutan saat runtime.
  • Salah: 'Output program selalu bernilai sama untuk setiap objek' (keliru, keluarannya berbeda: A, B, C).
  • Salah: 'Polimorfisme hanya terjadi jika seluruh objek memiliki nilai atribut yang identik' (keliru, polimorfisme bergantung pada implementasi method, bukan kesamaan nilai atribut data).

Latihan Soal

Pilih jawaban, tekan Check, lalu baca pembahasannya.

Benar 0 / 3

Soal 1sedang

Perhatikan potongan kode program Python berikut: class Hewan: def suara(self): return '...' class Sapi(Hewan): def suara(self): return 'Moo' h = Sapi() print(h.suara()) Manakah pernyataan yang BENAR mengenai kode di atas?

Soal 2sedang

Konsep dalam pemrograman berorientasi objek di mana satu antarmuka atau satu nama fungsi yang sama dapat memperlakukan dan mengeksekusi berbagai jenis objek yang berbeda sesuai perilakunya masing-masing disebut ...

Soal 3sulit

Apakah perbedaan mendasar antara Method Overriding dan Method Overloading?