Java Bukan Pemrograman Berorientasi Objek Murni dan Alasannya
Artikel ini menjelaskan alasan kenapa Java bukan pemrograman berorientasi objek murni beserta contohnya.
Sebelum lebih lanjut mempelajari materi tentang Java Bukan Pemrograman Berorientasi Objek Murni dan Alasannya, terlebih dahulu pelajari materi tentang: Block Inisialisasi Java dan Fungsinya, Cara Inisialisasi Block Instance Java dan Fungsinya, dan Static dan Dynamic Binding Java dan Fungsinya.
Java sering dianggap sebagai bahasa pemrograman berorientasi objek (OOP) murni. Namun, jika pengembang melihat lebih dalam, Java sebenarnya bukanlah bahasa yang sepenuhnya mengadopsi paradigma OOP secara murni. Meskipun Java memiliki fitur-fitur OOP yang kuat, beberapa konsep dalam bahasa ini memungkinkan pengembang untuk menulis kode yang bukan sepenuhnya berorientasi objek.
Object oriented programming atau pemrograman berorientasi objek murni adalah bahasa pemrograman yang mendukung atau memiliki fitur yang memperlakukan segala yang ada dalam program sebagai sebuah object. Bahasa tersebut tidak mendukung tipe data primitif seperti int, char, float, bool, dan lain sebagainya. Ada beberapa persyaratan yang harus dipenuhi agar sebuah bahasa pemrograman menjadi OOP murni. Yaitu:
- Enkapsulasi atau data hiding
- Inheritance
- Polymorphism
- Abstraksi
- Semua tipe data predefinisi adalah object
- Semupa tipe definisi user adalah object
- Semua operasi yang ditampilkan dalam object harus melalui method yang diekspos pada object
Java Tidak Murni Bahasa Pemrograman Berorientasi Objek
Java hanya mendukung beberapa persyaratan yaitu syarat 1, 2, 3, 4, dan 6 tetapi tidak mendukung syarat 5 dan 7 seperti yang telah dijelaskan sebelumnya. Bahasa Java juga tidak murni bahasa pemrograman berorientasi objek karena mengandung beberapa hal berikut ini:
- Tipe data primitif seperti int, long, bool, float, char, dan lain sebagainya adalah object. Smalltalk adalah OOP murni tidak seperti Java dan C++ yang tidak memiliki perbedaan antara nilai object dan nilai tipe data primitif. Pada Smalltalk, nilai primitif seperti integer, boolean, dan character adalah berupa object. Pada Java, dimiliki tipe predefinisi yang berupa non-object untuk tipe primitif, seperti berikut: int a = 5; System.out.print(a);
- keyword static: Ketika mendeklarasikan sebuah class sebagai static maka class tersebut dapat digunakan tanpa object pada Java. Jika digunakan fungsi static atau variabel static maka hal tersebut tidak bisa disebut sebagai fungsi atau variabel yang menggunakan dot (.) atau object class yang mendefinisikan fitur berorientasi object. Java memungkinkan penggunaan metode dan variabel statis. Metode dan variabel statis melekat pada kelas itu sendiri, bukan pada instansi objeknya. Ini bertentangan dengan prinsip OOP murni dimana segala sesuatu adalah objek dan operasi dilakukan melalui panggilan metode objek.
- Wrapper class: class wrapper menyediakan mekanisme untuk mengkonversi tipe data primitif menjadi object dan sebaliknya. Pada Java, dapat digunakan Integer, Float, dan lain sebagainya sebagai pengganti dari int, float, dan lain sebagainya. Dapat juga dilakukan komunikasi dengan object tanpa pemanggilan method-nya. Contoh, penggunaan operator aritmatik pada program Java. String s1 = "ABC" + "A" ;. Dalam Java, terdapat tipe data primitif seperti int, boolean, dan double. Ini berbeda dengan bahasa seperti Smalltalk dimana bahkan tipe data dasar seperti bilangan bulat diimplementasikan sebagai objek. Meskipun Java memiliki wrapper types untuk mengubah primitif menjadi objek (seperti Integer untuk int), namun primitif masih membedakan Java dari bahasa OOP murni.
- Kelas Utilitas: Java memiliki banyak kelas utilitas di paket standarnya seperti java.util, yang berisi kelas-kelas seperti Collections dan Arrays yang beroperasi secara statis. Meskipun kelas-kelas ini berguna, namun tidak selalu dapat digunakan untuk berinteraksi dengan objek dan seringkali digunakan untuk melakukan operasi tertentu tanpa membutuhkan instansi objek.
- Operasi IO: Input/output (IO) dalam Java juga tidak selalu berorientasi objek. Misalnya, operasi file menggunakan kelas File yang tidak merepresentasikan file itu sendiri sebagai objek, dan operasi-operasi IO sering dilakukan secara prosedural dengan menggunakan metode statis.
Bahkan dengan menggunakan wrapper class tidak akan membuat Java menjadi bahasa pemrograman yang murni OOP, secara internal dapat digunakan operasi seperti Unboxing dan Autoboxing.
Baca Juga:
Contoh:
public class BoxingExample
{
public static void main(String[] args)
{Integer i = new Integer(10);
Integer j = new Integer(20);
Integer k = new Integer(i.intValue() + j.intValue());
System.out.println("Output: "
+ k);}
}
Pada kode program sebelumnya, terdapat dua permasalahan dimana Java gagal bekerja secara murni OOP, yaitu:
- Ketika menciptakan class Integer yang menggunakan tipe data primitif "int" yaitu angka 10, dan 20.
- Ketika melakukan penambahan, Java menggunakan tipe data "int".
Keuntungan dari Pendekatan Java
Meskipun Java tidak murni berorientasi objek, pendekatan ini memiliki beberapa keuntungan:
- Kinerja: Menggunakan tipe data primitif dan metode statis dapat meningkatkan kinerja aplikasi dalam beberapa kasus, karena meminimalkan overhead yang terkait dengan objek.
- Kesederhanaan: Memiliki kemampuan untuk menggunakan metode statis dan tipe data primitif membuat Java lebih mudah dipahami oleh pengembang yang berasal dari latar belakang bahasa pemrograman lain yang tidak sepenuhnya berorientasi objek.
- Fleksibilitas: Kemampuan untuk menggunakan metode statis dan kelas utilitas memungkinkan pengembang untuk menyusun kode dengan cara yang paling sesuai dengan kebutuhan aplikasi tertentu.
kekurangan dari fakta bahwa Java bukanlah pemrograman berorientasi objek murni:
- Kompleksitas Lebih Tinggi: Pemisahan antara tipe data primitif dan objek serta penggunaan metode statis dapat meningkatkan kompleksitas kode. Ini dapat menyebabkan kesulitan dalam pemahaman dan pemeliharaan kode, terutama dalam proyek yang besar dan kompleks.
- Keterbatasan Polimorfisme: Penggunaan metode statis dan kelas utilitas dapat mengurangi tingkat polimorfisme dalam kode. Polimorfisme adalah salah satu aspek penting dari OOP yang memungkinkan kelas-kelas yang berbeda untuk memiliki perilaku yang berbeda namun dengan antarmuka yang sama. Dengan mengurangi polimorfisme, kode menjadi kurang fleksibel dan sulit untuk diubah atau diperluas.
- Penggunaan Terlalu Banyak Metode Statis: Penggunaan terlalu banyak metode statis dapat mengarah pada kode yang sulit diuji (testing), karena metode-metode statis tidak dapat di-mock atau diganti dengan implementasi palsu saat melakukan pengujian unit. Hal ini dapat menghambat praktik pengujian otomatis yang penting dalam pengembangan perangkat lunak modern.
- Gangguan terhadap Prinsip Enkapsulasi: Prinsip enkapsulasi dalam OOP bertujuan untuk menyembunyikan detail implementasi suatu kelas dan hanya memperlihatkan fungsionalitas yang diperlukan melalui antarmuka publik. Penggunaan terlalu banyak metode statis dan variabel statis dapat mengganggu prinsip ini, karena memungkinkan akses langsung ke variabel dan metode tanpa melalui instansi objek, sehingga melanggar batasan-batasan antarmuka yang seharusnya diberikan oleh enkapsulasi.
- Kesulitan dalam Menerapkan Pola Desain OOP: Pola desain dalam OOP didasarkan pada konsep-konsep seperti pewarisan, polimorfisme, dan enkapsulasi. Penggunaan yang berlebihan terhadap metode statis dan kelas utilitas dapat menyulitkan penerapan pola-pola desain ini secara efektif, karena pola-pola desain tersebut mengandalkan hubungan objek yang dinamis dan fleksibel.
Dengan memahami kekurangan-kekurangan ini, pengembang Java dapat memilih dengan bijaksana kapan menggunakan fitur-fitur non-OOP dan bagaimana mengurangi dampak negatifnya dalam pengembangan perangkat lunak.
Kesimpulan
Meskipun Java sering dianggap sebagai bahasa pemrograman berorientasi objek murni, kenyataannya Java memiliki fitur-fitur yang memungkinkan pendekatan yang tidak sepenuhnya berorientasi objek. Namun, ini tidak mengurangi nilai Java sebagai salah satu bahasa pemrograman yang paling populer dan kuat dalam pengembangan perangkat lunak saat ini. Pemahaman tentang karakteristik Java yang tidak sepenuhnya berorientasi objek membantu pengembang untuk menggunakan bahasa ini dengan lebih efektif dan memahami kapan dan bagaimana memanfaatkan fitur-fiturnya dengan bijak.
Referensi Tambahan:
- Menggunakan Final Inheritance Java dan Fungsinya
- Mengakses Anggota Grandparent Java Menggunakan Keyword Super
- Method Private Overriding Java dan Fungsinya
- Method Class Derived Java dan Fungsinya
- Parent dan Child Class Java Dengan Anggota Data Sama
- Object Serialisasi Java Terhadap Inheritance
- Object Subclass dan Subclass Java Dan Referensi Superclass
Artikel ini didedikasikan kepada: Afriza Prima Safira, Ana Tasya Putri Rahma, Aprillia Puteri Pradana, Arum Galuh Saputri, dan Aulia El Vaneza.
6 komentar untuk "Java Bukan Pemrograman Berorientasi Objek Murni dan Alasannya"
Hubungi admin melalui Wa : +62-896-2414-6106
Respon komentar 7 x 24 jam, mohon bersabar jika komentar tidak langsung dipublikasi atau mendapatkan balasan secara langsung.
Bantu admin meningkatkan kualitas blog dengan melaporkan berbagai permasalahan seperti typo, link bermasalah, dan lain sebagainya melalui kolom komentar.
- Ikatlah Ilmu dengan Memostingkannya -
- Big things start from small things -
Kenap Java tidak murni OOP?
BalasHapusJava adalah bahasa pemrograman yang tidak sepenuhnya OOP karena masih mendukung penggunaan tipe data primitif seperti byte, long, dan lain sebagainya yang bukan berupakan bagian dari object dan Semua operasi yang dilakukan di Java melalui method yang diekspos pada object.
HapusApa yang dimaksud dengan OOP?
BalasHapusOOP adalah singkatan dari Object Oriented Programming. OOP adalah bahasa pemrograman yang berorientasi Object yang berkaitan dengan cara membuat object yang berisi data dan fungsi pada suatu program.
HapusApa OOP bagus atau tidak bagi pemrograman komputer?
BalasHapusOOP merangkum data secara default, dimana data tersebut berisi object data dan method yang memengaruhi data itu sendiri. Bentuk praktik OOP yang baik berarti user menyediakan method pengambil dan pengatur untuk mengontrol akses ke data tersebut.
Hapus