Kepada pengunjung Yang Terhormat

Saya harap anda bahagia dengan postingan di Blog ini. anda senang,saya Melayang

Sunday, 24 January 2021

DEKLARASI PADA PEMROGRAMAN JAVA 8dfs7a

 

DEKLARASI PADA PEMROGRAMAN JAVA 8dfs7a

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 (}) yang menandai akhir dari class.  Object adalah instansiasi dari class. Kita bisa membayangkan bahwa class adalah sebuah cetakan dan object adalah materi hasil cetakan dari class. Setiap object akan mempunyai state (instance variabel/properties)  yang  membedakan  satu  object  dengan  object  lain,  kemudian  object  juga mempunyai behaviour (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 didefnisikan dalam beberapa cara berbeda. Cara pertama adalah mendefnisikan sebuah public class di dalam fle .java. Contohnya bisa kita lihat di bawah ini :

public class Person { }

Simpan di dalam fle Person.java, kemudian compile fle .java di atas menggunakan java compiler (javac). $ javac Person.java

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

Kode di atas 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 di dalam satu fle .java, tetapi dalam satu fle  .java hanya boleh dideklarasikan satu buah public class yang namanya sama dengan nama fle .java. Contohnya sebagai berikut :

public class Person{}

class Person2{}

class Person3{}

class Person4{}

 

Simpan di dalam fle Person.java, kemudian compile fle .java di atas 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 fle .class, dan nama dari fle .classnya 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 di atas, deklarasi class kedua dan seterusnya berada di luar dari class pertama, kemudian fle .class yang dihasilkan berbeda-beda, dan penamaan class-nya tidak menyertakan nama class public-nya, semuanya adalah class berbeda tetapi diletakkan dalam fle 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 berada. 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 Person3{}

  class Person4{}

}

 

Compile fle .java di atas menggunakan java compiler (javac).

$ javac Person.java

Setelah proses kompilasi berhasil, lihat isi folder dengan menggunakan perintah dir (windows)

atau ls (*nix). Terlihata bahwa setiap class dibuatkan satu buah fle .class, nama fle .class

untuk inner class diawali dengan nama class di mana inner class berada kemudian ada tanda $

dan diakhiri dengan nama innner 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 di atas, ada sebuah variabel dengan nama thread, variabel tersebut adalah object dari class Runnable. 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 fle Person.java dan coba compile menggunakan javac, setelah kompilasi berhasil lihat isi dari direktori, akan ada dua buah fle class yaitu Person.class dan Person$1.class, nah class  yang  terakhir  inilah  anonymous  inner  class.  Kalau  ada  dua  inner  class  atau  lebih, penamaanya 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 fle .java, non public class boleh lebih dari satu di dalam satu fle .java

Nama class public harus sama dengan nama fle .java Komentar bisa diletakkan di mana saja Jika class berada dalam sebuah package, maka harus ada deklarasi package di bagian paling atas dari fle .java 

Import berada antara deklarasi package dan deklarasi class

Deklarasi import dan package berlaku  untuk semua class dalam fle .java, tidak mungkin mendefnisikan dua buah class yang mempunyai package berbeda di dalam satu fle .java

 

