Minggu, 21 September 2014

pengertian enkapsulasi, inheritance, polymorphism

Enkapsulasi adalah suatu cara untuk menyembunyikan informasi detail dari suatu class. Dua hal yang mendasar dalam enkapsulasi yakni : Information hiding , Interface to access data.
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.
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 yang dinamakan dengan interface to access data.
Dalam enkapsulasi terdapat hak akses public, protected, dan private. Hak akses public memungkinkan semua kelas mengaksesnya, hak akses protected hanya diberikan kepada kelasnya sendiri dan turunannya, serta kelas-kelas dalam satu paket. Sedangkan private hanya boleh diakses oleh kelasnya sendiri.
Mengapa jika hak akses public pada konstruktor manusia di ganti dengan PRIVATE, program akan ERROR ? Private, adalah level proteksi untuk andi yang berada di dalam manusia. Si andi tidak boleh keluar dari manusia karena mempunya level proteksi paling tinggi. Dalam implementasinya, field dengan level proteksi private hanya dapat diakses di dalam class tersebut.
Dalam teori, dapatkah kita memberikan hak akses pada konstruktor??? Constructor berfungsi untuk menginisialisasi obyek dari class dan mempersiapkan ruang memory, sedangkan destructor menghapus dan membersihkan obyek ketika sudah tidak terpakai dan membebaskan memory yang tadinya terpakai. Constructor method merupakan method yang namanya sama dengan nama classnya dan bersifat public tapi tidak berjenis void ataupun non void. Constructor dapat menerima parameter namun tidak bisa mengembalikan nilai apapun.
Bagaimana solusi agar program dapat berjalan?? Konstruktor diubah menjadi protected atau public atau bisa juga menerapkan interface to access.

 Information Hiding
Penyembunyian informasi yang tidak perlu diketahui objek lain.
Contoh Deklarasi enkapsulasi :
public class siswa {
private int nrp;
public void setNrp(int n){
nrp = n;
}
}
contoh project enkapsulasi :
/*
buat kelas baru dengan nama Mahasiswa.java
*/
public class Mahasiswa {
private int nrp;
private String nama;
public Mahasiswa(int i, String n){
this.nrp = i;
this.nama = n;
}
public void  setNRP(int nrp) {
this.nrp = nrp;
}
public int getNRP () {
return nrp;
}
public void setNama(String nama) {
this.nama = nama;
}
public String getNama() {
return nama;
}
}//end class
/*
buat kelas main untuk menjalankan program dengan nama TesMahasiswa.java
*/
public class TesMahasiswa {
public static void main (String []args){
int nomer;
String nm;
Mahasiswa siswa = new Mahasiswa(123, “1”);
System.out.println(siswa.getNRP());
System.out.println(siswa.getNama());
siswa.setNama(“SoOn”);
siswa.setNRP(111);
System.out.println(siswa.getNRP());
System.out.println(siswa.getNama());
}
}//end class
output program :



Sumber :



Inheritance adalah turunan atau pewarisan suatu class ke class baru dengan mewakili semua function yang ada di class utama (parent class). Inheritance sering sekali digunakan di dalam promgraman berorientasi objek atau OOP. Dengan kata lain, class utama (parent class) dengan classes turunannya berhubungan satu sama lain.

Contoh :

 #abstrack

package latihan;
public abstract class Bentuk2D { //abstract class Bentuk2D
   
    // state
    int panjang = 1;
    int lebar = 1;
    int alas = 3;
    int tinggi = 5;
    double phi = 3.14;
    int r = 2;
   
    // behaviour
    public abstract double hitungLuas();
    public abstract String getBentuk();
   
}

#class utama

package latihan2;

 * @author hendrik
 */
public class LatihanBentuk2D { // class utama LatihanBentuk2D

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        BujurSangkar A = new BujurSangkar(); 
        A.setSisi(20);
        System.out.println("Luas " + A.getBentuk() + " = " + A.hitungLuas());
       
        Kubus B = new Kubus();
        B.setSisi(10);
        System.out.println("Luas " + A.getBentuk2() + " = " + B.hitungVolume());
       
        persegipanjang C = new persegipanjang();
        C.hitungLuaspersegi();
        System.out.println("Luas " + A.getBentuk3() + " = " + C.hitungLuaspersegi());
       
