Senin, 03 Desember 2012

Sejarah JAVA

Java  Adalah Bahasa Pemrograman yang berOrientasi Objek yang dikembangkan Oleh JAMES GOSLING dan rekan-rekan nya di SUN Microsystems pada awal 1990-an. Tidak Seperti Bahasa Konvensional yang umumnya dirancang baik untuk di kompilasi dari kode aslinya, atau ditafsirkan dari kode sumber di runtimenya. Java dimaksudkan untuk dikompilasi dari ByteCodenya. yang kemudian di jalankan umumnya menggunakan JIT oleh Java Virtual Mechine.
Bahasa itu sendiri meminjam sintaks banyak dari C dan C + + namun memiliki model objek sederhana dan lebih sedikit rendah tingkat fasilitas. Java hanya jauh terkait dengan JavaScript, meskipun mereka memiliki nama yang sama dan sama seperti Syntax di bahasa C.
Java dimulai sebagai sebuah proyek yang disebut "Oak" oleh James Gosling pada bulan Juni 1991. Tujuan Gosling adalah untuk mengimplementasikan mesin virtual dan bahasa yang memiliki akrab C-seperti notasi tetapi dengan keseragaman yang lebih besar dan kesederhanaan dari C / C + +. Pelaksanaan publik pertama adalah Java 1.0 pada tahun 1995. Itu membuat janji "Tulis Sekali, Run Anywhere", dengan runtimes gratis di platform populer. Itu cukup aman dan keamanan yang telah dikonfigurasi, memungkinkan untuk akses jaringan dan file yang akan dibatasi. Web browser utama segera dimasukkan ke dalam konfigurasi standar mereka dalam konfigurasi aman "applet". populer dengan cepat. Versi baru untuk platform besar dan kecil (J2EE dan J2ME) segera dirancang dengan munculnya "Java 2". Sun belum mengumumkan rencana untuk "Java 3".



Sejarah

Pada tahun 1997, Sun mendekati tubuh ISO / IEC JTC1 standar dan kemudian Internasional ECMA untuk memformalkan Java, tetapi segera menarik diri dari proses. Java tetap menjadi standar de facto eksklusif yang dikontrol melalui Java Community Process. Sun membuat sebagian besar implementasinya Java tersedia tanpa biaya, dengan pendapatan yang dihasilkan oleh produk khusus seperti Java Enterprise System. Sun membedakan antara Pengembangan Perangkat Lunak Kit (SDK) dan Runtime Environment (JRE) yang merupakan subset dari SDK, perbedaan utama adalah bahwa dalam JRE compiler tidak ada.

filsafat

Ada lima tujuan utama dalam penciptaan bahasa Java:

1. Ini harus menggunakan metodologi pemrograman berorientasi obyek.
2. Ini harus memungkinkan program yang sama untuk dijalankan pada beberapa sistem operasi.
3. Ini harus berisi built-in dukungan untuk menggunakan jaringan komputer.
4. Ini harus dirancang untuk mengeksekusi kode dari sumber remote dengan aman.
5. Ini harus mudah digunakan dengan memilih apa yang dianggap sebagai bagian yang baik dari lainnya bahasa berorientasi objek.

Untuk mencapai tujuan dari dukungan jaringan dan eksekusi kode jarak jauh, programmer Java kadang-kadang merasa perlu untuk menggunakan ekstensi seperti CORBA, internet Mesin Komunikasi, atau OSGi.

Obyek Orientasi

Karakteristik pertama, orientasi objek ("OO"), mengacu pada metode pemrograman dan desain bahasa. Meskipun ada banyak penafsiran OO, satu ide yang membedakan utama adalah untuk merancang perangkat lunak sehingga berbagai jenis data yang memanipulasi digabungkan bersama-sama dengan operasi yang relevan mereka. Dengan demikian, data dan kode digabung menjadi entitas disebut objek. Sebuah objek dapat dianggap sebagai sebuah paket mandiri perilaku (code) dan negara (data). Prinsipnya adalah untuk memisahkan hal-hal yang berubah dari hal-hal yang tetap sama, sering, perubahan untuk beberapa struktur data memerlukan perubahan yang sesuai dengan kode yang beroperasi pada data, atau sebaliknya. Pemisahan ini menjadi obyek yang koheren memberikan fondasi yang lebih stabil untuk desain sistem perangkat lunak. Tujuannya adalah untuk membuat proyek software besar lebih mudah untuk mengelola, sehingga meningkatkan kualitas dan mengurangi jumlah proyek yang gagal.

