Minggu, 22 Juli 2012

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
- 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:
a) Variabel Global
b) Goto
c) Pointer
d) Alokasi Memori
e) Tipe Data Yang Rapuh
f) Pemilihan Tipe (Type Casting) yang Tidak Aman
g) Daftar Argumen Yang Tidak Aman
h) File Header yang Terpisah
i) Struktur yang Tidak Aman
j) Peng-hacker-an Preprocessor
k) QED

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 global 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.
Sebelum C++ memasukkan penanganan eksepsi, goto sering digunakan untuk membuat
perulangan di dalam 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 - 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 instans (instance) 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.
Java memecahkan masalah ini dengan mengambil ukuran yang sesuai untuk semua tipe
numerik dasar dan menyatukannya.
Arsitektur tertentu akan mengalami kesulitan atau bekerja tidak optimal untuk mengimplementasikan
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 sekurang-kurangnya 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 pointer dengan 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..!!!”.

Tidak ada komentar:

Posting Komentar