        segitiga D = new segitiga();
        D.hitungLuassegitiga();
        System.out.println("Luas " + A.getBentuk4() + " = " + D.hitungLuassegitiga());
       
        lingkaran E = new lingkaran();
        E.hitungLuaslingkaran();
        System.out.println("Luas " + A.getBentuk5() + " = " + E.hitungLuaslingkaran());
    }
}

#Turunan 1


package latihan;

 * @author hendrik
 */
public class BujurSangkar extends Bentuk2D {
   
    public void setSisi(int sisi) {
        panjang = sisi;
    }

    @Override
    public double hitungLuas() {
        return panjang*panjang;
    }

    @Override
    public String getBentuk() {
        return "Bujur Sangkar";
    }
    public String getBentuk2() {
        return "kubus";
    }
    public String getBentuk3() {
        return "Persegi panjang";
    }
    public String getBentuk4() {
        return "segitiga";
    }
      public String getBentuk5() {
        return "lingkaran";
    } 
}

#Turunan 2

package latihan;
 * @author hendrik
 */
public class Kubus extends BujurSangkar {
       
    public double hitungVolume() {
        // 1. return panjang*panjang*panjang;
        return hitungLuas() * panjang;
    }
   
}

#Turunan 3

package latihan;

/**
 *
 * @author hendrik
 */
public class persegipanjang extends BujurSangkar {
       
    public double hitungLuaspersegi() {
        // 1. return panjang*panjang*panjang;
        return panjang*lebar;
    }
   
}

#Turunan 4

package latihan;

/**
 *
 * @author hendrik
 */
public class segitiga extends BujurSangkar {
       
    public double hitungLuassegitiga() {
        // 1. return panjang*panjang*panjang;
        return ((alas*tinggi)/2);
    }
   
}


#Turunan5

package latihan;

/**
 *
 * @author hendrik
 */
public class lingkaran extends BujurSangkar {
       
    public double hitungLuaslingkaran() {
        // 1. return panjang*panjang*panjang;
        return (phi*(r*r));
    }
   
}

Hasil run dari class utama





Polymorphism, suatu aksi yang memungkinkan pemrogram menyampaikan pesan tertentu keluar dari hirarki obyeknya, dimana obyek yang berbeda memberikan tanggapan/respon terhadap pesan yang sama sesuai dengan sifat masing-masing obyek.
Atau Polymorphism dapat berarti banyak bentuk, maksudnya yaitu kita dapat menimpa (override), suatu method, yang berasal dari parent class (super class) dimana object tersebut diturunkan, sehingga memiliki kelakuan yang berbeda.
Polymorphism dapat disamakan dengan Method Overloading, dimana di dalam sebuah class terdapat beberapa method dengan nama sama. Sebuah Method bernama CetakData() yang misalnya berfungsi menampilkan data String, tentu tidak bisa menangani masukan berupa data numerik, boolean, ataupun karakter, demikian juga sebaliknya. Solusi yang bisa dilakukan adalah dengan menyediakan beberapa Method CetakData() yang akan menangani setiap tipe data, sehingga data apapun yang diberikan sebagai parameter tetap bisa diproses.
Berikut adalah contoh program Polymorphism pada Java:

Contoh Program 
  • Simpan dengan nama CetakDataTipe.java
class CetakDataTipe {
// membuat method dengan nama sama tapi berbeda tipe data
public void CetakData(String Cetak) {
System.out.println(Cetak);
}
public void CetakData(int Cetak) {
System.out.println(Cetak);
}
public void CetakData(double Cetak) {
System.out.println(Cetak);
}
public void CetakData(char Cetak) {
System.out.println(Cetak);
}
}
  • Simpan dengan nama Polymorphism.java
public class Polymorphism {
public static void main(String[] args) {
CetakDataTipe data = new CetakDataTipe();
System.out.print("Cetak Data Tipe String : ");
data.CetakData("Sumatra");
System.out.print("Cetak Data Tipe Integer : ");
data.CetakData(1989);
System.out.print("Cetak Data Tipe Double : ");
data.CetakData(16.5 / 2);
System.out.print("Cetak Data Tipe Char : ");
data.CetakData('N');
}
}
"Kemudian compile dan run program tersebut, maka akan menghasilkan output seperti ini :



Sumber : 

http://aladdin91.wordpress.com/2011/04/19/inheritance-dalam-java/
http://betoi.blogspot.com/2010/06/polymorphism-java.html