Dalam aturan di atas, ada poin yang menyebutkan tentang package. Package adalah feature 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 access modifer, keyword access modifer terdiri dari empat level : public, default, protected dan private. Hanya tiga dari empat level tersebut yang benar-benar merupakan keyword, access modifer default bukan merupakan keyword karena kalau tidak ada satupun dari ketiga access modifer digunakan di dalam deklarasi class maka kita menyebutnya default. Kita akan  bahas satu per satu efek  dari  penggunaan  access modifer  pada  deklarasi sebuah class.  Jika sebuah class dideklarasikan sebagai public, maka semua class yang lain dapat melihat class tersebut.  Melihat  di  sini  dalam  arti  bisa  mengimport,  menginstansiasi,  mengextends  dan memanggil method yang ada dalam class. Jika sebuah class dideklarasikan sebagai default atau tidak ada access modifer sama  sekali, maka hanya  class dari package yang sama  atau  class turunanya 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  access  modifer,  class  bisa  dideklarasikan  menggunakan  keyword  fnal.  Jika  class dideklarasikan dengan keyword fnal maka class ini tidak bisa diextends oleh class lain, salah satu alasan kenapa class ditandai fnal agar tidak ada implementasi lain selain class ini. Semua class wrapper seperti String ditandai sebagai fnal agar tidak ada yang mengextends class String ini. Keyword  abstract  bisa  digunakan  untuk  mendeklarasikan  class,  hal  ini  akan  menyebabkan abstract class tidak dapat diinstansiasi atau dibuat 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 fnal atau biasa disebut sebagai  konstanta.  Deklarasi  interface  menggunakan  keyword  interface  diikuti  dengan  nama interface. Contoh paling sederhana dari sebuah interface bisa kita lihat dalam kode di bawah 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 methodmethod

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 access identifers

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  interface,  antara  satu  interface dengan interface yang lain dipisahkan dengan tanda koma, seperti contoh sederhana di bawah ini :

public interface PersonDaoImpl implements PersonDao, Serializable{} 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  Connection,  ResultSet,  Statement, 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 kalau kita ingin melakukan koneksi ke MySQL ataupun  ke  Oracle,  interfacenya  sama,  yang  berbeda  hanya  implementasinya  saja. implementasi dari JDBC API ini sering dikenal sebagai JDBC Driver. Mengenai JDBC kan 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  layer  dalam aplikasi.  Misalnya  contoh  di atas  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 di atas 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.

 

Class vs Object

Object  adalah  instansiasi  dari  sebuah  Class.  Kalau  kita  analogikan,  class  itu  sebuah  cetakan sedangkan  object  itu  adalah  barang  dari  hasil  cetakan.  Class  juga  bisa  dikatakan  sebagai kategori, sedangkan object adalah sesuatu yang memenuhi syarat-syarat yang harus dipenihi agar masuk  dalam kategori  tersebut.  Jadi  bisa dibilang  satu  class  bisa  mempunyai  banyak  object, setiap object mempunyai sifat yang sama persis seperti yang didefnisikan dalam class tersebut.  Kita ambil contoh adalah class Person, kemudian kita buat sebuah instance dari class Person yaitu ifnu. Kalimat di atas kalau diwujudkan dalam kode menjadi seperti di bawah ini : Person ifnu = new Person();  Dua  kata paling kiri  adalah  proses deklarasi sebuah object dengan  tipe Person,  kemudian  di sebelah  kanan  tanda  sama  dengan  (=)  terjadi  proses  instansiasi  object  dari  class  Person menggunakan keyword  new.  Setiap kali kita  bertemu keyword  new  artinya  hanya  satu, yaitu instansiasi object dari sebuah class. Keyword new secara detail dalam level yang paling bawah, menyebabkan JVM akan membuat object di dalam memory.

 

Method

Method adalah sekumpulan kode yang diberi nama, untuk merujuk ke sekumpulan kode tersebut digunakan  sebuah  nama  yang  disebut  dengan  nama  method.  Method  mempunyai  parameter sebagai  input  dan  nilai  kembalian  sebagai  output.  Kita  bisa juga  membayangkan  method  itu adalah sebuah mesin, ada input yang dibutuhkan dan output yang dihasilkan.  Deklarasai  method  terdiri  dari  beberapa  bagian,  bagian  pertama  adalah  access  modifer  dari method, apakah public, private, protected atau default. Bagian berikutnya adalah tipe kembalian dari method, kalau method tidak mengembalikan apa-apa maka keyword void yang digunakan. Bagian ketiga adalah nama method, sesuai dengan aturan java code convention, nama method diawali dengan huruf kecil dan setiap kata setelahnya diawali dengan huruf besar (camel case).  Setelah  nama  method ada  parameter.  Sebuah  method  bisa juga  tidak  mempunyai  parameter, punya satu, dua dan seterusnya. Setelah java 5 ada feature yang disebut dengan varargs, feature ini memungkinkan method untuk mempunyai jumlah parameter yang bervariasi. Varargs akan kita bahas di bab tentang Java 5 Language enhancement, jadi tidak akan dibahas dalam bab ini.  Bagian  terakhir  dari  method  adalah  deklarasi  throws  exception,  dimana  kita  bisa mendeklarasikan tipe exception yang akan dithrows oleh method. Bab tentang exception akan membahas lebih lanjut tentang throws exception.

