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..!!!”.
Lihat yang lainnya juga yukk :)