Senin, 12 Desember 2011

Toolbox, API, dan Paket (Subrutin Java)


Dengan semakin mudah digunakannya komputer, akan semakin sulit dan kompleks tugas yang harus dilakukan oleh programmer. Kita dengan mudah menulis program berbasis konsol dengan menggunakan beberapa subrutin untuk menampilkan pesan dan mengambil input dari user. GUI (graphical user interface = antarmuka pengguna berbasis grafik), seperti jendela, tombol, scroll bar, menu, kotak input teks, dan lain-lain mungkin lebih menarik bagi user. Akan tetapi programmer harus berhadapan dengan kemungkinan yang sangat amat banyak, dan lebih banyak subrutin yang harus dibuat untuk bisa mengontrol setiap komponen GUI.
Seseorang yang ingin membuat program untuk Windows misalnya, harus menggunakan Toolbox Windows, yaitu koleksi dari ribuan subrutin, misalnya untuk membuka dan menutup jendela, untuk menggambar dan menulis teks, menambah tombol dan menerima respon dari user. Selain GUI ada juga subrutin yang berurusan dengan membuka, membaca, dan menulis file, berkomunikasi dengan network, dan lain-lain. Intinya di dalam toolbox terdapat segala sesuatu yang menurut kita standar. Apple dan Linux memiliki toolbox sendiri yang berbeda dengan yang disediakan oleh Windows.
Setiap proyek pembuatan program akan terdiri dari inovasi (sesuatu yang sangat baru) dan menggunakan kembali sesuatu yang sudah pernah dibuat sebelumnya. Seorang programmer diberi peralatan untuk berhasil dalam proyeknya tersebut, yang paling dasar adalah apa yang diberikan oleh bahasa pemrograman itu sendiri, misalnya variabel, perulangan, dan lain-lain. Di atasnya, programmer bisa menambahkan toolbox yang berisi subrutin yang sudah ditulis untuk melakukan tugas tertentu. Alat ini, jika didesain dengan sangat baik, bisa dijadikan kotak hitam yang sesungguhnya, yaitu kotak hitam yang kita betul-betul tidak perlu tahu bagaimana dia bekerja.
Bagian yang inovatif adalah bagaimana merangkai alat tadi menjadi sesuatu yang berguna untuk suatu proyek atau suatu masalah yang ingin dipecahkan (pengolah kata, browser, game, dll). Ini disebut pemrograman aplikasi.
Toolbox suatu software adalah juga kotak hitam. Ia memiliki antar muka dengan programmernya. Antar muka ini berisi spesifikasi tentang rutin-rutin apa saja yang ada di sana, apa parameter yang dibutuhkan, dan tugas apa yang mereka lakukan. Informasi ini disebut API (Applications Programming Interface = Antarmuka Pemrograman untuk Aplikasi). Windows API adalah spesifikasi semua subrutin yang tersedia dalam toolbox Apple.
Perusahaan yang membuat hardware, misalnya sound card atau blue tooth mungkin juga akan membuat API untuk perangkat tersebut yang berisi subrutin yang diperlukan programmer untuk bisa menggunakan perangkat itu. Peneliti yang membuat program untuk menyelesaikan suatu perhitungan matematis kompleks -- misalnya persamaan diferensial -- juga akan membuat API sehingga orang lain bisa menggunakan subrutinnya tanpa harus mengerti dengan detail bagaimana perhitungan itu dilakukan.
Bahasa pemrograman Java juga didukung oleh API yang cukup besar dan standar. Contoh API yang pernah kita lihat misalnya Math.random(), tipe data String, dan subrutin yang terkait. Java API standar terdiri dari subrutin untuk membuat dan mengendalikan GUI, untuk komunikasi network, baca tulis file, dan lain-lain. Mungkin lebih mudah jika API ini dianggap sebagai bagian dari bahasa Java, akan tetapi sebetulnya API terdiri dari subrutin yang bisa digunakan dalam program Java.
Java merupakan bahasa yang tidak tergantung pada mesin atau sistem operasi di mana ia dijalankan. Java API yang sama harus bisa bekerja dengan semua sistem. Akan tetapi ingat bahwa yang sama adalah antar mukanya. Implementasinya bisa sangat berbeda antara satu sistem operasi dengan lainnya.
Sistem Java pada suatu komputer terdiri dari implementasi pada komputer tersebut. Program Java yang kita buat memanggil subrutin pada komputer tersebut. Ketika komputer menjalankan program dan sampai pada perintah untuk memanggil subrutin pada API, komputer akan menjalankan implementasi subrutin yang sesuai dengan sistem komputer di mana program tersebut dijalankan. Artinya, kita hanya perlu belajar satu API saja untuk melakukan pemrograman pada berbagai macam komputer dan sistem operasi.
Seperti subrutin pada Java, subrutin pada API standar dikelompokkan ke dalam kelas. Untuk membuat organisasi lebih baik, kelas Java dapat digabungkan menjadi paket. Kita juga bisa membuat hirarki paket yang lebih tinggi, karena paket juga bisa berisi paket lain. Kenyataannya seluruh API standar Java diimplementasikan dalam beberapa paket. Salah satu paketnya bernama "java", yang berisi paket-paket non-GUI dan juga GUI berbasis AWT. Paket lain, yaitu "javax", yang ditambahkan pada versi 1.2, berisi kelas yang digunakan untuk GUI Swing.
Suatu paket dapat terdiri dari kelas ataupun pake lain. Paket yang terdapat di dalam paket lain disebut "sub paket". Paket javadan javax juga memiliki beberapa sub paket. Salah satu sub paket java, misalnya disebut awt. Karena awt berada di dalam paket java, nama lengkapnya adalah java.awt. Paket inilah yang sebenarnya memiliki kelas-kelas GUI AWT, seperti kelasButton yang melambangkan tombol, atau Graphics yang merupakan kumpulan rutin untuk menggambar di monitor. Karena kelas ini tergabung dalam paket java.awt, maka nama lengkapnya adalah java.awt.Button dan java.awt.Graphics. Demikian juga dengan javax yang memiliki sub paket yang bernama javax.swing, yang terdiri dari kelas yang bernamajavax.swing.JButton dan javax.swing.JApplet.
Paket java sendiri terdiri dari beberapa sub paket lain, seperti java.io yang sudah kita pakai dalam bab-bab sebelumnya, berguna untuk memberikan fasilitas input/output, java.net untuk mengendalikan komunikasi jaringan, dan java.appletmengimplementasikan fungsi dasar untuk applet. Paket yang paling dasar disebut java.lang. Di dalam paket ini terdapat kelas-kelas fundamental misalnya String dan Math.
Mungkin akan lebih jelas jika kita lihat ilustrasi berikut tentang tingkatan paket java, sub paket, kelas di dalam sub paket, dan subrutin di dalam kelas.
Misalkan kita akan menggunakan kelas java.awt.Color dalam program. Salah satu caranya adalah dengan menggunakan nama lengkap dari kelas tersebut, misalnya
java.awt.Color warnaKotak;
untuk mendekalarasi variabel bernama warnaKotak yang tipenya adalah java.awt.Color. Tentu saja akan terlalu cape jika kita harus menulis nama kelas dengan lengkap setiap kali akan digunakan. Java mengijinkan kita untuk menggunakan langsung nama kelasnya jika kita berikan perintah import, seperti
import java.awt.Color;
di awal program, dan kemudian di bagian lain, kita bisa menyingkat java.awt.Color hanya dengan nama kelasnya saja, sehingga menjadi
Color warnaKotak;
(Satu-satunya keuntungan yang diberikan perintah import adalah untuk menyingkat penulisan nama kelas, bukan untuk mengimport keseluruhan kelas ke dalam program kita. Seandainya perintah import tidak kita berikan, dan kita panggil dengan nama lengkapnya, Java akan tetap bisa mengakses kelas tersebut.)
Ada lagi jalan pendek untuk mengimport seluruh kelas pada suatu paket. Kita bisa import seluruh kelas di dalam paket java.awtdengan
import java.awt.*;
Ingat pada kode kita sebelumnya yang berbentuk seperti ini?
import java.io.*;
Ketika program yang akan kita buat semakin besar, maka ada kemungkinan kita harus mengimport banyak paket. Satu hal penting yang perlu diingat adalah ada kemungkinan beberapa paket memiliki nama kelas yang sama. Misalnya java.awt danjava.util memiliki kelas yang bernama List. Jika kita import kedua kelas dengan perintah java.awt.* dan java.util.*, maka nama List menjadi rancu.
Jika kita mencoba membuat variabel dengan tipe data List, java akan menampilkan pesan kesalahan tentang adanya nama kelas yang membingungkan. Solusinya? Gunakan nama lengkap kelasnya, yaitu java.awt.List atau java.util.List.
Karena paket java.lang.* adalah paket yang sangat penting, setiap kelas dalam java.lang akan diimport otomatis ke dalam semua program. Seakan-akan semua program dimulai dengan perintah "import java.lang.*;". Artinya, kita bisa memanggil kelas seperti String saja, bukan java.lang.String, atau Math.sqrt() bukan java.lang.Math.sqrt().
Programmer juga bisa membuat paket baru. Misalnya kita akan membuat kelas yang akan diletakkan di paket yang bernama alatbantu. Maka pada awal program kita harus didefinisikan dengan perintah "package alatbantu;" Program lain yang menggunakan paket ini bisa menambah "import alatbantu.*;" untuk mengabmbil semua kelas dalam paket alatbantu.
Masalahnya hal ini agak sedikit lebih rumit. Ingat bahwa ketika suatu program menggunakan kelas, maka kelas tersebut harus "tersedia" ketika program tersebut dikompilasi dan ketika program terus dieksekusi. Tentunya lebih pas tergantung dari lingkungan Java yang kita lakukan. biasanya paket yang bernama alatbantu harus berada di dalam direktori alatbantu, dan direktori tersebut harus diletakkan pada direktori yang sama dengan program yang akan menggunakan kelas itu.
Pada program yang menggunakan banyak kelas, maka sangat masuk akal apabila kita membagi dan mengorganisir kelas tersebut dalam satu atau beberapa paket. Dan juga masuk akal untuk membuat paket baru sebagai toolbox atau dengan kata lain membuat API baru yang belum dikover oleh API Java. (Seringkali orang yang membuat API lebih disanjung akan kehebatannya dibandingkan dengan orang yang hanya menggunakan API).
Dalam program Eclipse kita, kita sudah menggunakan paket dari awal. Bab ini menjelaskan lebih detail tentang paket. Sebetulnya tidak ada salahnya kita mengorganisir setiap program yang kita buat sejak awal. Pada saat program kita besar, maka perubahan yang diperlukan untuk mengorganisir akan lebih signifikan.

Tidak ada komentar:

Posting Komentar