Senin, 23 Maret 2009

Perencanaan Aplikasi Chatting pada Hp beserta Script

Dengan Menggunakan Protokol L2CAP Pada Bluetooth
Adanya teknologi Bluetooth pada telepon selular membuka kesempatan
bagi pengembangan aplikasi telepon selular menuju arah yang baru. Salah satu
aplikasi Bluetooth pada telepon selular tersebut adalah aplikasi chatting pada
telepon selular.

Aplikasi tersebut dibuat dengan menggunakan bahasa pemrograman
Java 2 Micro Edition ( J2ME ), serta ditunjang dengan Java API untuk Bluetooth
(JSR-82), Java API untuk MIDP (JSR-37) dan Java API untuk CLDC (JSR-30).
Koneksi pada aplikasi chatting ini dibuat hanya antar 2 telepon selular,
satu telepon selular berfungsi sebagai server yang menyediakan service untuk
chatting dan telepon selular yang lain berfungsi sebagai client yang mengadakan
koneksi ke server. Protokol komunikasi yang dipakai untuk pertukaran data pada
aplikasi ini adalah protokol komunikasi Bluetooth, yaitu protokol L2CAP.

Pengujian aplikasi chatting pada telepon selular dengan menggunakan
Bluetooth dilakukan pada 2 buah telepon selular Nokia 6600. Pengujian tersebut
berjalan dengan baik, dengan hasil baik yaitu pengadaan service dan penerimaan
koneksi oleh sever dapat dilakukan, mengadakan koneksi pada server serta service
oleh client dapat dilakukan dan data antar kedua telepon selular dapat
dipertukarkan.

Kesimpulan yang dicapai adalah bahwa aplikasi Java untuk chatting
pada telepon selular dengan menggunakan Bluetooth dapat diwujudkan.




LAMPIRAN 1 : Script ChatController.Java

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.io.*;
import javax.bluetooth.*;
import java.io.*;
/* Sebagai pengontrol seluruh program, baik sebagai server ataupun client*/
public class ChatController extends MIDlet implements CommandListener {
private static final String UUID_STRING =
"11112233445566778899AABBCCDDEEFF";
public static ChatController instan;
public static Display display;
public Form mainUI;
public StringItem status = new StringItem("status:", null);
public MessageUI terima;
public InputUI tulis;
public ChoiceGroup devices = new ChoiceGroup(null, Choice.EXCLUSIVE);
public Command exitCommand = new Command("Exit", Command.EXIT, 2);
public Command startCommand = new Command("Start server", Command.SCREEN,
1);
public Command connectCommand = new Command("Connect to server",
Command.SCREEN, 2);
public Command selectCommand = new Command("Select", Command.SCREEN, 1);
private LocalDevice localDevice;
private DiscoveryAgent agent;
private L2CAPConnection conn;
private RemoteDevice[ ] remoteDevices;
private boolean running = false;
public ChatController( ) {
instan = this;
}
public void startApp( ) {
running = true;
tulis = new InputUI( );
terima = new MessageUI( );
display = Display.getDisplay(this);
mainUI = new Form("Chat");

mainUI.append(status);
mainUI.setCommandListener(this);
mainUI.addCommand(exitCommand);
mainUI.addCommand(startCommand);
mainUI.addCommand(connectCommand);
display.setCurrent(mainUI);
try{
localDevice = LocalDevice.getLocalDevice( );
agent = localDevice.getDiscoveryAgent( );
} catch(BluetoothStateException bse) {
status.setText("Bluetooth Exception: " + "Unable to start");
try{
Thread.sleep(2000);
} catch(InterruptedException ie) { }
notifyDestroyed( );
}
}
public void pauseApp( ) {
running = false;
releaseResources( );
}
public void destroyApp(boolean unconditionally) {
running = false;
releaseResources( );
}
public void commandAction(Command c, Displayable d) {
if (c == exitCommand) {
running = false;
releaseResources( );
notifyDestroyed( );
}
else if (c == startCommand) {
new Thread( ){
public void run( ){

startServer( );
}
}.start( );
}
else if (c == connectCommand) {
status.setText("Searching for devices...");
mainUI.removeCommand(connectCommand);
mainUI.removeCommand(startCommand);
mainUI.append(devices);
DeviceDiscoverer discoverer = new DeviceDiscoverer(ChatController.this);
try {
//non-blocking
agent.startInquiry(DiscoveryAgent.GIAC, discoverer);
}
catch(BluetoothStateException bse){
status.setText("BSException: " + bse.getMessage());
}
}
else if (c == selectCommand) {
status.setText("Searching device for service");
int index = devices.getSelectedIndex( );
mainUI.delete(mainUI.size()-1); //menghapus group pilihan
mainUI.removeCommand(selectCommand);
ServiceDiscoverer serviceDiscoverer = new
ServiceDiscoverer(ChatController.this);
int[ ] attrSet = {0x0100}; //mengembalikan nama service attribute
UUID[ ] uuidSet = new UUID[1];
uuidSet[0] = new UUID(UUID_STRING, false);
try {
//non-blocking
agent.searchServices(attrSet, uuidSet, remoteDevices[index],
serviceDiscoverer);
} catch(BluetoothStateException bse) {
status.setText("Bluetooth Exception: " + bse.getMessage( ));
}
}

else if ( d== tulis && c.getLabel( ).equals("Back"))
{
//kembali ke console
display.setCurrent(terima);
}
else if ( d== terima && c.getLabel( ).equals("Write"))
{
//menulis pesan
display.setCurrent(tulis);
tulis.showUI(); //membersihkan form
}
else if ( d== terima && c.getLabel( ).equals("Clear"))
{
//clear screen
terima.msgs.removeAllElements( );
terima.repaint( );
}
else if ( d== tulis && c.getLabel( ).equals("Send"))
{
new Thread( ){
public void run( ){
sendMessage( );
}
}.start( );
}
}
/** Memanggil dari DeviceDiscoverer inquiryCompleted ketika unit inquiry selesai */
public void deviceInquiryFinished(RemoteDevice[] remoteDevices, String message){
this.remoteDevices = remoteDevices;
String[] names = new String[remoteDevices.length];
for(int i = 0; i < remoteDevices.length; i++) {
try {
String name = remoteDevices[i].getFriendlyName(false);
names[i] = name;
}catch(IOException ioe){
status.setText("IOException: " + ioe.toString());

}
}
for(int i = 0; i < names.length; i++) {
devices.append(names[i], null);
}
mainUI.addCommand(selectCommand);
status.setText(message);
}
/** Memanggil dari ServiceDiscover serviceSearchCompleted ketika service search
selesai */
public void serviceSearchFinished(ServiceRecord serviceRecord, String message){
status.setText(message);
String url =
serviceRecord.getConnectionURL(ServiceRecord.NOAUTHENTICATE_NOENCRYPT,
false);
try{
conn = (L2CAPConnection)Connector.open(url);
status.setText("connected");
new Thread(){
public void run(){
startReceiver();
}
}.start();
}catch(IOException ioe){
status.setText("IOException: " + ioe.getMessage());
}
}
/** Memulai server chat dengan server mode */
public void startServer(){
status.setText("Server starting...");
mainUI.removeCommand(connectCommand);
mainUI.removeCommand(startCommand);

try{
localDevice.setDiscoverable(DiscoveryAgent.GIAC);
L2CAPConnectionNotifier notifier =
(L2CAPConnectionNotifier)Connector.open("btl2cap://localhost:" + UUID_STRING +
";name=BTL2Chat");
status.setText("Server running");
conn = notifier.acceptAndOpen( );//record disimpan pada SDDB
new Thread( ){
public void run( ){
startReceiver( );
}
}.start();
} catch(IOException ioe) {
status.setText("IOException: " + ioe.toString( ));
}
}
/** memulai untuk menerima pesan */
public void startReceiver( ){
display.setCurrent(terima);
while(running){
try{
if(conn.ready()){
int receiveMTU =conn.getReceiveMTU( );
byte[ ] data = new byte[receiveMTU];
int length = conn.receive(data);
String message = new String(data, 0, length);
String name = new String ("receive : ");
ChatPacket packet = new ChatPacket (name, message);
terima.msgs.addElement(packet);
terima.repaint();
}
}catch(IOException ioe){
String name = new String ("Status : ");
String status = new String("IOException: " + ioe.getMessage( ));
ChatPacket packet = new ChatPacket (name, status);
terima.msgs.addElement(packet);

terima.repaint( ); }
}
}
/** Mengirim Pesan */
public void sendMessage() {
display.setCurrent(tulis);
byte[] data = null;
int index = 0;
byte[] temp = null;
try {
String message = new String (tulis.getString());
String name = new String ("send : ");
data = message.getBytes();
int transmitMTU = conn.getTransmitMTU();
temp = new byte[transmitMTU];
while (index < data.length)
{
if ((data.length - index) < transmitMTU)
{
temp = new byte[data.length-index];
System.arraycopy(data, index, temp, 0, data.length-index);
} else {
temp = new byte[transmitMTU];
System.arraycopy(data, index, temp, 0, transmitMTU);
}
conn.send(temp);
index += transmitMTU;
}
ChatPacket packet = new ChatPacket(name, message);
terima.msgs.addElement(packet);
display.setCurrent(terima);
terima.repaint();
} catch(IOException ioe) {
String name = new String ("Status : ");
String status = new String("IOException: " + ioe.getMessage());
ChatPacket packet = new ChatPacket(name, status);

terima.msgs.addElement(packet);
display.setCurrent(terima);
terima.repaint();
}
}
/** menutup koneksi */
public void releaseResources(){
try{
if(conn != null)
conn.close();
}catch(IOException ioe){
status.setText("IOException: " + ioe.getMessage());
}
}
}