Lain Tujuan utama dari pemrograman OO adalah untuk mengembangkan objek lebih generik sehingga perangkat lunak yang dapat digunakan kembali menjadi lebih antara proyek. Sebuah generik "pelanggan" objek, misalnya, harus memiliki kira-kira set dasar yang sama perilaku antara proyek perangkat lunak yang berbeda, terutama ketika proyek-proyek tumpang tindih pada beberapa tingkat dasar karena mereka sering dilakukan di organisasi besar. Dalam hal ini, objek perangkat lunak diharapkan dapat dilihat lebih sebagai komponen pluggable, membantu industri perangkat lunak membangun proyek-proyek sebagian besar dari potongan-potongan yang ada dan teruji, sehingga mengarah ke penurunan besar dalam waktu pengembangan. Usabilitas Software telah bertemu dengan hasil praktis campuran, dengan dua kesulitan utama: desain benda yang benar-benar generik kurang dipahami, dan metodologi untuk komunikasi luas peluang reuse kurang. Beberapa komunitas open source ingin membantu meringankan masalah penggunaan kembali, dengan memberikan penulis dengan cara untuk menyebarkan informasi tentang obyek umumnya digunakan kembali dan perpustakaan objek.

Platform Idependence

Karakteristik kedua, independensi platform, berarti bahwa program yang ditulis dalam bahasa Jawa harus dijalankan sama pada perangkat keras yang beragam. Satu harus mampu menulis sebuah program sekali dan menjalankannya di mana saja.

Hal ini dicapai dengan kompiler Java paling dengan menyusun kode bahasa Jawa "setengah" untuk bytecode (khusus Java bytecode)-disederhanakan instruksi mesin khusus untuk platform Java. Kode tersebut kemudian dijalankan pada mesin virtual (VM), sebuah program yang ditulis dalam kode asli pada perangkat keras tuan rumah yang menafsirkan dan mengeksekusi bytecode Java generik. Selanjutnya, perpustakaan standar disediakan untuk memungkinkan akses ke fitur dari mesin host (seperti grafik, threading dan jaringan) dengan cara yang terpadu. Perhatikan bahwa, meskipun ada tahap kompilasi eksplisit, di beberapa titik, bytecode Java ditafsirkan atau dikonversi ke instruksi mesin asli oleh compiler JIT.

Ada juga implementasi kompiler Java yang mengkompilasi ke kode objek asli, seperti GCJ, menghapus tahap bytecode menengah, tapi output dari kompiler hanya dapat dijalankan pada arsitektur tunggal.

Lisensi Sun Java menegaskan bahwa semua implementasi akan "kompatibel". Ini mengakibatkan sengketa hukum dengan Microsoft setelah Sun mengklaim bahwa implementasi Microsoft tidak mendukung antarmuka RMI dan JNI dan telah menambahkan platform-fitur khusus mereka sendiri. Sebagai tanggapan, Microsoft tidak lagi kapal Java dengan Windows, dan dalam versi terbaru dari Windows, Internet Explorer tidak dapat mendukung applet Java tanpa plug-in pihak ketiga. Namun, Sun dan lain-lain telah tersedia Java run-time sistem tanpa biaya bagi mereka dan versi lain dari Windows.

Implementasi pertama dari bahasa yang digunakan sebuah mesin virtual ditafsirkan untuk mencapai portabilitas. Implementasi tersebut menghasilkan program yang berjalan lebih lambat dari program disusun untuk executable asli, misalnya ditulis dalam C atau C + +, sehingga bahasa mengalami reputasi untuk kinerja yang buruk. Lebih baru JVM implementasi menghasilkan program yang dijalankan secara signifikan lebih cepat dari sebelumnya, dengan menggunakan beberapa teknik.

