Users  

   

Hobi  

   

Statistik  

Visitors
232
Articles
59
Articles View Hits
394919
   

User Online  

We have 59 guests and no members online

   

BAB II.2

Details

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  contoh Method Static dipanggil dua kali, baik menggunakan nama class
maupun tidak.
Keyword lain yang bisa digunakan oleh method adalah final, synchronize dan native.  Keyword
final 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 tutorial ini dan diserahkan kepada anda, pembaca tutorial
ini, untuk mempelajari topik advace ini dari sumber lain.


Constructor
Constructor adalah method yang spesial, karena mempunyai aturan-aturan sebagai berikut:
• mempunyai nama yang sama persis dengan nama class
• tidak mempunyai tipe return
• digunakan untuk menginstansiasi object
• hanya mempunyai access modifer, tidak ada keyword lain yang diletakkan sebelum nama
method pada deklarasi constructor.
Seperti   halnya   method   pada   umumnya,   constructor   bisa   mempunyai   parameter   serta
melempar (throws) exception.  Constructor yang tidak mempunyai  parameter disebut dengan
default  constructor.  Setiap class pasti  mempunyai  setidaknya satu constructor,  kalau dalam
deklarasi class tidak ada constructor sama sekali, Java secara default akan mempunyai default
constructor ini. Kalau ada satu saja constructor dengan parameter, maka default constructor
tidak akan dibuat, kalau masih mau ada default constructor maka harus dideklarasikan secara eksplisit. Mari kita lihat contoh kodenya :


public ConstructorTest {
  public void methodSederhana(){
    System.out.println("method sederhana dipanggil");
  }
  public static void main(String[] args){
    ConstructorTest test = new  ConstructorTest();
    test.methodSederhana();
  }
}


Kode di atas memperlihatkan bahwa class ConstructorTest tidak mendefnisikan constructor sama
sekali,   tetapi  constructor  new   ConstructorTest()  dapat  dipanggil   tanpa menyebabkan adanya error.  Hal   ini  disebabkan karena  Java akan membuatkan default  constructor kalau class  tidak mendefnisikan  cosnstructor sama sekali.


public class ConstructorNonDefaultTest {
  public ConstructorNonDefaultTest(String text) {
    methodSederhana(text);
  }
  public void methodSederhana(String text){
    System.out.println("method sederhana dipanggil dengan text : " + text);
  }
  public static void main(String[] args){
    //error pada waktu compile karena ada constructor yang dideklarasikan
    //sehingga default constructor menjadi wajib dideklarasikan
    ConstructorNonDefaultTest test = new  ConstructorNonDefaultTest();
   
    //constructor non default dengan satu parameter bertipe string
    ConstructorNonDefaultTest test1 =
      new  ConstructorNonDefaultTest("ini test");
  }
}


kalau kode di atas coba dicompile maka terdapat satu buah error seperti di bawah ini :


$ javac ConstructorNonDefaultTest.java
ConstructorNonDefaultTest.java:11: cannot find symbol
symbol  : constructor ConstructorNonDefaultTest()
location: class ConstructorNonDefaultTest
    ConstructorNonDefaultTest test = new  ConstructorNonDefaultTest();
                                     ^
1 error
$


Constructor  dapat  memanggil  constructor  lain dalam class yang sama menggunakan keyword
this. Kode untuk memanggil constructor lain ini  harus berada di baris pertama dari constructor,
kalau tidak maka akan ada error pada waktu kompilasi. Berikut ini contohnya :
public class ConstructorCallConstructorTest {
  public ConstructorCallConstructor(){
    this("constructor memanggil constructor");
    //kode lain di sini, tidak bisa diletakkan di atas keyword this
  }
  public ConstructorCallConstructor(String text) {
    methodSederhana(text);
  }
  public void methodSederhana(String text){
    System.out.println("method sederhana dipanggil dengan text : " + text);
  }
  public static void main(String[] args){    ConstructorCallConstructorTest test = new  ConstructorCallConstructorTest();
   
    ConstructorCallConstructorTest test =
      new  ConstructorCallConstructorTest torTest("ini test");
  }
}


Constructor  mana  yang dipanggil  pada waktu menggunakan keyword  this  ditentukan dari 
parameternya.