Lampiran 2 : Script ChatPacket.Java
//untuk tempat sementara dari pesan sebelum ditampilkan/

public class ChatPacket
{
public String sender;
public String msg;
public ChatPacket(String sender, String msg)
{
this.sender = sender;
this.msg = msg;
}
}

Lampiran 3 : Script DeviceDiscoverer.Java

import javax.bluetooth.*;
import java.util.*;
/** Implementasi sebuah DiscvoveryListener untuk device discovery */
public class DeviceDiscoverer implements DiscoveryListener {
private ChatController controller;
private Vector remoteDevices;
public DeviceDiscoverer(ChatController controller) {
this.controller = controller;
remoteDevices = new Vector();
}
public void servicesDiscovered(int transID, ServiceRecord[] servRecord){}
public void serviceSearchCompleted(int transID, int respCode) {}
/** Dipanggil oleh aplikasi ketika sebuah unit ditemukan */
public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) {
remoteDevices.addElement(btDevice);
}
/** Dipanggil oleh aplkasi ketika device inquiry selesai */
public void inquiryCompleted(int discType) {
String message = null;
if (discType == INQUIRY_COMPLETED) {
message = "Inquiry completed";
} else if (discType == INQUIRY_TERMINATED) {
message = "Inquiry terminated";
} else if (discType == INQUIRY_ERROR) {
message = "Inquiry error";
}
RemoteDevice[] devices = new RemoteDevice[remoteDevices.size()];
for(int i = 0; i < remoteDevices.size(); i++) {
devices[i] = (RemoteDevice)remoteDevices.elementAt(i);
}
controller.deviceInquiryFinished(devices, message);
remoteDevices = null;
controller = null;
}
}

Lampiran 4 : Script ServiceDiscoverer.Java

