Home » » Anatomi Class Java | Belajar Pemrograman Java

Anatomi Class Java | Belajar Pemrograman Java



Anatomi Class Java

Bab ini akan menjelaskan tentang anatomi class java. Pertama kita akan belajar tentang bagaimana mendeklarasikan class dan interface, kemidian kita akan belajar tentang class member, Method, constructor dan variabel adalah tiga buah class member dan ketiganya juga akan kita bahas dalam bagian terpisah. Memahami bagaimana mendeklarasikan class dan class membernya adalah pengetahuan paling dasar dalam membuat aplikasi java.

Perhatikan baik-baik aturan apa saja yang di perbolehkan dan dilarang dalam membuat class java. Aturan ini cukup dan mengikat, awalnya akan sedikit terasa merepotkan dan membutuhkan waktu untuk menghafal aturan-aturan tersebut. Setelah bebrapa lama, aturan itu menjadi mudah dipahami dan dihafal. Tidak ada yang lebih baik dibanding belajar dari praktek, oleh karena itu kita akan paktek menulis kode. jangan lewatkan sesi menulis kode, usahakan tulis semua kode yang ada di bab ini, compile dan jalankan kodenya. Dengan begitu anda akan lebih cepat mengahafal aturan dalam bahasa java. Tanpa latihan berulang-ulang maka akan membutuhkan waktu lebih lama lagi menguasai bahasa java.

Deklarasi Class

Class di dalam java dideklarasikan menggunakan keyword class diikuti dengan nama class. Setelah nama class ada kurung kurawal buka ( { ) menandai awal dari class dan kurung kurawal tutup ( } ) yan menandai akhir dari class.

Object adalah instansiasi dari class. Kita bisa membayangkan bahwa class adalah sebuah cetakan dan object adalah materi hasil dari cetakan dari class. Setiap object akan mempunyai state (instance variabel/properties) yang membedakan satu object dengan object yang lain, kemudian object juga mempunyai behavior (method) dimana logic dari class disimpan.

Class adalah jantungnya Java, class adalah bagian terkecil dari kode di java yang bisa berdiri sendiri. Setiap kali kita akan membuat sebuah kode java, yang pertama harus dideklarasikan adalah class. Java mengijinkan class didefinisikan dalam beberapa cara berbeda. Cara pertama adalah mendefinisikan sebuah public class di dalam file java. contohnya bisa kita lihat di bawah ini :

public class person {}


simpan di dalam file Person.java, kemudian compile file java di atas menggunakan java compiler (javac).

$ javac Person.java


Setelah proses kompilasi, lihat isi folder dengan menggunakan perintah dir (windows) atau ls (*nix). Terlihat bahwa class Person dibuatkan satu buah file .class, dan nama dari file .class-nya sama perssis dengan nama class-nya.

Kode diatas adalah deklarasi minimal dari sebuah class .java, ada keyword class diikuti oleh nama class-nya kemudian diikuti oleh kurung kurawal buka dan tutup.

Cara kedua adalah beberapa class dideklarasikan satu buah public class yang namanya sama dengan nama file .java. Contohnya sebagai berikut :

public class Person{}
class Person2{}
class Person3{}
class Person4{}


Simpan di dalam file Person.java kemudian kompile file .java diatas menggunakan java compiler (javac).

$ javac Person.java


Setelah proses kompilasi berhasil, lihat isi folder dengan menggunakan perintah dir (windows) atau ls (*nix). Terlihat bahwa setiap class dibuatkan satu buah file .class, dan nama dari file .class-nya sama persis dengan nama class-nya.

Person.class
Person2.class
Person3.class
Person4.class


Cara ketiga adalah mendeklarasikan class sebagai inner class. Bisa kita lihat bahwa cara kedua diatas, dideklarasi class kedua dan seterusnya berada diluar dari class pertama, kemudian file .class yang dihasilkan berbeda-beda, dan penamaan classnya tidak menyertakan nama class public-nya, semuanya adalah class berbeda tetapi diletakkan dalam file yang sama.

Konsep inner class berbeda, karena sekarang class yang dideklarasikan di dalam class lain (inner class). Inner class sangat terikat dengan class dimana inner class itu berbeda. Misalnya dari sisi penamaan, nama inner class harus diawali dengan nama class dimana inner class berada kemudian diikuti dengan nama inner class itu sendiri. Misalnya contoh di bawah ini :

public class Person{
  private class Person2{}
  private static class erson3{}
  class Person4{}
}


Compile file .java di atas menggunakan java compler (javac).

$ javac Person.java