Nama method dan parameter adalah pembeda antara satu method dengan method yang lainya. Kalau dua method namanya beda ya pasti dianggap dua buah method berbeda. Kalau dua method namanya sama dianggap sebagai method yang berbeda  kalau parameternya berbeda, method dengan nama sama dan parameter berbeda ini disebut dengan overloading dalam konsep OOP.  Kalau method mempunyai nama yang sama dan parameter yang sama tetapi tipe return atau throws exceptionya berbeda maka akan menyebabkan error pada waktu kompilasi. Jadi kalau mendefnisikan  method  baru,  pastikan  bahwa  namanya  tidak  sama  dengan  method  lain  atau setidaknya parameternya berbeda baik dari sisi jumlahnya, tipe parameter atau posisi parameter. Dari penjelasan di atas, struktur method seperti di bawah ini adalah benar:

 

public void main(String[] args){ }

public String methodReturnString(){ return "ini string"; }

private void methodBerparameter(String parameter1, Integer parameter2) {}

public void methodThrowsException() throws IOException {}

protected String protectedMethod(Sting parameter1, Integer parameter2)

  throws IOException { return "ini string"; }

public void methodBerbeda() {}

public void methodBerbeda(String parameter1) {}

public void methodBerbeda(String parameter1, Integer parameter2) {}

public void methodBerbeda(Integer parameter1, String parameter2) {}

public void methodBerbeda(Double parameter1, Double parameter2) {}

 

Ada beberapa keyword yang bisa ditambahkan dalam deklarasi method. Keyword yang paling sering digunakan adalah static. Bagian kode Java yang dideklarasikan dengan menggunakan static akan menjadi anggota dari class, bukan anggota dari object, silahkan kembali ke bab berikutnya kalau masih belum bisa membedakan mana class dan mana object. Karena  method  yang  ditandai  dengan  static  adalah  bagian  dari  class,  maka  bisa  diakses langsung dari nama Class itu sendiri, tidak perlu membuat object. Method static hanya bisa memanggil method lain dalam satu class yang juga ditandai static. Method main yang biasa kita gunakan untuk menjalankan aplikasi java juga ditandai dengan static, misalnya kita akan memanggil method lain dari method static, maka method lainya ini juga harus ditandai dengan  static. Kita lihat contoh berikutnya :

public class StaticTest {

  public static void main(String[] args) {

     //static method memanggil static method lain dalam class yang sama

     contohMethodStatic();

     //method static juga bisa dipanggil dari nama classnya

     StaticTest.contohMethodStatic();

  }

  public static void contohMethodStatic() {

    System.out.println("method static dipanggil");

  }

}

Kalau kode di atas dicompile, kemudian dijalankan maka hasilnya seperti di bawah ini :

$ javac StaticTest.java

$ java StaticTest

method static dipanggil

method static dipanggil

$

terlihat bahwa method  contohMethodStatic dipanggil dua kali, baik menggunakan nama class

maupun tidak.

Keyword lain yang bisa digunakan oleh method adalah fnal, synchronize dan native.  Keyword

fnal akan menyebabkan method tidak bisa dioverride, kita bahas topik ini di bab OOP. Keyword

synchronize akan menyebabkan hanya satu thread yang bisa mengeksekusi method ini dalam

satu waktu, kalau ada thread lain maka harus mengantri sampai thread sebelumnya selesai

menjalankan  method  tersebut.  Keyword  native  menandai  implementasi  method  akan

diletakkan dalam kode native, misalnya ditulis menggunakan C/C++, kemudian menggunakan

Java Native Interface (JNI) untuk mengakses implementasi method tersebut. Topik mengenai

JNI dan native tidak kita bahas di dalam buku ini dan diserahkan kepada anda.

 

No comments:

Post a Comment

iklan popcash