import javax.bluetooth.*;
import java.io.*;
/** Implementasi sebuah DiscvoveryListener untuk service discovery */
public class ServiceDiscoverer implements DiscoveryListener {
private static final String SERVICE_NAME = "BTL2Chat";
private ChatController controller;
private ServiceRecord serviceRecord;
public ServiceDiscoverer(ChatController controller) {
this.controller = controller;
}
/* Dipanggil oleh aplikasi ketika services specified oleh uuidSet lolos pada
method DiscoveryAgent.searchServices ditemukan*/
public void servicesDiscovered(int transID, ServiceRecord[] servRecord) {
for(int i = 0; i < servRecord.length; i++) {
DataElement serviceNameElement =
servRecord[i].getAttributeValue(0x0100);//get the Service Name
String serviceName = (String)serviceNameElement.getValue();
if(serviceName.equals(SERVICE_NAME)){
serviceRecord = servRecord[0];
}
}
}
/* Dipanggil oleh aplikasi ketika pencarian selesai */
public void serviceSearchCompleted(int transID, int respCode) {
String message = null;
if (respCode ==
DiscoveryListener.SERVICE_SEARCH_DEVICE_NOT_REACHABLE) {
message = "Device not reachable";
}
else if (respCode == DiscoveryListener.SERVICE_SEARCH_NO_RECORDS) {
message = "Service not available";
}
else if (respCode == DiscoveryListener.SERVICE_SEARCH_COMPLETED) {
message = "Service search completed";
}
else if (respCode == DiscoveryListener.SERVICE_SEARCH_TERMINATED) {
message = "Service search terminated";
}
else if (respCode == DiscoveryListener.SERVICE_SEARCH_ERROR) {
message = "Service search error";
}
controller.serviceSearchFinished(serviceRecord, message);
controller = null;
serviceRecord = null;
}
public void inquiryCompleted(int discType){}
public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod){}
}

Lampiran 5 : Script InputUI.Java

import javax.microedition.lcdui.*;
public class InputUI extends TextBox {
/**Membangun form untuk menulis pesan*/
public InputUI() {
super("Enter Message", "", 50, TextField.ANY);
addCommand(new Command("Send", Command.SCREEN, 1));
addCommand(new Command("Back", Command.SCREEN, 2));
setCommandListener(ChatController.instan);
}
public void showUI()
{
this.setString("");
}
}

Lampiran 6 : Script MessageUI.Java

import javax.microedition.lcdui.*;
import java.util.*;
// untuk form console
public class MessageUI extends Canvas
{
// mendata pesan yang ada untuk ditampilkan
Vector msgs = new Vector();
// nilai idx pesan
int midx = 0;
// lebar dan panjang gambar
int w, h;
// panjang font
int fh;
// font untuk ditampilkan di layar
Font f;
int x0=0, y0=0;
public MessageUI()
{
addCommand(new Command("Write", Command.SCREEN, 1));
addCommand(new Command("Clear", Command.SCREEN, 2));
setCommandListener(ChatController.instan);
}
protected void paint(Graphics g)
{
if ( f == null )
{
// mengambil nilai font and lebar,panjang
// ketika digunakan pertama kali
f = Font.getFont( Font.FACE_MONOSPACE, Font.STYLE_PLAIN,
Font.SIZE_SMALL );
w = this.getWidth();
h = this.getHeight();
fh = f.getHeight();
}
//
// menentukan midx berdasarkan panjang layar dan banyak pesan
int y = fh;
// pesan ditampilkan dgn warna hitam dan background hitam
g.setColor( 255, 255, 255 );
g.fillRect( 0, 0, w, h );
g.setColor( 0, 0, 0 );
g.setFont( f );
g.translate(-x0, -y0);
// menampilkan pesan dilayar
for ( int i= midx; i< msgs.size(); i++ )

{
ChatPacket p = (ChatPacket)msgs.elementAt(i);
String s = p.sender+p.msg;
g.drawString( s, 0, y, Graphics.BASELINE | Graphics.LEFT );
y += fh;
}
}
public void keyPressed( int key )
{ // kett: nilai 50 sampai 100 untuk kecepatan scroll layar
if ( getGameAction( key ) == Canvas.RIGHT )
{
x0+=50;
} else if ( getGameAction( key ) == Canvas.LEFT )
{
x0-=50;
} else if ( getGameAction( key ) == Canvas.UP )
{
y0-=50;
} else if ( getGameAction( key ) == Canvas.DOWN )
{
y0+=50;
}
repaint();
}
}

LAMPIRAN 7 : Instalasi J2ME Toolkit

Sebelum menginstal J2ME Toolkit, terlebih dahulu pada komputer telah
terinstal Java 2 SDK versi 1.4. Untuk menginstal J2ME Toolkit, dibutuhkan
instaler yang dinamakan J2MEWTK dan disarankan pada versi yang terbaru
(pada saat ini versi yang terbaru adalah J2ME Wireless Toolkit Versi 2.2 beta).
Pada contoh ini, J2MEWTK yang digunakan adalah versi 2.1 dan file yang
diperlukan adalah j2me_wireless_toolkit-2_1-windows.exe.
Langkah-langkah instalasi adalah sebagai berikut :
1. Klik ganda pada file j2me_wireless_toolkit-2_1-windows.exe untuk
memulai instalasi.
2. Selanjutnya pada tampilan berikutnya, tekan tombol “Next >”
3. Pada tampilan License Agreement, tekan tombol “Yes”.
4. selanjutnya, secara otomatis aplikasi instaler akan mencari lokasi dari
Java Virtual Machine yang terinstal pada komputer dengan default lokasi
c:\jdk1.4. , jika tidak ada, maka dapat dicari dengan menekan tombol
“Browse”.
5. Kemudian, tentukan dimana program akan diinstal, dengan default lokasi
adalah c:\J2MEWTK 2.1. tekan tombol “Next >”
6. Pilih tipe setup, apakah terintergrasi atau berdiri sendiri. Untuk aplikasi
pada umunya dipilih pilihan berdiri sendiri atau Stand alone.
7. Lalu pilih folder untuk Start menu, tekan tombol “Next >”.
8. Selanjutnya, akan ditampilkan pemberitahuan pengaturan yang dipilih,
tekan tombol “Next >”.
9. Tunggu sampai proses instalasi selesai, setelah itu tekan tombol “Finish”
Diposkan oleh maulana di 06:24 0 komentar
Kamis, 2009 Maret 19
contoh implementasi java yang lain
IMPLEMENTASI JAVA 2 MICRO EDITION UNTUK PEMBUATAN KAMUS BAHASA INGGRIS - INDONESIA PADA HANDPHONE NOKIA STUDI KASUS SERI 6600 DAN N-GAGE