Teknik pertama adalah dengan hanya mengkompilasi langsung ke kode asli seperti compiler lebih tradisional, melewatkan bytecode seluruhnya. Ini mencapai kinerja yang baik, tetapi dengan mengorbankan portabilitas. Teknik lain, yang dikenal sebagai just-in-time kompilasi (JIT), menerjemahkan bytecode Java ke kode asli pada saat itu bahwa program ini dijalankan yang menghasilkan sebuah program yang mengeksekusi lebih cepat daripada kode ditafsirkan tetapi juga menimbulkan biaya overhead kompilasi selama eksekusi. VMs lebih canggih menggunakan kompilasi dinamis, dimana VM dapat menganalisis perilaku program berjalan dan selektif ulang dan mengoptimalkan bagian-bagian penting dari program. Kompilasi dinamis dapat mencapai optimasi unggul kompilasi statis karena kompilator dinamis dapat mendasarkan optimasi pada pengetahuan tentang lingkungan runtime dan set kelas dimuat. Kompilasi JIT dan kompilasi dinamis memungkinkan program Java untuk mengambil keuntungan dari kecepatan kode asli tanpa kehilangan portabilitas.

Portabilitas adalah tujuan teknis sulit dicapai, dan kesuksesan Jawa pada tujuan yang telah dicampur. Meskipun memang dimungkinkan untuk menulis program untuk platform Java yang berperilaku secara konsisten di seluruh platform host banyak, sejumlah besar platform yang tersedia dengan kesalahan kecil atau inkonsistensi membuat beberapa parodi Sun slogan "Tulis sekali, jalankan di mana saja" sebagai "Tulis sekali, debug di mana-mana ".

Platform-independen Jawa namun sangat sukses dengan aplikasi server-side, seperti layanan Web, servlet, dan Enterprise JavaBeans, serta dengan Embedded system berdasarkan OSGi, menggunakan Tertanam Java lingkungan.

Pengumpulan Sampah Otomatis

Satu ide di belakang model manajemen otomatis Jawa memori adalah bahwa programmer harus terhindar beban harus melakukan manajemen memori manual. Dalam beberapa bahasa programmer mengalokasikan memori untuk membuat benda-benda yang disimpan di heap dan bertanggung jawab untuk kemudian secara manual deallocating memori yang menghapus benda tersebut. Jika seorang programmer lupa untuk deallocate memori atau menulis kode yang gagal untuk melakukannya secara tepat waktu, kebocoran memori dapat terjadi: program akan mengkonsumsi sejumlah berpotensi sewenang-wenang besar memori. Selain itu, jika suatu daerah memori deallocated dua kali, program ini dapat menjadi tidak stabil dan bisa terjadi crash. Akhirnya, dalam lingkungan sampah non dikumpulkan, ada tingkat tertentu overhead dan kompleksitas pengguna-kode untuk melacak dan menyelesaikan alokasi.

Di Jawa, masalah potensial dihindari dengan pengumpulan sampah otomatis. Pemrogram menentukan kapan objek diciptakan, dan runtime Java bertanggung jawab untuk mengelola siklus hidup objek. Program atau objek lain dapat referensi objek dengan memegang referensi untuk itu (yang, dari sudut pandang tingkat rendah pandang, adalah alamat pada heap). Bila tidak ada referensi ke objek tetap, pengumpul sampah Java secara otomatis menghapus objek unreachable, membebaskan memori dan mencegah kebocoran memori. Kebocoran memori masih bisa terjadi jika kode programmer memegang referensi ke sebuah obyek yang tidak lagi diperlukan-dengan kata lain, mereka masih dapat terjadi, tetapi pada tingkat konseptual yang lebih tinggi.

Penggunaan pengumpulan sampah dalam bahasa juga dapat mempengaruhi paradigma pemrograman. Jika, misalnya, pengembang mengasumsikan bahwa biaya alokasi memori / ingatan rendah, mereka mungkin memilih untuk lebih leluasa membangun objek bukan pra-menginisialisasi, memegang dan menggunakan kembali mereka. Dengan biaya kecil hukuman kinerja potensial (inner-loop konstruksi benda besar / kompleks), ini memfasilitasi benang-isolasi (tidak perlu sinkronisasi sebagai benang yang berbeda bekerja pada contoh objek yang berbeda) dan data-bersembunyi. Penggunaan sementara nilai-benda berubah meminimalkan efek samping pemrograman.

