Minggu, 13 Januari 2013

JAVA




       Java adalah bahasa pemrograman berorientasi objek yang sederhana dan juga kuat. Java memiliki banyak hal yang mirip dengan C + +. Java berasal dari Sun Microsystems, Inc pada tahun 1991. Java disusun oleh James Gosling, Patrick Naughton, Chris Warth, Ed Frank, dan Mike Sheridan di Sun Microsystems, Inc. Java dikembangkan untuk menyediakan bahasa pemrograman yang berbasis platform independen.

1. Mengapa Java?
       Saat ini Bahasa Pemrograman Java sudah cukup populer dikalangan para arsitek pemrograman. Hal itu dikarenakan Bahasa Java merupakan bahasa yang sederhana, berorientasi terhadap objek, statis, menggunakan just-in-time compilation, aman, independen terhadap platform, multithreading, didukung oleh Garbage Collector, tangguh dan mampu diperluas. Secara umum faktor yang menyebabkan tingginya popularitas penggunaan Java saat ini dijelaskan dalam 2 bagian besar di bawah ini.
a. The Fetch and Execute Cycle: Machine Language
       Sebuah komputer merupakan suatu sistem yang kompleks yang terdiri dari banyak komponen yang berbeda. Namun, fokus dari semuanya terletak pada jantung atau otak dari komputer itu sendiri. Dengan kata lain, komputer adalah komponen tunggal yang melakukan komputasi yang sebenarnya. Hal inilah yang berhubungan secara langsung dengan  Central Processing Unit, atau CPU. Dalam sebuah komputer desktop modern, CPU adalah "chip" tunggal yang berukuran satu inci persegi. Tugas CPU adalah untuk mengeksekusi program.
       Suatu program hanyalah sebuah daftar instruksi yang jelas dimaksudkan untuk diikuti secara mekanis oleh komputer. Sebuah komputer dibangun untuk melaksanakan instruksi yang ditulis dalam jenis bahasa yang sangat sederhana yang disebut bahasa mesin. Setiap jenis komputer memiliki bahasa mesin sendiri, dan komputer dapat langsung mengeksekusi program hanya jika program ini dinyatakan dalam bahasa mesin tersebut. (Hal ini yang mengakibatkan komputer mampu mengeksekusi program yang ditulis dalam bahasa lain jika bahasa program tersebut pertama kali diterjemahkan ke dalam bahasa mesin komputer tersebut.)
       Ketika CPU mengeksekusi program, program itu disimpan dalam memori utama komputer ( disebut juga RAM atau random access memory). Selain program itu sendiri, memori juga dapat menyimpan data yang sedang digunakan atau diproses oleh program. Memori utama terdiri dari sejumlah lokasi penempatan. Lokasi ini diberi nomor, dan nomor urut dari lokasi ini disebut dengan alamat. Alamat menyediakan cara memilih jalur keluar dari suatu bagian tertentu dari informasi diantara jutaan informasi yang disimpan dalam memori. Ketika CPU perlu mengakses instruksi program atau data di lokasi tertentu, ia akan mengirimkan alamat informasi sebagai sinyal ke memori dan memori merespon dengan mengirimkan kembali data yang terdapat dalam lokasi yang ditentukan. CPU juga dapat menyimpan informasi dalam memori dengan menentukan informasi yang akan disimpan dan alamat dari lokasi di mana informasi itu harus disimpan.
       Pada tingkat bahasa mesin, pengoperasian CPU cukup mudah (meskipun sangat rumit secara rinci). CPU mengeksekusi program yang disimpan sebagai urutan instruksi bahasa mesin dalam memori utama. Hal ini dilakukan dengan berulang kali membaca, atau mengambil instruksi dari memori dan kemudian melaksanakan, atau mengeksekusi instruksi itu. Proses ini (mengambil instruksi, jalankan, mengambil instruksi lain, jalankan, dan seterusnya) disebut siklus fetch-and-execute. Dengan satu pengecualian, yang akan dibahas dalam bagian berikutnya adalah semua yang pernah dilakukannya CPU.
       Rincian dari siklus fetch-and-execute ini tidaklah terlalu penting. Namun ada beberapa hal dasar yang harus kita ketahui. CPU berisi sejumlah register internal, yang merupakan unit memori terkecil yang mampu memegang atau menyimpan satu nomor dari instruksi bahasa mesin. CPU menggunakan salah satu register - program counter (PC) untuk melacak di mana program itu akan dieksekusi. Register - PC ini menyimpan alamat dari instruksi berikutnya dimana CPU harus mengeksekusinya. Pada awal setiap siklus fetch-and-execute, CPU akan memeriksa Register-PC untuk mengecek instruksi itu apakah harus diambil. Selama siklus fetch-dan-execute, jumlah instruksi di Register-PC diperbarui untuk menunjukkan instruksi yang akan dieksekusi dalam siklus berikutnya. (Biasanya, namun tidak selalu, ini hanya instruksi yang berurutan mengikuti instruksi saat ini dalam program.)
       Sebuah komputer menjalankan program dengan bahasa mesin yang bersifat mekanik, tanpa pemahaman atau pemikiran sebelumnya karena telah dimasukkan secara fisik dan padu. Ini bukan konsep yang mudah. Sebuah komputer adalah mesin yang dibangun dari jutaan switch kecil yang disebut transistor, yang memiliki properti dimana semuanya dapat terhubung dengan kabel bersama-sama sedemikian rupa sehingga output dari suatu switch dapat mengaktifkan tombol lain ataupun me-nonaktif-kannya. Sebagai komputer penghitung, switch ini mengaktifkan ataupun menonaktifkan satu sama lain dalam suatu pola yang telah ditentukan baik oleh hubungannya satu sama lain maupun oleh program yang dieksekusi oleh komputer.
       Instruksi bahasa mesin dinyatakan sebagai bilangan biner. Sebuah bilangan biner hanya terdiri dari dua kemungkinan angka, yaitu nol dan satu. Jadi, sebuah instruksi bahasa mesin hanya merupakan urutan angka satu dan nol. Setiap urutan tertentu menyandikan beberapa instruksi tertentu. Data yang memanipulasi komputer juga disandikan sebagai bilangan biner. Sebuah komputer dapat bekerja secara langsung dengan bilangan biner karena switch dengan mudah dapat diwakili oleh nomor seperti: menyalakan saklar untuk mewakili satu, mematikannya untuk mewakili nol. Instruksi bahasa mesin disimpan dalam memori sebagai pola switch untuk nantinya diaktifkan atau dinonaktifkan. Ketika instruksi bahasa mesin dimuat ke CPU, yang terjadi adalah bahwa switch tertentu diaktifkan atau dinonaktifkan sesuai pola yang disandikan oleh instruksi tertentu. CPU dibangun untuk menanggapi pola ini dengan menjalankan instruksi encode. Memang ini hanya karena semua switch di dalam CPU terhubung secara bersama-sama.
       Jadi, kita harus memahami bagaimana komputer bekerja. Memori utama menyimpan program bahasa mesin dan data. Bahasa mesin itu disandikan sebagai bilangan biner. CPU mengambil instruksi bahasa mesin dari memori satu demi satu dan mengeksekusi mereka. Hal ini dilakukan secara mekanis, tanpa memikirkan atau memahami apa yang dilakukannya dan oleh karena itu program yang dijalankan harus sempurna, lengkap dalam semua detail, dan tidak ambigu karena CPU tidak dapat melakukan apa-apa selain mengeksekusi persis seperti yang tertulis. Berikut ini adalah pandangan skematik pemahaman