Property
Property adalah variabel yang dideklarasikan di dalam class sejajar dengan method. Variabel 
yang berada di dalam method bukan merupakan property, tetapi disebut sebagai local variabel. 
Layaknya variabel  yang  lain,  property mempunyai   tipe data dan nama.  Berdasarkan aturan
java bean,  property akan dibuatkan method getter dan setter untuk membungkus property. 
Secara umum, disarankan untuk memberikan access modifer private kepada semua property,
kalau ingin mengakses property tersebut maka buatlah method getter dan setter.
Deklarasi  property diawali  dengan access  modifer  kemudian diikuti  dengan  tipe data dan
akhirnya adalah nama dari property. Property bisa langsung diinisialisasi nilainya atau tidak, 
kalau   tidak   diberi   nilai,  maka   nilai   default   yang   akan   diset   sebagai   nilai   awal   property. 
Contohnya seperti di bawah ini :
private String stringProperty;
Beberapa keyword lain juga bisa digunakan untuk mendeklarasikan property. Keyword static
bisa digunakan untuk mendeklarasikan property, static akan membuat property menjadi milik
class bukan milik object. Property static bisa diakses dari nama classnya dan tidak perlu ada
object  yang diinstansiasi.  Karena property static menjadi  milik class,  maka kalau property
static ini diganti isinya maka semua kode yang mengakses property static ini akan melihat nilai 
yang sama. Contohnya seperti di bawah ini :


public class PropertyStaticTest {
  public static String nilaiStatic;
  public static void main(String[] args) {
    //property static dipanggil menggunakan nama class
    PropertyStaticTest.nilaiStatic =  "nilai dari main";
    //property static juga bisa dipanggil tanpa nama class dari class yang sama
    System.out.println(nilaiStatic);
    //method main adalah method static, hanya bisa memanggil method static juga
    methodUbahPropertyStatic();
    //nilai property static berubah setelah method  methodUbahPropertyStatic
    //dipanggil
    System.out.println(nilaiStatic);
  }
  public static void methodUbahPropertyStatic() {
      PropertyStaticTest.nilaiStatic = "nilai dari methodUbahPropertyStatic";
  }
}
Kalau class di atas dicompile dan dijalankan, hasilnya adalah seperti di bawah ini :
$ javac PropertyStaticTest.java
$ java PropertyStaticTest
nilai dari main
nilai dari methodUbahPropertyStatic
$


variabel   static   bisa  sangat   berguna untuk memudahkan mengakses   suatu  variabel   karena
tinggal menggunakan nama class saja, jadi tidak perlu membawa-bawa nilai variabel ke dalam
object   yang   memerlukanya.   Tetapi   pada   skenario   berbeda   property   static   ini   malah
merepotkan,   terutama di   lingkungan aplikasi  web yang berjalan dalam cluster.  Antara satu
cluster   satu dan  cluster   yang  lain nilai   static   ini  bisa berbeda dan menyebabkan  aplikasi  menjadi tidak konsisten. Karena dalam buku ini kita tidak bekerja dalam lingkungan cluster, kita
bisa menganggap property static sebagai praktek yang aman. Nantinya di dalam aplikasi contoh, 
kita akan cukup banyak menggunakan property static untuk menyederhanakan kode.
Keyword berikutnya yang bisa diletakkan dalam property static adalah fnal. Adanya keyword fnal 
dalam deklarasi property menyebabkan property hanya bisa diinisialisasi (diberi nilai) sekali saja,
setelah  itu nilainya  tidak bisa dirubah,  perilaku  ini  biasa kita sebut  dengan konstanta:  sekali 
diberi nilai tidak bisa berubah nilainya. Kalau kita memaksa merubah nilainya maka akan terjadi
error pada waktu kompilasi  atau kalau java compiler tidak sanggup menentukan errornya akan
terjadi pada waktu aplikasi berjalan.
Contohnya   kita   akan   merubah   property   nilaiStatic   di   contoh   kode   sebelumnya   dengan  menambahkan keyword fnal, seperti di bawah ini :


public class PropertyStaticFinalTest {
  public static final String nilaiStatic;
  public static void main(String[] args) {
    PropertyStaticFinalTest.nilaiStatic =  "nilai dari main";
    System.out.println(nilaiStatic);
    methodUbahPropertyStatic();
    System.out.println(nilaiStatic);
  }
  public static void methodUbahPropertyStatic() {
    PropertyStaticFinalTest.nilaiStatic =
      "nilai dari methodUbahPropertyStatic";
  }
}


Ketika kode dikompilasi maka akan terjadi error yang menerangkan bahwa “tidak bisa mengubah
nilai variabel yang ditandai dengan fnal”. Outputnya seperti di bawah ini :