Tahun 2006

Kode 0810017

Perkembangan teknologi informasi semakin hari semakin pesat. Salah satunya yaitu penggunaan handphone. Handphone adalah suatu alat komunikasi wireless yang dapat juga digunakan untuk mengirim pesan dan membuka software aplikasi yang dibuat oleh suatu perusahaan ponsel. Salah satu contoh aplikasi handphone adalah ultraMp3 yang fungsinya untuk mendengarkan musik, disini penulis mencoba membuat aplikasi handphone berupa Kamus bahasa Inggris-Indonesia. Kamus sendiri tidak asing lagi terdengar di telinga kita, kamus merupakan alat bantu yang digunakan untuk menerjemahkan suatu bahasa. Pada saat sekarang penggunaaan kamus sangat diperlukan akan tetapi yang tidak mempersulit user dengan kata lain praktis dalam penggunaannya, oleh karena itu penulis berusaha mengimplementasikan pemikirannya dengan mencoba membuat aplikasi perangkat mobile / handphone berupa kamus.

Kamus mobile yang di pasangkan pada perangkat handphone, dapat dijadikan sebagai jalan alternatif dalam penerjemahan bahasa inggris ke bahasa indonesia maupun sebaliknya.

Metode pembuatan software aplikasi handphone menggunakan software Java. Sun Microsystem telah mendefinisikan tiga paltform java, yang masing-masing diarahkan untuk tujuan tertentu dan untuk lingkungan komputasi yang berbeda-beda :
a.Standard Edition (J2SE): Didesain untuk jalan pada komputer desktop dan komputer workstations.
b.Enterprise Edition (J2EE): Dengan built-in mendukung untuk servlets, JSP, dan XML, edisi ini ditujukan untuk aplikasi berbasis server.
c.Micro Edition (J2ME): Didesain untuk piranti dengan memori terbatas, layar display terbatas dan power pemrosesan yang juga terbatas.

Kamis, 19 Maret 2009

Contoh Aplikasi Java

Contoh Aplikasi Mysql & Java
program untuk persiapan ujian Pemrograman Berorientasi Obyek II mahasiswa Universitas Islam Negri SUSQA yang akan diadakan setelah ujian tengah semester teori.
Database yang digunakan adalah akademik, tabel mahasiswa dan server adalah localhost. Gunakan class KoneksiMysql yang sudah pernah dibuat sebelumnya.

import java.sql.*;
import java.io.*;

class menu {
public static void main(String args[]) throws IOException{
BufferedReader stdin=new
BufferedReader(new InputStreamReader(System.in));

String buff;
int pilih;

try {
KoneksiMysql kon = new KoneksiMysql ("akademik");
Connection c = kon.getConnection();
pilih=0;
while(pilih<5) {
System.out.println(" Menu : ");
System.out.println(" 1. Lihat Data ");
System.out.println(" 2. Tambah Data ");
System.out.println(" 3. Hapus Data ");
System.out.println(" 4. Update Data ");
System.out.println(" 5. Exit ");
System.out.print(" Pilih nomor : ");
buff = stdin.readLine();
pilih=Integer.parseInt(buff);
ResultSet hasilQuery = null;
Statement stm = connection.createStatement();

switch(pilih){
case 1:
{
hasilQuery = stm.executeQuery("SELECT * FROM mahasiswa");

while (hasilQuery.next()) {
String nim_mahasiswa = hasilQuery.getString("nim");
String nama_mahasiswa = hasilQuery.getString("nama");
System.out.println(nim_mahasiswa+" -> " + nama_mahasiswa); }

break;
}
case 2:
{
String nim_t, nama_t;
System.out.print("nim : ");
nim_t = stdin.readLine();
System.out.print("nama : ");
nama_t = stdin.readLine();
String sql="INSERT into mahasiswa values('"+nim_t+"','"+nama_t+"')";
stm.executeUpdate(sql);
break;
}
case 3:
{
String nim_h;
System.out.print("nim : ");
nim_h = stdin.readLine();
String sqlh="DELETE from mahasiswa where nim = '"+nim_h+"'";
stm.executeUpdate(sqlh);
break;
}
case 4:
{
String nim_u,nama_u;
System.out.print("nim : ");
nim_u = stdin.readLine();
hasilQuery = stm.executeQuery("SELECT * FROM mahasiswa where nim = '" + nim_u + "'");
while (hasilQuery.next()) {
String nm_mahasiswa = hasilQuery.getString("nama");
System.out.println("Nama : " + nm_mahasiswa);
}

System.out.print("Nama Baru : ");
nama_u = stdin.readLine();

String sqlu="UPDATE mahasiswa set nama='" + nama_u + "' where nim = '" + nim_u + "'";
stm.executeUpdate(sqlu);
break;
}
default:
{
System.out.println("Bye");
break; }

}
}
connection.close();

}
catch (Exception e) {
System.out.println("Error : "+e);
}
}
}

Selamat belajar, semoga bermanfaat dan memperoleh hasil yang sesuai dengan harapan.
Nilai yang anda peroleh adalah hasil kerja keras anda sendiri.

Kelebihan dan kekurangan Java

Versi Awal