Setelah proses kompilasi berhasil, lihat isi folder dengan menggunakan perintah dir (windows) atau ls (*nix). Terlihat bahwa setiap class dibuatkan satu buah file .class, nama file .class untuk inner class diawali dengan nama class dimana inner class berada kemudian ada tanda $ dan di akhiri dengan nama inner class-nya.

Person.class
Person$Person2.class
Person$Person3.class
Person$Person4.class


Cara deklarasi terakhir adalah anonymous inner class, yaitu inner class yang tidak mempunyai nama, loh kok bisa..? feature ini sering digunakan kalau kita ingin mengimplementasikan interface di satu tempat dan implementasi itu tidak pernah digunakan di tempat lain. Contohnya sebagai berikut ini :

public class Person{
  private Runnable thread = new Runnable (){
     public void run(){
       System.out.println("HelloWorld from Thread");
    }
  };
}


Perhatikan kode diatas, ada sebuah variabel dengan nama thread, variabel tersebut adalah object dari class Runnable adalah intrface, Karena Runnable adalah interface, maka kita perlu membuat class yang implement interface, tetapi implementasinya tidak perlu membuat class baru dengan nama tertentu, cukup langsung new Runnable dan implementasikan method run langsung di situ.

Simpan ke file Person.java dan coba compile menggunakan javac, setelah kompilasi berhasil lihat isi dari direktori, akan ada dua buah file class yaitu Person.class dan Person$1.class, nah class yangbterakhir inilah anonymous inner class. kalau ada dua inner class atau lebih, penamaannya menjadi Person$2.class, Person$3.class dan seterusnya.

Setelah kita membahas cara deklarasi java, sekarang kita bahas aturan-aturan yang harus dipatuhi pada waktu pendeklarasian class di java. Aturan-aturan tersebut antara lain :
- Hanya boleh ada satu class public dalam satu file java, non public class boleh lebih dari satu di dalam satu file .java.
- Nama class public harus sama dengan nama file .java.
- Komentar bisa dletakkan dimana saja.
- Import berada antara deklarasi package dan deklarasi class.
- Deklarasi import dan package berlaku untuk semua class dalam file .java, tidak mungkin mendefinisikan dua buah class yang mempunyai package berbeda di dalam satu file .java.

Dalam aturan diatas, ada point yang menyebutkan tentang package. Package adalah featue yang sangat penting dalam java, pada dasarnya package adalah sebuah folder yang memisah-misahkan class. Class dengan fungsi yang mirip akan dikelompokkan dalam satu package yang sama, hal ini dimaksudkan untuk memudahkan pengelolaan class agar mudah dipahami.

Kita bisa meletakkan beberapa keyword pada waktu pendeklarasian class. Jenis keyword pertama yang bisa digunakan adalah acces modifier, keyword acces modifier terdiri dari empat level : public, default, protected dan private. Hanya tiga dari empat level tersebut yang benar-benar merupakan keyword, acces modifier default bukan merupakan keyword karena kalau tidak ada satupun dari ketiga acces modifier digunakan di dalam deklarasi class maka kita menyebutnya default. Kita akan bahas satu persatu efek dari penggunaan acces modifier pada deklarasi sebuah class.

Jika sebuah class dideklarasian sebagai public, maka semua class yang lain dapat melihat class tersebut. Melihat didsini dalam arti bisa mengimport, menginstansiasi, dan memanggil method yang ada dalam class. Jika sebuah class dideklarasikan sebagai default atau tidak ada acces modifier sama sekali, maka hanya class dari package yang sama atau class turunannya yang dapat melihat class tersebut. Class tidak bisa dideklarasikan sebagai protected. Private hanya bisa digunakan oleh inner class saja, sedangkan class lain tidak bisa ditandai sebagai private.

Selain acces modifier, class bisa dideklarasikan menggunakan keyword final. Jika class dideklarasikan dengan keyword finl maka class ini tidak bisa diextends oleh class lain, salah satu alasan kenapa class ditandai final agar tidak ada implementasi lain selain class ini. Semua class wrapper seperti String ditandai sebagai final agar tidak ada yang mengextends class String ini. Keyword abstract bisa digunakan untu mendeklarasikan class, hal ini akan menyebabkan abstract class tidak dapat diinstansiasikan atau di buat objectnya.

Deklarasi Interface

Interface pada dasarnya adalah sebuah class, hanya saja method-method di dalamnya hanya berupa deklarasi saja, tidak ada implementasi dari method-method tersebut. Secara teknis bisa dikatakan bahwa interface adalah class yang bersifat abstract, semua methodnya adalah public dan abstract, serta semua variabel yang ada dalam interface adalah static final atau biasa disebut dengan konstanta. Deklarasi interface menggunakan keyword interface bisa kita lihat dalam kode dibawah ini :

