Kamis, 19 April 2012

Inheritance dan Polimorfisme


yaak~ bertemu lagi dengan saya.. siapa? entahlah..haha, lupakan..
kali ini saya akan mencoba memposting tentang Inheritance dan Polimorfisme pada Java.. dan di bawah ini sudah terdapat artikel yg bisa membantu kita memahaminya.. selamat membaca.. ^^
Pada dasarnya kita sebagai manusia sudah terbiasa untuk melihat objek yang berada di sekitar kita tersusun secara hierarki berdasarkan class-nya masing-masing. Dari sini kemudian timbul suatu konsep tentang pewarisan yang merupakan suatu proses dimana suatu class diturunkan dari class lainnya sehingga ia mendapatkkan ciri atau sifat dari class tersebut.
Dari hirarki di atas dapat dilihat bahwa, semakin ke bawah, class akan semakin bersifat spesifik. Misalnya, sebuah Class mamalia memiliki seluruh sifat yang dimiliki oleh binatang, demikian halnya juga anjing, kucing dan monyet memiliki seluruh sifat yang diturunkan dari class mamalia. Dengan konsep ini, karakteristik yang dimiliki oleh class binatang cukup didefinisikan dalam class binatang saja. Class mamalia tidak perlu mendefinisikan ulang apa yang telah dimiliki oleh class binatang, karena sebagai class turunannya, ia akan mendapatkan karakteristik dari class binatang secara otomatis. Demikian juga dengan class anjing, kucing dan monyet, hanya perlu mendefinisikan karakteristik yang spesifik dimiliki oleh class-nya masing-masing. Dengan memanfaatkan konsep pewarisan ini dalam pemrograman, maka hanya perlu mendefinisikan karakteristik yang lebih umum akan didapatkan dari class darimana ia diturunkan.
Penurunan sifat tersebut dalam Bahasa Pemrograman Java disebut dengan Inheritance yaitu satu dalam Pilar Dasar OOP (Object Oriented Programing), yang dalam implementasinya merupakan sebuah hubungan “adalah bagian dari” atau “is a relationship” object yang diinherit (diturunkan).
Latar belakang diperlukannya suatu inheritance dalam pemrograman java adalah untuk menghindari duplikasi object baik itu field, variable maupun methode yang sebenarnya merupakan object yang bisa diturunkan dari hanya sebuah class. Jadi inheritance bukan sebuah Class yang di inherit oleh sebuah Literial, tapi lebih menunjukkan ke hubungan antar object itu sendiri.
Sedangkan suatu kemampuan dari sebuah object untuk membolehkan mengambil beberapa bentuk yang berbeda agar tidak terjadi duplikasi object kita kenal sebagai polymorphism.
Antara penurununan sifat (inheritance) maupun polymorphism merupakan konsep yang memungkinkan digunakannya suatu interface yang sama untuk memerintah objek agar melakukan aksi atau tindakan yang mungkin secara prinsip sama namun secara proses berbeda. Dalam konsep yang lebih umum sering kali polymorphism disebut dalam istilah tersebut
OK biar gak banyak teori, buatlah base class Orang berikut ini:
01
package test.polimorfisme;
02


03
/**
04
 *

05
 * @author e12
06
 */

07
public class Orang {
08
    protected String name;

09
    protected String address;
10


11
    /** konstruktor tanpa parameter **/
12
    public Orang() {

13
        System.out.println("konstruktor dalam kelas Orang");
14
        name = "";

15
        address = "";
16
    }

17

18
    /** konstruktor dengan parameter nama, address **/

19
    public Orang(String name, String address) {
20
        this.name = name;

21
        this.address = address;
22
    }

23

24
    /** method accessor **/

25
    public String getAddress() {
26
        return address;

27
    }
28


29
    public void setAddress(String address) {
30
        this.address = address;

31
    }
32


33
    public String getName() {
34
        System.out.println("Nama orang : " + name);

35
        return name;
36
    }

37

38
    public void setName(String name) {

39
        this.name = name;
40
    }

41
}
Kemudian kita buat kelas turunan Siswa sebagai berikut:
01
package test.polimorfisme;
02


03
/**
04
 *

05
 * @author e12
06
 */

07
public class Siswa extends Orang {
08


09
    Siswa(String name, String address) {
10
        super(name, address);

11
    }
12
    @Override

13
    public String getName() {
14
        System.out.println("Nama Siswa : " + name);

15
        return name;
16
    }

17
}
Selanjutnya kelas Karyawan yang merupakan turunan dari Class Orang:
01
package test.polimorfisme;
02


03
/**
04
 *

05
 * @author e12
06
 */

07
public class Karyawan extends Orang {
08


09
    Karyawan(String name, String address) {
10
        super(name, address);

11
    }
12
    @Override

13
    public String getName(){
14
        System.out.println("Nama Kayawan : " + name);

15
        return name;
16
    }

17
}
Terakhir kita test Class-class yang telah kita buat:
01
package test.polimorfisme;
02


03
/**
04
 *

05
 * @author e12
06
 */

