OOP mengorganisir kode di sekitar objek yang menggabungkan state yang dapat berubah dengan perilaku; Pemrograman Fungsional (FP) mengorganisir kode di sekitar fungsi murni dan data immutable, memperlakukan komputasi sebagai transformasi data. Ini adalah bias default yang berbeda, bukan kebalikan — dan sebagian besar bahasa modern mencampur keduanya.
Kontras inti
| OOP | FP | |
|---|---|---|
| Unit | Objek (state + methods) | Fungsi |
| State | Berkapsulasi, sering dapat berubah | Immutable; hindari efek samping |
| Polimorfisme | Subtipe / dynamic dispatch | Fungsi higher-order, generik |
| Menambah tipe | Mudah (class baru) | Sulit (sentuh setiap fungsi) |
| Menambah operasi | Sulit (sentuh setiap class) | Mudah (fungsi baru) |
Baris terakhir adalah expression problem: setiap paradigma membuat satu axis perubahan mudah dan axis lainnya sulit.
Tugas yang sama, dua gaya
# OOP: data + behavior together, dispatch by type
class Circle:
def __init__(self, r): self.r = r
def area(self): return 3.14159 * self.r ** 2
# FP: data is dumb; behavior is a separate pure function
def area(shape):
match shape:
case ("circle", r): return 3.14159 * r ** 2
case ("square", s): return s * s
Di mana masing-masing bersinar
OOP → rich domains with identity & lifecycle (orders, sessions, UI widgets)
FP → data pipelines, transformations, concurrency (immutability avoids races)
Mengapa ini penting
Bahasa modern adalah multi-paradigma (Scala, Kotlin, Python, Java/C# modern), jadi keterampilan praktis adalah memilih alat yang tepat per masalah, bukan memilih suku.
Penekankan FP pada immutability dan pure function telah mengubah praktik terbaik OOP — immutable value object dan dependency injection perilaku adalah ide FP yang sekarang standar dalam desain OO yang baik.