Versi awal Java ditahun 1996 sudah merupakan versi release sehingga dinamakan Java Versi 1.0. Java versi ini menyertakan banyak paket standar awal yang terus dikembangkan pada versi selanjutnya:

* java.lang: Peruntukan kelas elemen-elemen dasar.

* java.io: Peruntukan kelas input dan output, termasuk penggunaan berkas.

* java.util: Peruntukan kelas pelengkap seperti kelas struktur data dan kelas kelas penanggalan.

* java.net: Peruntukan kelas TCP/IP, yang memungkinkan berkomunikasi dengan komputer lain menggunakan jaringan TCP/IP.

* java.awt: Kelas dasar untuk aplikasi antarmuka dengan pengguna (GUI)

* java.applet: Kelas dasar aplikasi antar muka untuk diterapkan pada penjelajah web.



Kelebihan

* Multiplatform. Kelebihan utama dari Java ialah dapat dijalankan di beberapa platform / sistem operasi komputer, sesuai dengan prinsip tulis sekali, jalankan di mana saja. Dengan kelebihan ini pemrogram cukup menulis sebuah program Java dan dikompilasi (diubah, dari bahasa yang dimengerti manusia menjadi bahasa mesin / bytecode) sekali lalu hasilnya dapat dijalankan di atas beberapa platform tanpa perubahan. Kelebihan ini memungkinkan sebuah program berbasis java dikerjakan diatas operating system Linux tetapi dijalankan dengan baik di atas Microsoft Windows. Platform yang didukung sampai saat ini adalah Microsoft Windows, Linux, Mac OS dan Sun Solaris. Penyebanya adalah setiap sistem operasi menggunakan programnya sendiri-sendiri (yang dapat diunduh dari situs Java) untuk meninterpretasikan bytecode tersebut.

* OOP (Object Oriented Programming - Pemrogram Berorientasi Objek) yang artinya semua aspek yang terdapat di Java adalah Objek. Java merupakan salah satu bahasa pemrograman berbasis oebjek secara murni. Semua tipe data diturunkan dari kelas dasar yang disebut Object. Hal ini sangat memudahkan pemrogram untuk mendesain, membuat, mengembangkan dan mengalokasi kesalahan sebuah program dengan basis Java secara cepat, tepat, mudah dan terorganisir. Kelebihan ini menjadikan Java sebagai salah satu bahasa pemograman termudah, bahkan untuk fungsi fungsi yang advance seperti komunikasi antara komputer sekalipun.

* Perpustakaan Kelas Yang Lengkap, Java terkenal dengan kelengkapan library/perpustakaan (kumpulan program program yang disertakan dalam pemrograman java) yang sangat memudahkan dalam penggunaan oleh para pemrogram untuk membangun aplikasinya. Kelengkapan perpustakaan ini ditambah dengan keberadaan komunitas Java yang besar yang terus menerus membuat perpustakaan-perpustakaan baru untuk melingkupi seluruh kebutuhan pembangunan aplikasi.

* Bergaya C++, memiliki sintaks seperti bahasa pemrograman [C++] sehingga menarik banyak pemrogram C++ untuk pindah ke Java. Saat ini pengguna Java sangat banyak, sebagian besar adalah pemrogram C++ yang pindah ke Java. Universitas-universitas di Amerika juga mulai berpindah dengan mengajarkan Java kepada murid-murid yang baru karena lebih mudah dipahami oleh murid dan dapat berguna juga bagi mereka yang bukan mengambil jurusan komputer.

* Pengumpulan sampah otomatis, memiliki fasilitas pengaturan penggunaan memori sehingga para pemrogram tidak perlu melakukan pengaturan memori secara langsung (seperti halnya dalam bahasa C++ yang dipakai secara luas).

Kekurangan

* Tulis sekali, perbaiki di mana saja - Masih ada beberapa hal yang tidak kompatibel antara platform satu dengan platform lain. Untuk J2SE, misalnya SWT-AWT bridge yang sampai sekarang tidak berfungsi pada Mac OS X.

* Mudah didekompilasi. Dekompilasi adalah proses membalikkan dari kode jadi menjadi kode sumber. Ini dimungkinkan karena koe jadi Java merupakan bytecode yang menyimpan banyak atribut bahasa tingkat tinggi, seperti nama-nama kelas, metode, dan tipe data. Hal yang sama juga terjadi pada Microsoft .NET Platform. Dengan demikian, algoritma yang digunakan program akan lebih sulit disembunyikan dan mudah dibajak/direverse-engineer.

* Penggunaan memori yang banyak. Penggunaan memori untuk program berbasis Java jauh lebih besar daripada bahasa tingkat tinggi generasi sebelumnya seperti C/C++ dan Pascal (lebih spesifik lagi, Delphi dan Object Pascal). Biasanya ini bukan merupakan masalah bagi pihak yang menggunakan teknologi terbaru (karena trend memori terpasang makin murah), tetapi menjadi masalah bagi mereka yang masih harus berkutat dengan mesin komputer berumur lebih dari 4 tahun.

Apa itu java

Apakah Java ?

Java adalah sebuah bahasa pemrograman dan juga sebuah platform. Sebagai sebuah bahasa pemrograman tingkat tinggi, Java adalah sebuah bahasa berorientasi objek (object oriented programming). Jika anda pernah memprogram dengan bahasa pemrograman OOP , seperti C++ atau Smalltalk , mungkin anda ingat betapa menyenangkannya memprogram dengan konteks objek. Anda merancang beberapa objek satu demi satu dengan mendefinisikan berbagai property yang dimiliki object tersebut dan pekerjaan (task) yang dapat ditangani oleh objek tersebut. Kemudian anda merangkai semua objek tersebut dengan mendefinisikan relasi antar objek tersebut seperti halnya membangun sebuah mobil dari komponen-komponennya. Belakangan ini , mungkin anda akrab dengan slogan "reusable of code". "Reuse of code" ini bukanlah cut & paste ( tapi harus diakui cut & paste memang sangat menyenangkan ). Yang dimaskud dengan "reuse of code" ini adalah suatu keadaan dimana para programmer untuk membangun sebuah objek dengan mengextend objek-objek yang telah ada secara mudah. Secara mudah disini adalah , programmer itu mungkin tidak perlu tahu dengan kode-kode dari objek yang ingin ia extend , yang ia butuhkan hanyalah pengetahuan mengenai property dari objek itu dan hal-hal yang dapat dilakukan oleh objek itu.