Membandingkan Java dan C + +, mungkin dalam C + + untuk mengimplementasikan fungsi serupa (misalnya, manajemen memori model untuk kelas tertentu dapat dirancang dalam C + + untuk meningkatkan kecepatan dan menurunkan fragmentasi memori jauh), dengan biaya yang mungkin dari waktu pengembangan ekstra dan beberapa aplikasi kompleksitas. Di Jawa, pengumpulan sampah adalah built-in dan hampir tidak terlihat oleh pengembang. Artinya, pengembang mungkin tidak memiliki gagasan tentang kapan pengumpulan sampah akan berlangsung karena belum tentu berkorelasi dengan tindakan yang eksplisit dilakukan oleh kode yang mereka tulis. Tergantung pada aplikasi yang dimaksudkan, ini dapat menguntungkan atau merugikan: programmer dibebaskan dari melakukan tugas-tugas tingkat rendah, tetapi pada saat yang sama kehilangan pilihan untuk menulis kode tingkat yang lebih rendah

Syntax

Sintaks Java sebagian besar berasal dari C + +. Namun, tidak seperti C + +, yang menggabungkan sintaks untuk pemrograman terstruktur, generik, dan berorientasi objek, Java dibangun dari bawah ke atas untuk menjadi hampir sepenuhnya berorientasi obyek: segala sesuatu di Java adalah obyek dengan pengecualian dari datatypes atom (ordinal dan bilangan real, nilai boolean, dan karakter) dan segala sesuatu di Java yang tertulis di dalam kelas.

Applet

Java applet adalah program yang tertanam dalam aplikasi lain, biasanya dalam sebuah halaman web ditampilkan dalam browser Web.

/ / Hello.java
impor java.applet.Applet;
impor java.awt.Graphics;

public class Hello {meluas Applet
public void paint (Graphics gc) {
gc.drawString ("Hello, world!", 65, 95);
}
}

Applet ini hanya akan menarik tali "Halo, dunia!" dalam persegi panjang di mana applet akan berjalan. Ini adalah contoh yang sedikit lebih baik menggunakan fitur OO Jawa di kelas secara eksplisit memperluas "Applet" basic class, yang mengesampingkan "cat" metode dan bahwa ia menggunakan pernyataan impor.

<- Hello.html -!>
<html>
<head>
Applet Dunia <title> Hello </ title>
</ head>
<body>
<applet code="Hello" width="200" height="200">
</ applet>
</ body>
</ html>

