Geek Talk : Java Packages


Selama ini, di saat membuat program dengan Java, kita selalu menggunakan sebuah class dari sebuah package. Apa itu class? Apa itu packages? Well, inilah mereka :

Class adalah sebuah cetak biru/blueprint yang digunakan sebagai dasar untuk membuat object individual.
Java package adalah sebuah mekanisme untuk mengelompokkan Java classes ke dalam namespaces.

Setiap class di Java library adalah milik dari packages tertentu. Dan package tersebut mempunyai nama, misalnya javax.swing, sebuah package yang berisi classes dari Swing GUI. ArrayList ada di dalam package bernama java.util, yang berisi banyak jenis dari utility classes.

Illustration of Java IO Package Carried by Model Girl (Imported)

Cara menggunakan suatu class dari Java API ke dalam kode-mu sangatlah mudah. Kamu hanya perlu memperlakukan class itu seakan-akan kamu menulisnya sendiri, seolah-olah kamu yang meng-compile-nya sendiri. Hanya ada satu perbedaan, yaitu, di suatu tempat di dalam source code-mu, kamu harus menyatakan full name dari library yang ingin kamu gunakan, yang berarti kamu harus menulis package name + class name.

Kembali ke paragraf atas, sadar atau tidak sadar, kamu telah menggunakan sebuah class dari sebuah package. System (System.out.println), String, dan Math (Math.random()), adalah class yang masuk ke dalam package java.lang.

Cara Penggunaan

Ada dua pilihan untuk menggunakan sebuah class dari suatu package :

  1. IMPORT
    Tuliskan import statement di bagian paling atas dari source code-mu :

    import java.util.ArrayList;
    public class MyClass { //le statement }
  2. TULIS
    Tuliskan full name di dalam code-mu. Setiap kali kamu menggunakannya, dimanapun kamu menggunakannya.

      • Saat kamu men-declare atau meng-instantiate:
        java.util.ArrayList<anjing> list = new java.util.ArrayList<anjing>();
      • Saat kamu menggunakannya sebagai argument type :
        public void gonggong(java.util.ArrayList<anjing> list){ ... }
      • Saat kamu menggunakannya sebagai return type :
        public java.util.ArrayList<anjing> foo() { ... }

    .

Ada tiga alasan, kenapa kita harus menggunakan full name (nama package + nama class) saat kita ingin menggunakan class tertentu. Yang pertama, full name membantu pengorganisasian sebuah proyek atau library. Dibandingkan dengan mempunyai satu daftar class yang sangat banyak, akan lebih rapi jika classes tersebut dikelompokkan ke dalam packages berdasarkan kegunaan mereka, seperti GUI, struktur data, database, dsb.

Yang kedua, packages memberikan batasan ruang lingkup, untuk mencegah bentrokan yang terjadi apabila, misalnya kamu dan 12 orang programmers lainnya di perusahaanmu memutuskan untuk membuat class dengan nama yang sama.

Yang ketiga, packages menyediakan tingkat keamanan, karena kamu bisa membatasi source code yang kamu tulis menjadi hanya bisa diakses oleh class lain di dalam packages yang sama, dan sebagainya.

java VS javax

Kenapa ada packages yang dimulai dengan javax?

Di versi pertama dan kedua dari Java (1.02 dan 1.1), semua class yang masuk ke dalam standard library adalah classes yang ada di dalam packages yang dimulai dengan java. Contohnya ada java.lang, yang otomatis ada, sehingga kita tidak perlu mengimpornya lagi. Dan juga ada java.net, java.io, java.util, dan beberapa jenis lagi, termasuk java.awt sebuah package berisi classes yang berhubungan denga GUI.

Di luar semua itu, ada packages yang tidak masuk ke dalam standard library. Classes ini dikenal sebagai extensions, dan terdiri dari dua jenis: standard dan not standard. Standard extensions adalah ekstensi-ekstensi yang dianggap oleh Sun sebagai packages resmi(official). Kebalikannya, not standard extensions adalah ekstensi-ekstensi yang masih bersifat eksperimental, early access, atau beta packages.

Standard extensions, sesuai dengan kaidah Java, semuanya dimulai dengan huruf ‘x’ yang ditambahkan di starter java regular. Ibu dari semua standard extensions adalah Swing library. Di dalamnya ada beberapa packages, yang kesemuanya diawali dengan javax.swing.

Namun, standard extensions bisa dipromosikan menjadi first class library. Library standar yang langsung ada saat kita meng-install Java, atau istilah kerennya, ships-with-java. Dan itulah yang terjadi pada Swing yang mulai menjadi library standar sejak versi 1.2, atau Java 2.

Dengan itu, berarti semua yang meng-install Java akan secara otomatis mendapatkan Swing classes, dan kita tidak harus menambahkannya secara terpisah layaknya sebuah ekstensi.

Masalah mulai muncul ke permukaan, karena bagaimanapun di saat packages dipromosikan menjadi library standar, tentu saja mereka harus diawali dengan java, bukan javax. Semuanya terlanjur mengetahui bahwa packages pada standar library Java tidak memiliki “x”, dan bahwa hanya ekstensilah yang memiliki “x”. Jadi sesaat(benar-benar sesaat) sebelum versi 1.2 rilis final, Sun mengganti nama package Swing dan salah satu perubahan yang dilakukan adalah menghapus huruf “x”. Buku-buku yang dicetak dan dijual di toko semuanya menapilkan Swing code dengan nama yang baru. Kaidah penamaan Java bisa dipatuhi. Dan semuanya tampak baik-baik saja dengan Java world.

Kecuali sekitar 20.000 developer yang berteriak setelah menyadari bahwa dengan penggantian nama yang terlihat simpel, datanglah sebuah bencana! Semua Swing code yang telah mereka buat harus diganti. Bayangkan betapa banyaknya mport statement yang diawali dengan javax

Dan pada detik-detik terakhir, dengan putus asa, seperti harapan mereka yang semakin pupus, developer-developer berhasil meyakinkan Sun untuk “langgar kaidah penamaan, selamatkan kode kami”. Lahirlah sejarah baru. Jadi, jika kamu melihat package di dalam Java library yang dimulai dengan javax, ingatlah bahwa package tersebut memulai hidupnya sebagai ekstensi, dan kemudian mendapat promosi menjadi first-class library.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s