Ternyata Java Bukanlah Bahasa OOP Murni! Ini Buktinya

Pendahuluan

Java sangat identik dengan Object-Oriented Programming (OOP). Tidak heran banyak yang mengira Java adalah bahasa berorientasi objek murni (pure OOP). Padahal kenyataannya: Java bukan bahasa OOP murni.

Apa maksudnya “murni”? Sebuah bahasa disebut OOP murni jika segala sesuatunya adalah objek, bahkan angka sekalipun, dan semua operasi dilakukan lewat method pada objek. Java tidak sepenuhnya seperti itu.

Mari kita lihat alasan-alasannya.

1. Ada Tipe Primitif yang Bukan Objek

Java punya tipe primitif seperti int, boolean, char, dan double. Nilai-nilai ini bukan objek, melainkan disimpan langsung sebagai data mentah, bukan sebagai instance dari sebuah class.

int number = 10;        // primitif, bukan objek
Integer boxed = 20;     // objek (wrapper class)

2. Ada Anggota Statis (Static)

Anggota static (variabel atau metode) menempel pada class, bukan pada objek. Artinya kita bisa memakainya tanpa membuat objek terlebih dahulu. Hal ini sedikit menyimpang dari ide OOP murni, di mana segala sesuatu seharusnya melalui objek.

class MathUtil {
    static int square(int n) {
        return n * n;
    }
}

MathUtil.square(5);   // dipanggil tanpa 'new MathUtil()'

3. Ada Konstruksi Prosedural

Java punya perintah seperti perulangan (for, while) dan percabangan (if, switch) yang bisa berdiri sendiri di luar konteks objek. Ini adalah ciri gaya prosedural, bukan murni objek.

for (int i = 0; i < 3; i++) {
    System.out.println(i);   // perulangan biasa, bukan lewat objek
}

4. Tidak Ada Pewarisan Banyak Class

Java tidak mengizinkan sebuah class mewarisi dari lebih dari satu class sekaligus (untuk menghindari kebingungan seperti diamond problem). Sebagai gantinya, Java hanya membolehkan banyak pewarisan lewat interface.

// class Child extends Parent1, Parent2 { }   // <- TIDAK diizinkan

class Child extends Parent implements Skill1, Skill2 { }  // satu class + banyak interface

5. Operator Bawaan untuk Primitif

Operasi pada tipe primitif memakai operator bawaan seperti +, -, dan *, bukan lewat pemanggilan metode pada objek. Di bahasa OOP murni, bahkan penjumlahan pun sebenarnya adalah “pesan” yang dikirim ke sebuah objek.

int sum = 3 + 4;     // pakai operator '+', bukan 3.add(4)

Lalu, Bahasa Apa yang OOP Murni?

Beberapa bahasa yang dianggap berorientasi objek murni antara lain:

Di bahasa-bahasa ini, bahkan angka 3 pun adalah objek, dan 3 + 4 sebenarnya berarti “kirim pesan + dengan argumen 4 ke objek 3”.

Ringkasan

Ciri JavaKenapa Bukan OOP Murni
Tipe primitif (int, boolean)Bukan objek
Anggota staticMenempel ke class, bukan objek
for, if, whileKonstruksi prosedural
Operator +, -, *Bukan metode objek
Pewarisan tunggalMultiple inheritance hanya lewat interface

Kesimpulan

Java adalah bahasa yang sangat berorientasi objek, tetapi bukan OOP murni. Ia sengaja menggabungkan OOP dengan elemen prosedural dan tipe primitif demi kinerja dan kemudahan penggunaan.

Jadi kalau ada yang bertanya “Apakah Java OOP murni?”, jawabannya: tidak