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 MooC. 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: MooPrinsip 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 Pembanding | Method Overriding (Penimpaan) | Method Overloading (Beban Lebih) |
|---|---|---|
| Lokasi / Ruang Lingkup | Terjadi antara dua class yang memiliki relasi pewarisan (Class Induk vs Class Anak). | Terjadi di dalam satu class yang sama. |
| Nama Method | Nama method sama persis. | Nama method sama persis. |
| Parameter / Signature | Jumlah dan nama parameter sama persis. | Jumlah atau tipe parameter berbeda-beda. |
| Dukungan di Python | Didukung 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, CPenilaian 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).