[minta tolong diisi ilustrasi yang aneh]

Kemudahan itu dapat diwujudkan dengan inheritance dan encapsulation (yang penjelasannya di luar jangkauan tulisan ini).

Selain itu Java, sebagai bahasa pemrograman, akan mempermudah tugas kita dalam merancang sebuah program yang mendukung multithreading. Ada banyak kasus dimana kita benar-benar membutuhkan multithreading atau dimana multithreading dapat membuat pemecahan masalah menjadi lebih efisien.
Sebagai contoh sederhana adalah dalam aplikasi mail client yang anda pakai. Saat anda mendowload mail dari server, anda mungkin tidak ingin menunggu sampai semua mail berhasil didownload, baru anda dapat membacanya. Beberapa mail client memungkinkan anda untuk membaca-baca dan membrowsing mail-mail yang sudah berhasil didownload. Dan pada saat yang bersamaan , program itu tetap mendownload mail-mail yang tersisa di server. Bahkan pada saat yang itu juga anda dapat melihat animasi bumi berotasi di pojok layar anda. Semua itu, mendownload mail – membrowsing mail – dan animasi, adalah proses-proses kelas ringan (ligthweight process) dalam aplikasi mail client itu. Proses-proses itu dikenal dengan istilah thread. Ide multithreading adalah membagi-bagi waktu pemrosesan CPU dan menjadwalkannya bagi masing-masing thread itu. Jika system operasinya dapat memanfaatkan multi-processor, maka thread-thread akan didistribusikan kepada semua prosesor, dan semua proses itu akan berjalan paralel.

Satu lagi yang ditawarkan oleh Java, dan tampaknya sampai saat ini baru Java yang memiliki ini, adalah sifat portabilitas dan independensi terhadap arsitektur dari program-program yang ditulis
dengan 100% Java. Yang dimaksud dengan portabilitas dan independensi terhadap arsitektur adalah : sebuah program yang dibuat dengan Java akan dapat dijalankan pada semua mesin / komputer yang mempunyai Java Virtual Machine.

Kita mengenal 2 jenis bahasa pemrograman , interpreted dan compiled. Contoh bahasa interpreted adalah bahasa-bahasa script seperti Perl, dan JavaScript. Sedangkan contoh bahasa compiled adalah C, Pascal, C++, dll.

Pada bahasa interpreted ada sebuah interpreter yang bertindak untuk menerjemahkan baris-baris kode dari suatu program ke dalam bentuk kode-kode yang dapat dimengerti oleh komputer dimana program itu dijalankan. Proses menerjemahkan itu berlangsung pada saat program itu dijalankan. Hal yang perlu dicatat dari bahasa interpreted adalah, proses menerjemahkan itu berlangsung setiap kali program tersebut dijalankan.

Sedangkan pada bahasa compiled, kode-kode program kita terlebih dahulu diubah ke dalam bentuk kode-kode biner oleh sebuah compiler. Untuk selanjutnya, komputer dapat membaca langsung dari kode-kode biner tersebut. Berbeda dari bahasa interpreted, proses kompilasi ini hanya perlu dilakukan sekali saja. Seperti telah dibahas di atas, compiler mengubah baris-baris kode yang kita ketik ke dalam bentuk biner. Yang menjadi permasalahan adalah, sistem kode biner untuk masing-masing platform secara umum tidaklah sama. Sistem kode biner pada Macintosh tidak sama dengan sistem kode biner pada IBM Compatible PC (dengan MS.Windows-nya). Hal inilah yang membatasi portabilitas dari sebuah program yang dibuat dari bahasa-bahasa compiled seperti C, dan Pascal. Jadi bila kita hendak membuat program yang dapat berjalan di banyak platform, sebutlah PC-Windows—Macintosh—Sun Solaris—dll, kita harus melakukan kompilasi untuk masing-masing platform itu. Kalau kita ingin menawarkan aplikasi kita ke seluruh dunia, kita akan menemui kesulitan mengetahui platform apa saja yang ada di seluruh dunia. Contoh : kita ingin menawarkan aplikasi yang bisa dilihat/dijalankan lewat web, yang berarti ada kemungkinan besar aplikasi kita itu akan dijalankan oleh sembarang orang di seluruh dunia yang menggunakan platform yang berbeda-beda. Kita tidak mungkin mengetahui secara persis semua platform itu dan kita juga tidak ingin dipusingkan dengan itu.
Bagaimanapun keunggulan bahasa compiled adalah , bahasa compiled menawarkan kecepatan eksekusi yang jauh lebih tinggi dibandingkan dengan bahasa interpreted (sehubungan dengan kode-kode biner itu).

Java adalah bahasa compiled dan interpreted. Setelah kita selesai menulis kode dengan bahsa Java, kita lakukan proses kompilasi. Keluaran dari proses kompilasi itu adalah, sebuah Java Binary Code. Anda dapat memikirkan Java Binary Code sebagai ekuivalen dari kode biner yang kita bicarakan diatas. Sistem operasi / komputer / mesin itu sendiri tidak dapat mengerti Java Binary Code. Maka diperlukan sebuah Java Interpreter yang akan menerjemahkan Java Binary Code itu ke dalam bentuk kode biner yang dapat dimengerti oleh operasi / komputer / mesin yang bersangkutan. Interpreter itu dikenal dengan sebutan Java Virtual Machine.



