Bagaimana Java Lebih Baik daripada C++ ?
Prinsip dasar pembuatan Java adalah
karena C++ ternyata tidak memenuhi janji sebagai pemrograman berorientasi
objek. Jadi apa yang salah dari C++ sehingga Java harus dibuat ? Jawabannya
sederhana, yaitu Kompatibilitas ke
belakang ( backward compability).
Kompabilitas kebelakang biasanya
dikenal sebagai kemampuan yang menjamin keberhasilan dengan membuat programmer
belajar dengan cepat. Java menggunakan hampir semua konvensi yang identik untuk
deklarasi variabel, melewatkan parameter, operator dan pengaturan aliran.
Sehingga dengan kata lain Java menambahkan bagian-bagian yang baik dari C++ dan
menghapus bagian-bagian yang jelek dari C. Java jauh lebih baik dari C++ karena
hal-hal yang tidak dimilikinya, seperti beberapa contoh berikut:
Variabel Global
Para programmer menulis program
dalam bahasa assembly, dan semua program yang disimpan dalan punch card,
penghubung alat pemrograman adalah variabel global, masalahnya, dengan
menggunakan variabel blobal suatu fungsi dapat memberikan efek samping yang
buruk dengan mengubah keadaan global. Variabel global pada C++ adalah tanda
sebuah program yang tidak dirancang cukup baik untuk enkapsulasi data dengan
cara yang masuk akal.
Pada Java, ruang penamaan global
hanya hirarki class. Tidak mungkin menciptakan variabel global diluar semua
class. Setidaknya penentuan keadaan global dibuat lebih jelas dengan
enkapsulasi dalam class. Contoh, system.out.println()
sering digunakan dalam program Java.
Ini adalah cara mengakses output standar global untuk interpreter Java.
Goto
Beberapa kemampuan yang digunakan
sebagai cara cepat untuk menyelesaikan program tanpa membuat struktur yang
jelas adalah pernyataan goto.Dalam
C++ dikenal sebagai if-then-goto. Sebeleum C++ memasukkan penanganan eksepsi,
goto sering digunakan untuk membuat perulangan didalam keadaan eksepsi.
Java tidak memiliki pernyataan goto.
Java menyediakan kata goto
hanya untuk menjaga agar
programmer tidak bingung menggunakannya. Java memiliki bagian break yang diberi
label dan pernyataan continue yang merupakan bagian dimana goto boleh
dipergunakan. Penanganan eksepsi yang ampuh dan terdefinisi dengan baik pada
Java menghilangkan kebutuhan perintah goto.
Pointer
Pointer atau address pada memori
adalah kemampuan C++ yang paling ampuh juga paling berbahaya. Biasanya
kesalahan terjadi karena “kurang satu tempat” atau rusaknya data yang disimpan
karena lokasi memori terakhir hancur.kesalahan ini merupakan salah satu
kesalahan yangterburuk yang susah untuk diperiksa dan ditelusuri.
Meskipun penanganan objek Java
menggunakan pointer, bahasa Java tidak memiliki kemampuan memanipulasi pointer
secara langsung. Kita tidak dapat mengubah integer menjadi pointer, menunjuk
ulang sembarang address memori. Array merupakan objek yang didefinisikan, tidak
berupa address dimemori.Di Java kita tidak dapat menulis sebelum akhir lokasi
yang disediakan untuk array.
Alokasi Memori
Kemampuan C++ yang sama berbahayanya dengan pengolahan
matematis pointer adalah manajemen memori. Manajemen memori di C dan C++
diwujudkan dengan keunggulan dan kelemahan fungsi library malloc() dan free().
Fungsi malloc, mengalokasikan jumlah tertentu memori (dalam byte), dan
mengeluarkan address blok tersebut. Fungsi free, mengirimkan blok yang telah
dialokasikan kepada sistem untuk penggunaan umum. Secara umum dapat menyebabkan
kebocoran memori yang mengakibatkan program berjalan semakin lama semakin
lambat.
Java tidak memiliki fungsi malloc
dan free, karena setiap struktur data yang rumit adalah objek, maka mereka
dialokasikan dengan operator new,
yang mengalokasikan ruang untuk objek pada ‘heap’ memori. Memori yang
disediakan disebut ‘heap’ karena kita tidak perlu lagi memikirkannya sebagai
penambahan address yang berstruktur linier. Jadi hanya berupa kumpulan instan
objek. Yang didapat dari fungsi new
bukanlah address memori, melainkan hanya ‘pegangan’ untuk objek dalam heap.
Tipe Data Yang
Rapuh
C++ mewarisi semua tipe data umum
pada C. Tipe-tipe ini mewakili bilangan bulat dan pecahan dengan berbagai
rentang nilai dan ketelitian. Rentang nilai dan ketelitian tipe ini bervariasi
bergantung pada implementasi kompilernya.
Javamemecahkan masalah ini dengan
mengambil ukuran yang sesuai untuk semua tipe numerik dasar dan menyatukannya.
Arsitektur tertentu akan mengalami kesulitan atau bekerja tidak optimal untuk
meng-implementasikan tipe data yang bergantung hardware secara ketat pada
interpreter Java yang diberikan, tetapi inilah satu-satunya cara untuk menjamin
hasil yang dapat dibuat ulang pada platform hardware yang berbeda.
Pemilihan Tipe
(Type Casting) yang Tidak Aman
Type Casting adalah mekanisme yang ampuh dalam C/C++ yang memungkinkan
kita untuk mengubah tipe suatu pointer secara sembarang. Mungkin kita sering
melihat bentuk seperti ini :
memset((void *)p, 0, sizeof (struct
p))
Penggunaan
ini, walaupun tidak baik, tetapi cukup aman. Tentu saja dengan menganggap blok
memori yang ditunjuk oleh p sekurang0kurangnya sepanjang sizeof (struct p).ini
harus digunakan dengan sangat hati-hati karena tidak ada syarat untuk memeriksa
apakah kita telah memilih tipe dengan benar.
Penanganan objek Java mencakup
informasi lengkap tentang class yang menjadi instans suatu objek, sehingga
dapat dilakukan pemeriksaan kompatibilitas tipe selama program berjalan, dan
menghasilkan eksepsi jika terjadi kegagalan.
Daftar Argumen
Yang Tidak Aman
C++ banyak disukai karena kemampuannya melewatkan
pointerdengan tipe sembarang dalam daftar argumen panjang-variabel yang dikenal
sebagai varargs. Varargs adalah
tambahan sederhana pada premis yang menyatakan bahwa sembarang address dapat
dipetakan pada sembarang tipe, tugas pemeriksaan tipe diserahkan kepada
programmer.
Sangat menyenagkan jika Java
memiliki cara yang aman terhadap tipe untuk mendeklarasikan dan melewatkan
daftar argumen panjang-variabel, tetapi sampai versi 1.0 belum ada ketentuan
seperti itu.
File Header yang
Terpisah
Salah satu kemampuan yang patut dipertimbangkan adalah file
header, dimana kita dpata mendeklarasikan prototipe class kita dan
mendistribusikannya dengan kode biner implementasi class yang telah di-compile.
Kemampuan ini membuat lingkungan compiler C++ hampir tidak dapat digunakan. C++
memiliki format file yang bergantung mesin untuk kode yang telah di-compile,
sehingga informasi header dapat dibuat coresiden. Karena antarmuka programmer
ke class yang di-compile dilakukan melalui file header-nya, maka kode yang
telah di-compile sangat bergantung pada apa yang ada pada file header tersebut.
Misalkan programmer yang senang
berpetualang ingin meningkatkan akses pada beberapa anggota data private pada
class yang telah di-compile. Yang harus dilakukan oleh orang tersebut adalah
mengganti pengubah akses yang asalnya private menjadi public pada file header
dan meng-compile suatu sub class dari class yang telah di-compile. Pada Java
ini tidak mungkin terjadi, karena di Java
tidak ada file header. Tipe dan visibilitas anggota class dicompile ke
dalam file class Java. Interpreter Java menjalankan pengaturan akses saat
program berjalan, jadi sama sekali tidak ada cara untuk mengakses variabel
private dari luar suatu class.
Struktur yang
Tidak Aman
C berusaha menyediakan enkapsulasi
data melalui deklarasi struktur yang disebut struct, dan polimorfisme dengan mekanisme union. Dua gagasan ini menghasilkan batas tipis antara penyesuaian
bergantung mesin yang kritis dan berbahaya dengan batasan ukuran. Java tidak
memiliki konsep struct dan union
, sebaliknya Java menyatukan konsep ini dengan class.
Peng-hacker-an
Preprocessor
Untuk mewujudkan keinginan memiliki
model yang jelas untuk ditulis oleh programmer, compiler C dan C++ menggunakan
tool yang sama dengan yang digunakan pada masa-masa MACRO assembler. Ini
menghasilkan preprocessor C yang
tugasnya mencari perintah khusus yang diawali tanda pagar (#).Preprocessor C
sering digunakan untuk membangun program yang sangat sulit dibaca.
Java mengatur agar kita dapat
bekerja tanpa preprocessor, hanya bergantung pada kata kunci final untuk mendeklarasikan konstanta
yang sebelumnya dihasilkan dengan #define.
QED
Berasal dari bahasa latin Quod Erat Demonstrandum, yang berarti
“Terbuktikan..!!!”.