Monday, August 6, 2012

KELEBIHAN JAVA DIBANDING C++

Prinsip   dasar   pembuatan   Java   adalah   karena   C++   ternyata   tidak  memenuhi   janjisebagai 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:



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 dapat  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..!!!”.

No comments: