โ Kembali ke Konsep OOP
๐
Pilar
Polymorphism (Polimorfisme)
Memungkinkan objek dengan tipe berbeda diperlakukan melalui interface yang sama, dengan setiap tipe punya perilakunya sendiri untuk pemanggilan yang sama.
Masalahnya
Tanpa polimorfisme, kode harus memakai pengecekan tipe dan percabangan (if/else atau switch berdasarkan tipe) untuk menangani tipe objek yang berbeda. Logika ini terus membesar dan rawan error setiap kali tipe baru ditambahkan.
Cara Kerja
- โบPemanggilan method yang sama menghasilkan perilaku berbeda tergantung tipe objek saat runtime
- โบDicapai lewat method overriding (subtype polymorphism) atau interface/protocol
- โบMenghilangkan kondisional pengecekan tipe; implementasi yang tepat dipanggil otomatis
- โบMemungkinkan penulisan kode generik yang bekerja dengan tipe apa pun yang memenuhi kontraknya
Kapan Digunakan
โMemproses koleksi heterogen secara seragam (misalnya array berisi Shape)
โSistem plugin atau strategy di mana perilaku berbeda per tipe
โMengganti logika switch berdasarkan tipe dengan dynamic dispatch
Contoh di Dunia Nyata
๐
iOS
draw() yang dipanggil pada subclass UIView mana pun akan menggambar tampilan subclass itu sendiri
๐ค
Android
onClick() berperilaku berbeda tergantung listener pada subclass View
๐
Web
toString() di-override per class untuk menghasilkan representasi string sendiri
Contoh Kode
Swift
protocol Shape {
func area() -> Double
}
struct Circle: Shape {
let radius: Double
func area() -> Double { .pi * radius * radius }
}
struct Rectangle: Shape {
let width: Double
let height: Double
func area() -> Double { width * height }
}
let shapes: [Shape] = [Circle(radius: 2), Rectangle(width: 3, height: 4)]
for shape in shapes {
print("Area: \(shape.area())")
}