Implementasi dari Java Virtual Machine bisa berupa perangkat lunak (software) atau perangkat keras (hardware).

Contoh paling luas dari perangkat lunak yang mengimplementasikan Java Virtual Machine adalah Web Browser. Kita sebagai pemrogram bertanggung jawab sampai tahap kompilasi. Proses selanjutnya menjadi tanggung jawab Java Virtual Machine. Sebagai contoh, jika kita menulis aplikasi yang bisa dijalankan melalui web (dikenal dengan sebutan applet), yang kita berikan ke web browser adalah Java Binary Code hasil keluaran proses kompilasi yang kita lakukan sebelumnya. Sepanjang web browser itu mengimplementasikan Java Virtual Machine, ia akan dapat memahami Java Binary Code itu.

Implementasi dari Java Virtual Machine dalam bentuk perangkat keras juga tidak sedikit. Semenjak beberapa bulan yang lalu, sudah beredar mikrochip yang mendukung Java / mengerti Java Binary Code. Salah satu merk dari mikrochip itu adalah picoJava™ produksi sun microsystem. Beberapa produsen komputer telah menyertakan picoJava™ itu ke dalam komputer buatan mereka. Sebagai JVM elektronis, picoJava™ itu dapat melakukan proses interpretasi dengan kecepatan yang lebih baik dari JVM perangkat lunak. Beberapa Network Computer ( dengan konsep thin client-nya ), telah menggunakan picoJava™. Penggunaan chip-chip ini tidak terbatas pada komputer saja. Chip-chip ini akan dipasangkan pada perangkat-perangkat elektronis lainnya, seperti telepon, televisi, mobil, oven mikrowave, bahkan smartcard. Beberapa produk masa depan itu telah beredar saat ini, perusahaan Schlumberger telah menggunakan teknologi Java dalam produk-produk smartcard mereka. Perusahaan Hitachi juga telah menggunakan Java dalam beberapa produk televisi mereka.


Aspek yang juga cukup penting dari Java adalah sifat tersebar (distributed). Sifat ini sangat mendukung pengembangan sistem aplikasi yang tidak dibatasi oleh sebuah komputer saja. Dengan kata lain, mendukung pembuatan sistem aplikasi jaringan / tersebar dengan relatif mudah. Perangkat pemrograman Java standar (Java core API) telah menyediakan pustaka-pustaka yang memadai untuk komunikasi data dalam jaringan komputer. Pustaka networkingnya mencakup TCP socket, UDP socket, URL, dan IP Address.

Perkembangan Java tidak bisa lepas dari peranan beberapa vendor web browser seperti Netscape Corporation. Netscape Corp. telah mengimplementasikan Java Virtual Machine pada browser Netscape™ 3.0 mereka. Pada saat itu, Netscape Corp. menguasai pasaran browser di seluruh dunia, dan Netscape™ berjalan di beberapa sistem operasi terkenal , salah satunya adalah Microsoft Windows™ yang merajai pasaran sistem operasi di dunia. Hal itu memungkinkan applet-applet yang memperkaya fungsionalitas webpage yang ditulis dengan Java dapat dijalankan oleh jutaan orang di seluruh dunia. Karena Java berhasil dengan cepat memperoleh reputasi, maka hampir semua vendor sistem operasi dan browser berlomba-lomba untuk membuat Java Virtual Machine bagi sistem operasi / browser mereka. Yang pada gilirannya , semakin mempercepat perkembangan Java dan memperluas jangkauan Java sebagai bahasa pemrograman.

Rabu, 18 Maret 2009

Sejarah perkembangan Java