$ javac PropertyStaticFinalTest.java
PropertyStaticFinalTest.java:4: cannot assign a value to final variable nilaiStatic
    PropertyStaticFinalTest.nilaiStatic =  "nilai dari main";
                           ^
PropertyStaticFinalTest.java:10: cannot assign a value to final variable
nilaiStatic
    PropertyStaticFinalTest.nilaiStatic =
                           ^
2 errors
$


Jadi   kalau   begitu   kapan   property   yang   ditandai   dengan   fnal   bisa   diberi   nilai?   Pada  waktu mendeklarasikan property. Contoh di bawah ini adalah cara yang benar menginisialisasi nilai ke property yang ditandai dengan final :


public class PropertyFinalTest {
  public final String nilaiFinal="inisialisasi";
  public static void main(String[] args) {
   PropertyFinalTest finalTest = new PropertyFinalTest();
   System.out.println(finalTest.nilaiFinal);
  }
}


Perhatikan kode di atas, property nilai Final   langsung diberi  nilai  pada waktu deklarasi.  Karena
sekarang property nilaiFinal kita harus membuat object dari  class   PropertyFinalTest agar bisa
mengakses property nilaiFinal,  berbeda dengan property yang ditandai  static dimana kita bisa
langsung mengaksesnya tanpa membuat object.
Masih ada keyword lain yang bisa kita letakkan dalam deklarasi property, yaitu volatile. Keyword
ini  menyebabkan property  tidak akan  ikut  disimpan ketika object  diserialize.  Proses   serialize
adalah proses mengubah object ke dalam bentuk yang bisa ditransfer lewat media I/O, misalnya
object  ini disimpan ke hardisk atau dikirim ke komputer  lain  lewat  jaringan.  Proses sebaliknya
adalah deserialize dimana dari bentuk ini diubah lagi menjadi bentuk object di dalam JVM. Topik serialize dan deserialize akan sedikit kita bahas nanti pada waktu membahas arsitektur three
tier. 


Konstanta
Java mempunyai keyword const yang bisa digunakan untuk mendeklarasikan konstanta. Tetapi 
dalam prakteknya,  dan ini adalah praktek yang disarankan oleh Sun Microsystem,  konstanta
sebaiknya dideklarasikan menggunakan gabungan keyword static dan  fnal.  Lebih baik  lagi, 
kalau konstanta diletakkan di dalam interface, karena semua property dalam interface secara
default   akan   bersifat   public   static   fnal,   walaupun   dideklarasikan   tanpa   ketiga   keyword tersebut.
Konstanta dalam  java  juga mempunyai  aturan penamaan yang diterangkan dalam Java Code
Convention.  Nama konstanta semuanya huruf  besar  dan dipisahkan dengan underscore  (_)
kalau terdiri dari dua kata atau lebih. Contoh pembuatan konstanta yang baik adalah seperti 
berikut ini :


public interface Constants{
  Integer MAX_USER =  10;
  String APPLICATION_NAME = "POS";
  Stiring LAKI_LAKI = "L";
  String PEREMPUAN = "P";
}


Perhatikan kode di atas menggunakan interface, bukan class. Kemudian semua property tidak
perlu dideklarasikan sebagai  public static fnal  karena secara default semua property dalam
interface sudah mempunyai ketiga keyword tersebut. Kalau kita deklarasikan Constants di atas
sebagai class maka ketiga keyword tersebut harus disertakan agar property dianggap sebagai 
konstanta. 


public class Constants{
  public static final Integer MAX_USER =  10;
  public static final String APPLICATION_NAME = "POS";
  public static final Stiring LAKI_LAKI = "L";
  public static final String PEREMPUAN = "P";
}


Sampai  di  sini  kita sudah belajar tentang perbedaan class dan object,  kemudian bagaimana
anatomi   dari   class   java.   Berikutnya   kita   akan   belajar   mengenai   struktur   aplikasi   java,  bagaimana kode diorganisasi dalam package, kemudian bagaimana mengimport class lain yang
berada dalam package yang berbeda. Kemudian kita juga membahas apa itu jar (java archive)
dan bagaimana membuatnya,   sekaligus  belajar  bagaimana  konsep classpath bekerja untuk
menemukan class yang dibutuhkan aplikasi.

sumber : ifnu bima

Add comment


Security code
Refresh

   

Indeks  

   
© ALLROUNDER