Sebuah applet ditempatkan dalam dokumen HTML menggunakan elemen <applet> HTML. Tag applet memiliki tiga set atribut: kode = "Halo" menentukan nama dari kelas Applet dan lebar = "200" height = "200" set lebar pixel dan tinggi applet. (Applet juga dapat tertanam dalam HTML baik menggunakan obyek atau elemen embed, walaupun dukungan terhadap elemen-elemen oleh Web browser tidak konsisten.

Servlet

Servlets Java sisi server Java EE komponen yang menghasilkan tanggapan terhadap permintaan dari klien.

/ / Hello.java
import java.io. *;
mengimpor javax.servlet *;.

public class Hello {meluas GenericServlet
public void layanan (ServletRequest permintaan, ServletResponse respon)
throws ServletException, IOException
{
response.setContentType ("text / html");
PrintWriter pw = response.getWriter ();
pw.println ("Hello, world!");
pw.close ();
}
}

Laporan impor mengarahkan compiler Java untuk menyertakan semua kelas masyarakat dan interface dari java.io dan paket javax.servlet di kompilasi. Kelas Hello memperluas kelas GenericServlet, kelas GenericServlet menyediakan antarmuka untuk server untuk meneruskan permintaan ke servlet dan mengendalikan siklus hidup servlet.

Kelas Hello menimpa layanan (ServletRequest, ServletResponse) metode yang didefinisikan oleh interface Servlet untuk memberikan kode untuk penangan permintaan layanan. Layanan () metode melewati sebuah objek ServletRequest yang berisi permintaan dari klien dan objek ServletResponse digunakan untuk membuat respon kembali ke klien. Layanan () metode menyatakan bahwa ia melempar pengecualian ServletException dan IOException jika masalah mencegah dari menanggapi permintaan tersebut.

The setContentType (String) metode dalam objek respon dipanggil untuk mengatur jenis konten MIME dari data kembali ke "text / html". The getWriter () metode dalam penanggulangan mengembalikan sebuah obyek PrintWriter yang digunakan untuk menulis data yang dikirim ke klien. The println (String) metode ini disebut untuk menulis "Halo, dunia!" string ke respon dan kemudian tutup () metode ini disebut untuk menutup penulis cetak, yang menyebabkan data yang telah ditulis ke aliran dikembalikan ke klien.

Aplikasi Swing

Swing adalah pengguna tingkat lanjut perpustakaan antarmuka grafis untuk platform Java SE.

/ / Hello.java
mengimpor javax.swing *;.

public class Hello extends JFrame {
Hello () {
setDefaultCloseOperation (WindowConstants.DISPOSE_ON_CLOSE);
add (new JLabel ("Hello, world!"));
pak ();
}

public static void main (String [] args) {
baru Hello () setVisible (true).;
}
}

Pernyataan impor mengarahkan compiler Java untuk menyertakan semua kelas masyarakat dan interface dari paket javax.swing dalam kompilasi. Kelas Hello memperluas kelas JFrame, kelas JFrame mengimplementasikan sebuah jendela dengan judul bar dengan kontrol dekat.

Konstruktor Hello () menginisialisasi bingkai dengan pertama-tama memanggil setDefaultCloseOperation (int) metode Warisan dari JFrame untuk mengatur operasi default ketika kontrol dekat pada bar judul dipilih untuk WindowConstants.DISPOSE_ON_CLOSE-ini menyebabkan JFrame yang akan dibuang ketika frame ditutup (sebagai lawan hanya tersembunyi), yang memungkinkan JVM untuk keluar dan program untuk mengakhiri. Selanjutnya JLabel baru diciptakan untuk string "Halo, dunia!" dan metode (Komponen) add diwarisi dari Kontainer superclass dipanggil untuk menambahkan label untuk frame. Paket () metode yang diwarisi dari superclass Window dipanggil untuk ukuran jendela dan tata letak isinya.

The (utama) metode ini disebut oleh JVM ketika program dijalankan. Ini instantiates bingkai Hello baru dan menyebabkannya untuk ditampilkan dengan memanggil metode (boolean) setVisible diwarisi dari superclass Komponen dengan parameter boolean benar. Perhatikan bahwa setelah frame ditampilkan, keluar metode utama tidak menyebabkan program untuk mengakhiri karena thread acara AWT pengiriman tetap aktif sampai semua jendela swing tingkat atas telah dibuang.

Look And Feel

Default tampilan dan nuansa dari aplikasi GUI yang ditulis di Jawa menggunakan toolkit Swing sangat berbeda dari aplikasi asli. Hal ini dimungkinkan untuk menentukan tampilan yang berbeda dan nuansa melalui tampilan dan nuansa pluggable sistem Swing. Klon Windows, GTK dan Motif yang disediakan oleh Sun. Apple juga menyediakan Aqua suatu tampilan dan nuansa untuk Mac OS X. Meskipun implementasi sebelumnya ini terlihat dan terasa telah dianggap kurang, Swing di Java SE 6 membahas masalah ini dengan menggunakan widget lebih asli menggambar rutinitas platform yang mendasarinya. Atau, toolkit pihak ketiga seperti wx4j atau SWT dapat digunakan untuk peningkatan integrasi dengan sistem windowing asli.

Lack Of OO Purity And Facilities

Tipe primitif Java bukan obyek. Tipe primitif memegang nilai-nilai mereka dalam tumpukan daripada menjadi referensi nilai-nilai. Ini adalah keputusan sadar oleh desainer Java untuk alasan kinerja. Karena itu, Java tidak dianggap sebagai bahasa pemrograman berorientasi objek murni. Namun, seperti Java 5.0, autoboxing memungkinkan programmer untuk menulis seolah-olah tipe primitif adalah kelas wrapper mereka, dan bebas pertukaran antara mereka untuk peningkatan fleksibilitas. Desainer Java memutuskan untuk tidak menerapkan fitur tertentu hadir dalam bahasa OO lainnya, termasuk:

* multiple inheritance
* operator overloading
* class properties
* tuple


Java Runtime Environment

The Java Runtime Environment atau JRE adalah perangkat lunak yang diperlukan untuk menjalankan aplikasi yang digunakan pada Java Platform. Akhir-pengguna biasanya menggunakan JRE dalam paket perangkat lunak dan plugin browser Web. Sun juga mendistribusikan superset dari JRE yang disebut Java 2 SDK (lebih dikenal sebagai JDK), yang mencakup alat pengembangan seperti compiler Java, Javadoc, dan debugger.


Tidak ada komentar:

Posting Komentar

Like This