interface PersonDao{}


aturan penamaan interface sama dengan penamaan class, kemudian aturan pendeklarasian interface juga sama dengan pendeklarasian interface. Hanya saja tidak ada istilah inner interface layaknya inner class.

Sebagai contoh kita akan membuat class PersonDaoImpl yang mengimplementasikan interface PersonDao, di dalam interface PersonDao ada tiga buah method  : save, delete dan getById sehingga class PersonDaoImpl harus mengimplementasikan ketiga method ini.

public class Person{
  private Long id;
  private String nama;
  public String getNama(){
    return nama;
  }
  public void setNama(String nm){
    nama = nm;
  }
  public Long getId(){
    return id;
  }
  public void setId(Long i){
   id = i;
  }
}


Interface dideklarasikan dengan menggunakan keyword interface. Di dalamnya ada method-method yang dideklarasikan tetapi belum ada implementasinya, ditandain dengan adanya titik koma (;) setelah deklarasi method. Kalau method sudah diimplementasikan maka setelah deklarasi method harus ada pasangan kurung kurawal buka tutup ( {} ) yang menandai blok kode yang akan dieksekusi kalau method tersebut dipanggil.

public interface PersonDao{
  void save(Person p);
  void delete(Person p);
  Person getById(Long id);
}


Class mengimplementasikan interface dengan menggunakan keyword implements. Semua method dalam interface bersifat public sehingga walaupun dalam deklarasi interface tidak ada public tetapi di class yang mengimplementasikan interface harus meletakkan acces modifiers public pada deklarasi methodnya.

public class PersonDaoImpl implements PersonDao{
  public void save(Person p){
    System.out.println("menyimpan Person");
  }
  public void delete(Person p){
    System.out.println("Menghapus Person");
  }
  public Person getById(Long id){
    Person p = new Person();
    p.setId(id);
    p.setNama("abc");
    return p;
  }
}


Sebuah class bisa mengimplementasikan lebih dari satu interace, antar satu interface dengan interface yang lain dipisahkan dengan tanda koma, seperti contoh sederhana di bawah ini :

public interface PersonDaoImpl implements PersonDao, Serialiazable{}


Interface biasanya digunakan sebagai "kontrak" agar sebuah class yang mengimplementasikan interface mempunyai semua method yang ada dalam interface itu, tetapi kita tidak ingin mengekspose implementasinya. Salah satu contoh penggunaan interface adalah JDBC API. di dalam JDBC API terdapat banyak interface seperti Cnnection, ResultSet, Statetement, PreparedStatement dan seterusnya. Setiap database yang ingin bisa diakses dari java akan mengimplementasikan JDBC API ini dengan cara membuat class yang mengimplementasikan semua interface dalam JDBC API. Sehingga kalu kita ingin melakukan koneksi ke MySQL ataupun ke Pracle, interfacenya sama, yang berbeda hanya implementasinya saja. Implementasi dari JDBC API ini sering dikenal sebagai JDBC Driver. Mengenai JDBC akan kita bahas lebih lanjut di bagian akses data ke database, sekarang kita fokuskan ke interface.

Interface juga digunakan dalam best practice yang sering disebut dengan "code to interface", best practice ini menganjurkan developer untuk menggunakan interface antar layar dalam aplikasi. Misalnya contoh diatas kita membuat sebuah interface dengan nama PersonDao untuk melakukan operasi penyimpanan object person, dengan membuat interface seperti ini kita bisa mempunyai implementasi berbeda-beda untuk proses penyimpanan object person. Di contoh diatas implementasi PersonDao sangat sederhana hanya menulis string ke stdout, kita juga bisa membuat misalnya PersonDaojdbc untuk menyimpan object person ke database dengan menggunakan JDBC, atau bisa juga dibuat PersonDaoHibernate untuk menyimpan object person ke database menggunakan Hibernate.

Kalau anda masih sulit memahami dua paragraf terakhir tentang interface, tidak masalah, tujuan utama bab ini adalah menjelaskan tentang bagaimana membuat interface, seiring dengan bab-bab selanjutnya kita akan belajar lebih jauh mengenai beberapa teknologi yang sempat disinggung di atas.

sekian dulu untuk bagian ini semoga bisa bermanfaat bagi kita semua..

To Be Continued.. :)

0 komentar:

Posting Komentar


Diberdayakan oleh Blogger.