tahap pertama dari komputer:

b.  The Java Virtual Machine
       Bahasa mesin terdiri dari instruksi yang sangat sederhana yang dapat dieksekusi secara langsung oleh CPU komputer. Hampir semua program, meskipun yang ditulis dalam bahasa pemrograman tingkat tinggi seperti Java, Pascal, atau C++. Sebuah program yang ditulis dalam bahasa tingkat tinggi tidak dapat berjalan secara langsung pada komputer manapun. Pertama, bahasa pemrograman itu harus diterjemahkan ke dalam bahasa mesin. Terjemahan ini dapat dilakukan dengan sebuah program yang disebut kompilator. Sebuah kompilator mengambil bahasa program tingkat tinggi dan menerjemahkannya ke dalam program dengan bahasa mesin untuk dieksekusi. Setelah terjemahan selesai, program dengan bahasa mesin dapat dijalankan beberapa kali, tapi tentu saja hanya dapat dijalankan pada satu jenis komputer (karena masing-masing jenis komputer memiliki bahasa mesin individu tersendiri). Jika program ini ingin dijalankan di komputer lain maka bahasa pemrograman itu harus kembali diterjemahkan, menggunakan kompilator yang berbeda, ke dalam bahasa mesin yang sesuai.
       Ada alternatif untuk menyusun sebuah program bahasa tingkat tinggi. Alih-alih menggunakan kompilator yang menerjemahkan program sekaligus, kita dapat menggunakan seorang penerjemah yang menerjemahkannya instruksi demi instruksi seperti yang diperlukan. Penerjemah adalah program yang bertindak seperti CPU dengan mengambil dan melakukan siklus eksekusi. Dalam rangka menjalankan program, penerjemah berjalan dalam sebuah loop dimana ia berulang kali membaca satu instruksi dari suatu program, memutuskan apa yang diperlukan untuk melaksanakan instruksi dan kemudian melakukan perintah dengan bahasa mesin yang tepat untuk melakukannya.
       Salah satu penggunaan penerjemah tersebut adalah untuk mengeksekusi program dengan bahasa tingkat tinggi. Sebagai contoh, bahasa pemrograman Lisp biasanya diterjemahkan oleh seorang penerjemah ( Aplikasi penerjemah) daripada sebuah kompilator. Namun, penerjemah tersebut punya tujuan lain yaitu mereka mampu mengizinkan kita menggunakan program dengan bahasa mesin yang dimaksudkan untuk satu jenis komputer pada komputer jenis yang lain. Sebagai contoh, ada sebuah program yang disebut "Virtual PC" yang berjalan pada komputer Mac OS. Virtual PC adalah sebuah interpreter ( penerjemah ) yang mengeksekusi program dengan bahasa mesin yang ditulis untuk IBM-PC-clone computer. Jika kita menjalankan Virtual PC pada Mac OS, ktia dapat menjalankan berbagai program, termasuk program yang ditulis untuk Windows. (Sayangnya, program yang ditulis untuk bahsa mesin lain akan berjalan jauh lebih lambat daripada program dengan bahasa mesin khusus IBM itu sendiri. Masalahnya adalah bahwa Virtual PC mengeksekusi instruksi bahasa mesin Mac OS untuk setiap instruksi bahasa program PC yang telah diterjemahkan. Kesimpulannya program itu disusun secara inheren lebih cepat daripada program ditafsirkan. )
       Para desainer Java memilih untuk menggunakan kombinasi kompilator dan penerjemah. Program yang ditulis di Java dikompilasi ke bahasa mesin, tetapi hasilnya merupakan bahasa mesin untuk komputer yang tidak benar-benar ada. Ini disebut dengan "virtual" komputer atau juga dikenal sebagai Java Virtual Machine, atau JVM. Bahasa mesin untuk Java Virtual Machine disebut juga Java bytecode. Tidak ada alasan mengapa Java bytecode tidak dapat digunakan sebagai bahasa mesin komputer yang nyata, bukan komputer virtual. Namun pada kenyataannya, penggunaan bahasa mesin virtual merupakan salah satu nilai jual utama dari Java yang serta merta mendukung popularitasnya. Fakta menyatakan bahwa bahasa mesin itu benar-benar dapat digunakan pada komputer manapun. Semua yang diperlukan komputer adalah sebuah penerjemah bahasa untuk Java bytecode. Seperti penerjemah yang mensimulasikan JVM dengan cara yang sama bahwa Virtual PC mensimulasikan sebuah komputer PC. (Istilah JVM ini juga digunakan untuk program bytecode interpreter Java yang melakukan simulasi, jadi kita dapat mengatakan bahwa komputer membutuhkan JVM untuk menjalankan program Java. Secara teknis, itu semua akan lebih tepat dikatakan bahwa penerjemah mengimplementasikan JVM daripada untuk mengatakan bahwa itu adalah hanya sebuah JVM itu sendiri.)
       Tentu saja penerjemah Java bytecode yang berbeda diperlukan untuk setiap jenis komputer, tetapi sekali komputer memiliki penerjemah Java bytecode, komputer dapat menjalankan program Java bytecode manapun. Ini adalah salah satu fitur penting dari Java, program yang telah di-kompilasi dapat dijalankan pada berbagai jenis komputer.
       Mengapa? Kita mungkin bertanya-tanya mengapa harus menggunakan perantara Java bytecode? Mengapa kita tidak hanya mendistribusikan program Java asli dan membiarkan setiap orang meng-kompilasi-kannya ke bahasa mesin dari komputer manapun yang mereka inginkan untuk menjalankannya? Ada banyak alasan. Pertama, kompilator harus memahami Java, bahasa tingkat tinggi yang kompleks. Kompilator sendiri merupakan program yang kompleks. Sebuah penerjemah Java bytecode di sisi lain merupakan sebuah program yang cukup kecil dan sederhana.                     Hal ini akan memudahkan dalam penulisan terjemahan Java bytecode dalam jenis yang baru di suatu komputer. Sekali itu semua berhasil dilakukan, komputer akan mampu menjalankan setiap program yang telah di-kompilasi. Ini akan menjadi jauh lebih sulit daripada menulis sebuah kompilator Java untuk komputer yang sama.


       Selain itu, banyak program Java dimaksudkan untuk diunduh melalui jaringan internet. Hal ini berhubungan dengan masalah keamanan yang jelas. Kita tentunya tidak ingin mengunduh dan menjalankan program yang akan merusak komputer atau file kita. Penerjemah Java bytecode bertindak sebagai penyangga antara kita dengan program yang kita unduh. Kita benar-benar menjalankan penerjemah yang menjalankan program yang kita download secara langsung. Penerjemah dapat melindungi kita dari tindakan yang berpotensi berbahaya pada bagian dari program itu.
       Ketika Java masih merupakan bahasa baru, Java dikritik karena lambat. Sejak Java bytecode dieksekusi oleh penerjemah, tampaknya program Java bytecode tidak bisa berjalan secepat program di-kompilasi ke bahasa mesin asli (yaitu bahasa mesin yang sebenarnya dari komputer di mana program ini berjalan). Namun, masalah ini sebagian besar telah diatasi dengan penggunaan kompilator just-in-time untuk mengeksekusi Java bytecode. Sebuah kompilator just-in-time menerjemahkan Java bytecode ke dalam bahasa mesin asli. Ia melakukan hal ini ketika sedang menjalankan program. Sama seperti penerjemah normal, masukan ke kompilator just-in-time adalah program dengan Java bytecode, dan tugasnya adalah menjalankan program itu. Seperti mengeksekusi program, kompilator just-in-time juga menerjemahkan bagian itu ke dalam bahasa mesin. Bagian yang diterjemahkan dari program kemudian dapat dijalankan jauh lebih cepat daripada waktu untuk menerjemahkannya sendiri. Karena bagian tertentu dari sebuah program sering dijalankan berkali-kali sebagai program yang berjalan, sebuah kompilator just-in-time secara signifikan dapat mempercepat waktu eksekusi secara keseluruhan.
       Kita harus mengingat bahwa tidak ada hubungan yang diperlukan antara Java dan Java bytecode. Sebuah program yang ditulis di Java tentu dapat di-kompilasi ke bahasa mesin dari sebuah komputer yang sebenarnya. Program yang ditulis dalam bahasa lain dapat di-kompilasi menjadi Java bytecode. Namun, hasilnya yang sebenarnya adalah kombinasi antara Java bytecode dan Java yang bersifat platform independen, aman, dan jaringan kompatibel yang dimana memungkinkan kita untuk menciptakan program dalam bahasa tingkat tinggi yang modern berorientasi objek.
       Dalam beberapa tahun terakhir, telah menjadi hal yang cukup umum untuk menciptakan bahasa pemrograman baru atau versi bahasa lama yang di-kompilasi menjadi Java bytecode. Program Java bytecode disusun, kemudian dapat dieksekusi oleh JVM standar. Bahasa baru yang telah dikembangkan secara khusus untuk pemrograman JVM termasuk Groovy, Clojure, dan pengolahan JPython dan JRuby adalah versi bahasa yang lebih tua, yaitu Python dan Ruby, yang menargetkan JVM. Bahasa-bahasa ini memungkinkan untuk menikmati banyak keuntungan dari JVM sambil menghindari beberapa teknis dari bahasa Java. Bahkan, penggunaan bahasa lain dengan target JVM telah menjadi hal yang cukup penting dimana beberapa fitur baru telah ditambahkan ke dalam JVM Versi Java 7 khusus untuk menambahkan dukungan yang lebih baik untuk beberapa bahasa-bahasa tersebut.
Share:

0 komentar:

Posting Komentar