Java adalah bahasa pemrograman yang dapat dijalankan di berbagai komputer termasuk telepon genggam. Dikembangkan oleh Sun Microsystem dan diterbitkan tahun 1995. Bahasa pemrogramanJava pertama lahir dari The Green Project, yang berjalan selama 18 bulan, dari awal tahun 1991 hingga musim panas 1992. Proyek tersebut belum menggunakan versi yang dinamakan Oak. Proyek ini dimotori oleh Patrick Naughton, Mike Sheridan,James Gosling dan Bill Joy, beserta sembilan pemrogram lainnya dari Sun Microsystem. Salah satu hasil proyek ini adalah maskot Duke yang dibuat oleh Joe Palrang.
Pertemuan proyek berlangsung di sebuah gedung perkantoran Sand Hill Road di Menlo Park. Sekitar musim panas 1992 proyek ini ditutup dengan menghasilkan sebuah program Java Oak pertama, yang ditujukan sebagai pengendali sebuah peralatan dengan teknologi layar sentuh (touch screen), seperti pada PDA sekarang ini. Teknologi baru ini dinamai “*7″ (Star Seven).
Setelah era Star Seven selesai, sebuah anak perusahaan TV kabel tertarik ditambah beberapa orang dari proyek The Green Project. Mereka memusatkan kegiatannya pada sebuah ruangan kantor di 100 Hamilton Avenue, Palo Alto.
Perusahaan baru ini bertambah maju: jumlah karyawan meningkat dalam waktu singkat dari 13 menjadi 70 orang. Pada rentang waktu ini juga ditetapkan pemakaian Internet sebagai medium yang menjembatani kerja dan ide di antara mereka. Pada awal tahun 1990-an, Internet masih merupakan rintisan, yang dipakai hanya di kalangan akademisi dan militer.
Mereka menjadikan perambah (browser) Mosaic sebagai landasan awal untuk membuat perambah Java pertama yang dinamai Web Runner, terinsipirasi dari film 1980-an, Blade Runner. Pada perkembangan rilis pertama, Web Runner berganti nama menjadi Hot Java.
Pada sekitar bulan Maret 1995, untuk pertama kali kode sumber Java versi 1.0a2 dibuka. Kesuksesan mereka diikuti dengan untuk pemberitaan pertama kali pada surat kabar San Jose Mercury News pada tanggal 23 Mei 1995.
Sayang terjadi perpecahan di antara mereka suatu hari pada pukul 04.00 di sebuah ruangan hotel Sheraton Palace. Tiga dari pimpinan utama proyek, Eric Schmidt dan George Paolini dari Sun Microsystems bersama Marc Andreessen, membentuk Netscape.
Nama Oak, diambil dari pohon oak yang tumbuh di depan jendela ruangan kerja “bapak java”, James Gosling. Nama Oak ini tidak dipakai untuk versi release Java karena sebuah perangkat lunak sudah terdaftar dengan merek dagang tersebut, sehingga diambil nama penggantinya menjadi “Java”. Nama ini diambil dari kopi murni yang digiling langsung dari biji (kopi tubruk) kesukaan Gosling.
Versi Awal
Versi awal Java ditahun 1996 sudah merupakan versi release sehingga dinamakan Java Versi 1.0. Java versi ini menyertakan banyak paket standar awal yang terus dikembangkan pada versi selanjutnya:
java.lang
: Peruntukan kelas elemen-elemen dasar.
java.io
: Peruntukan kelas input dan output, termasuk penggunaan berkas.
java.util
: Peruntukan kelas pelengkap seperti kelas struktur data dan kelas kelas penanggalan.
java.net
: Peruntukan kelas TCP/IP, yang memungkinkan berkomunikasi dengan komputer lain menggunakan jaringan TCP/IP.
java.awt
: Kelas dasar untuk aplikasi antarmuka dengan pengguna (GUI)
java.applet
: Kelas dasar aplikasi antar muka untuk diterapkan pada penjelajah web.
Kelebihan
Multiplatform. Kelebihan utama dari Java ialah dapat dijalankan di beberapa platform / sistem operasi komputer, sesuai dengan prinsip tulis sekali, jalankan di mana saja. Dengan kelebihan ini pemrogram cukup menulis sebuah program Java dan dikompilasi (diubah, dari bahasa yang dimengerti manusia menjadi bahasa mesin / bytecode) sekali lalu hasilnya dapat dijalankan di atas beberapa platform tanpa perubahan. Kelebihan ini memungkinkan sebuah program berbasis java dikerjakan diatas operating system Linux tetapi dijalankan dengan baik di atas Microsoft Windows. Platform yang didukung sampai saat ini adalah Microsoft Windows, Linux, Mac OS dan Sun Solaris. Penyebanya adalah setiap sistem operasi menggunakan programnya sendiri-sendiri (yang dapat diunduh dari situs Java) untuk meninterpretasikan bytecode tersebut.
OOP (Object Oriented Programming - Pemrogram Berorientasi Objek) yang artinya semua aspek yang terdapat di Java adalah Objek. Java merupakan salah satu bahasa pemrograman berbasis oebjek secara murni. Semua tipe data diturunkan dari kelas dasar yang disebut Object. Hal ini sangat memudahkan pemrogram untuk mendesain, membuat, mengembangkan dan mengalokasi kesalahan sebuah program dengan basis Java secara cepat, tepat, mudah dan terorganisir. Kelebihan ini menjadikan Java sebagai salah satu bahasa pemograman termudah, bahkan untuk fungsi fungsi yang advance seperti komunikasi antara komputer sekalipun.
Perpustakaan Kelas Yang Lengkap, Java terkenal dengan kelengkapan library/Perpustakaan (kumpulan program program yang disertakan dalam pemrograman java) yang sangat memudahkan dalam penggunaan oleh para pemrogram untuk membangun aplikasinya. Kelengkapan perpustakaan ini ditambah dengan keberadaan komunitas Java yang besar yang terus menerus membuat perpustakaan-perpustakaan baru untuk melingkupi seluruh kebutuhan pembangunan aplikasi.
Bergaya C++, memiliki sintaks seperti bahasa pemrograman [C++] sehingga menarik banyak pemrogram C++ untuk pindah ke Java. Saat ini pengguna Java sangat banyak, sebagian besar adalah pemrogram C++ yang pindah ke Java. Universitas-universitas di Amerika juga mulai berpindah dengan mengajarkan Java kepada murid-murid yang baru karena lebih mudah dipahami oleh murid dan dapat berguna juga bagi mereka yang bukan mengambil jurusan komputer.
Pengumpulan sampah otomatis, memiliki fasilitas pengaturan penggunaan memori sehingga para pemrogram tidak perlu melakukan pengaturan memori secara langsung (seperti halnya dalam bahasa C++ yang dipakai secara luas).
Kekurangan
Tulis sekali, perbaiki di mana saja - Masih ada beberapa hal yang tidak kompatibel antara platform satu dengan platform lain. UntukJ2SE, misalnya SWT-AWT bridge yang sampai sekarang tidak berfungsi pada MAc OS X.
Mudah didekompilasi. Dekompilasi adalah proses membalikkan dari kode jadi menjadi kode sumber. Ini dimungkinkan karena koe jadi Java merupakan bytecode yang menyimpan banyak atribut bahasa tingkat tinggi, seperti nama-nama kelas, metode, dan tipe data. Hal yang sama juga terjadi pada Microsoft.NET Platform. Dengan demikian, algoritma yang digunakan program akan lebih sulit disembunyikan dan mudah dibajak/direverse-engineer.
Penggunaan memori yang banyak. Penggunaan memori untuk program berbasis Java jauh lebih besar daripada bahasa tingkat tinggi generasi sebelumnya seperti C/C++ dan Pascal(lebih spesifik lagi, Delphi dan Objectc Pascal). Biasanya ini bukan merupakan masalah bagi pihak yang menggunakan teknologi terbaru (karena trend memori terpasang makin murah), tetapi menjadi masalah bagi mereka yang masih harus berkutat dengan mesin komputer berumur lebih dari 4 tahun.