07
public class TestApp {
08
    public static void main(String[] args) {

09
        Orang ref;
10


11
        Siswa objSiswa = new Siswa("chester","yellowen");
12
        Karyawan objKaryawan = new Karyawan("Tokihiro","Osaka");

13

14
        /** orang merujuk kepada objek siswa **/

15
        ref = objSiswa;
16
        ref.getName();       

17

18
        /** orang merujuk kepada objek karyawan **/

19
        ref = objKaryawan;
20
        ref.getName();

21
    }
22
}

Semoga Bermanfaat.. ^^

Jumat, 30 Maret 2012

Apa Itu Enkapulasi dalam OOP??

Enkapsulasi adalah suatu cara untuk menyembunyikan informasi detail dari suatu class. Dua hal yang mendasar dalam enkapsulasi yakni :
• Information hiding.
• Interface to access data.
  • Information hiding


Sebelumnya kita dapat mengakses anggota class baik berupa atribut maupun method secara langsung dengan menggunakan objek yang telah kita buat. Hal ini dikarenakan akses kontrol yang diberikan kepada atribut maupun method yang ada di dalam class tersebut adalah 'public'. Kita dapat menyembunyikan informasi dari suatu class sehingga anggota class tersebut tidak dapat diakses dari luar, caranya adalah hanya dengan memberikan akses kontrol 'private' ketika mendeklarasikan atribut atau method. Proses ini disebut dengan information hiding.
  • Interface to access data


Jika kita telah melakukan information hiding terhadap suatu atribut pada suatu class, lalu bagaimana cara melakukan perubahan terhadap atribut yang kita sembunyikan tersebut, caranya adalah dengan membuat suatu interface berupa method untuk menginisialisasi atau merubah nilai dari suatu atribut tersebut.

Enkapsulasi menunjuk pada prinsip dari menyembunyikan desain atau mengimplementasikan informasi yang tidak sesuai pada object yang ada. Menyembunyikan elemen dari penggunaan sebuah class dapat dilakukan dengan pembuatan anggota yang ingin Anda sembunyikan secara private.
Contoh berikut menyembunyikan field secret. Catatan bahwa field ini tidak langsung diakses oleh program lain menggunakan method getter dan setter.

class Encapsulation {
private int secret; //field tersembunyi
public boolean setSecret(int secret) {
if (secret < 1 || secret > 100) {
return false; }
this.secret = secret;
return true;
}
public getSecret() {
return secret;
}
}
1. Accessor Methods

Untuk mengimplementasikan enkapsulasi, kita tidak menginginkan sembarangobject dapat mengakses data kapan saja. Untuk itu, kita deklarasikan atribut dariclass sebagai private. Namun, ada kalanya dimana kita menginginkan object lain untuk dapat mengakses data private. Dalam hal ini kita gunakan accessor methods.
Accessor Methods digunakan untuk membaca nilai variabel pada class, baik berupa instance maupun static. Sebuah accessor method umumnya dimulai dengan penulisan get<namaInstanceVariable>Method ini juga mempunyai sebuah return value.
Sebagai contoh, kita ingin menggunakan accessor method untuk dapat membaca nama, alamat, nilai bahasa Inggris, Matematika, dan ilmu pasti dari siswa.
Mari kita perhatikan salah satu contoh implementasi accessor method.
public class StudentRecord
{
     private String name;
     :
     :
   public String getName(){
      return name;
   }
}
dimana,
public - Menjelaskan bahwa method tersebut dapat diakses dari object luar class
String - Tipe data return value dari method tersebut bertipe String
getName - Nama dari method
() - Menjelaskan bahwa method tidak memiliki parameter apapun
Pernyataan berikut,
return name;
dalam program kita menandakan akan ada pengembalian nilai dari nama instance variable
ke pemanggilan method. Perhatikan bahwa return type dari method harus sama dengan
tipe data seperti data pada pernyataan return. Anda akan mendapatkan pesan kesalahan
sebagai berikut bila tipe data yang digunakan tidak sama :
StudentRecord.java:14: incompatible types
found : int
required: java.lang.String
return age;
^
1 error
Contoh lain dari penggunaan accessor method adalah getAverage,
public class StudentRecord
{
   private String name;
   :
   :
  public double getAverage(){
     double result = 0;
     result = ( mathGrade+englishGrade+scienceGrade )/3;
    return result;
  }
}
Method getAverage() menghitung rata – rata dari 3 nilai siswa dan menghasilkan nilai
return value dengan nama result.

2. Mutator Methods

Bagaimana jika kita menghendaki object lain untuk mengubah data? Yang dapat kita lakukan adalah membuat method yang dapat memberi atau mengubah nilai variable dalam
class, baik itu berupa instance maupun staticMethod semacam ini disebut dengan mutator
methods. Sebuah mutator method umumnya tertulisset<namaInstanceVariabel>.
Mari kita perhatikan salah satu dari implementasi mutator method :
public class StudentRecord
{
   private String name;
   :
   :
   public void setName( String temp ){
     name = temp;
   }
}
dimana,
public - Menjelaskan bahwa method ini dapat dipanggil object luar class
void - Method ini tidak menghasilkan return value
setName - Nama dari method
(String temp) - Parameter yang akan digunakan pada method
Pernyataan berikut :
name = temp;
mengidentifikasi nilai dari temp sama dengan name dan mengubah data padainstance variable name.
Perlu diingat bahwa mutator methods tidak menghasilkan return value. Namun berisi beberapa argumen dari program yang akan digunakan oleh method.