Rabu, 21 Desember 2011

INHERITANCE, IS-A, HAS-A

Inheritance (turunan) ada di mana-mana dalam Java. Sangat tidak mungkin membuat aplikasi tanpa melibatkan konsep Inheritance, faktanya setiap class yang kita tulis adalah turunan dari class Object. Anda ingin bukti? Ingat-ingat lagi bab tentang operator, di sana ada satu operator instanceof, operator ini digunakan untuk mengetes apakah sebuah object merupakan tipe dari suatu class. Operator ini akan mengembalikan true kalau tipe dari object tersebut adalah class yang ada di operand sebelah kanan dari operator instanceof, sebaliknya nilainya adalah false.

public class InheritanceTest{
            public static void main(String[] args){
                     InheritanceTest test = new InheritanceTest();
                     if (test instanceof Object ){
                               System.out.println("test tipenya Object");
                    } else {
                               System.out.println("test tipenya bukan Object");
                    }
           }
}

test tipenya Object

Terbukti bahwa walaupun tidak secara eksplisit kita defnisikan InheritanceTest sebagai turunan dari Object

Implementasi inheritance dalam kode menggunakan keyword extends. Kalau kita ingin membuat sebuah class turunan dari class yang lain, kita gunakan keyword extends setelah deklarasi nama class diikuti dengan class yang ingin digunakan sebagai orang tua dari class tersebut. Misalnya kita ingin akan membuat dua buah class, class pertama adalah Customer sedangkan class kedua adalah MemberCustomer, dimana class MemberCustomer adalah turunan dari class Customer. Kode class Customer adalah seperti di bawah ini

public class Customer{}

public class MemberCustomer extends Customer {}

Class MemberCustomer dalam hal ini mempunyai hubungan IS-A dengan class Customer. Kalimat lengkapnya adalah “MemberCustomer IS-A Customer”. Hal ini dikarenakan MemberCustomer adalah turunan Customer, analoginya kita bisa menggunakan kucing dan hewan. Kucing adalah turunan dari hewan, maka kucing adalah hewan. Sama juga seperti MemberCustomer adalah turunan dari Customer, maka MemberCustomer adalah Customer.

Apa tujuan dari inheritance dilihat dari sisi kode? Yang pertama adalah mempromosikan code reuse, yaitu penggunaan kembali kode yang sudah ditulis. Hal ini dikarenakan, sebagai turunan dari Customer, MemberCustomer akan mempunyai semua sifat-sifat (kode) dari class Customer. Misalnya kita ubah sedikit kode di atas, kita tambahkan property dan method di dalam class Customer :

public class Customer{

           private Long id;

           public Long getId(){
                     return id;
          }

          public void setId (Long aId){
                     this.id = aId;
         }

}

public class MemberCustomer extends Customer {}

public class CustomerTest {
          public static void main(String[] args) {
                  MemberCustomer member = new MemberCustomer();
                  member.setId(100l);
                  System.out.println("id customer : " + member.getId());
          }
}

id customer : 100

Terlihat bahwa tidak ada error dalam proses kompilasi, padahal class MemberCustomer tidak mendefnisikan apapun, tetapi method setId dan getId dapat digunakan. Hal ini dikarenakan MemberCustomer mengextends Customer, sehingga method setId dan getId diturunkan. Catat juga bahwa property id sendiri tidak diturunkan ke dalam MemberCustomer, karena property id menggunakan private sebagai access modifer.

Hubungan HAS-A lebih sederhana. Hubungan HAS-A atau komposisi (composition) terjadi kalau sebuah class mempunyai sebuah property. Misal kita dapat melihat Customer HAS-A Long dengan nama id.

Buat satu class dengan nama Adress, class ini digunakan oleh Customer untuk mendefinisikan alamat Customer

public class Address {
            private String street;
            private String city;
            private String postCode;
}

Hubungan antara class Customer dengan Address adalah HAS-A, diimplementasikan dengan membuat property dengan tipe Address pada class Customer.

public class Customer {
            private Long id;
            private Address address;

            public void setId (Long aId){
                       this.id = aId;
            }
           
            public Long getId(){
                       return this.id;
            }

            public void setAddress (Address aAddress){
                       this.address =  aAddress;
            }

            public Address getAdress(){
                        return this.address;
            }
}

Kode diatas memperlihatkan hubungan HAS-A antara Customer dengan Address

Tidak ada komentar:

Posting Komentar