Diberdayakan oleh Blogger.
Home » » java chap5

java chap5

Written By Tim Editor on Sabtu, 19 Desember 2015 | 19.09

 

Inheritance and Encapsulation

Inheritance adalah proses penurunan sebuah class induk ke class anak. Semua property dan method yang memenuhi syarat inheritance akan diturunkan ke class anak. Dengan menggunakan inheritance, class anak akan secara otomatis memiliki property dan dan dapat memanggil method yang dimiliki oleh class induk.
Encapsulation adalah proses menentukan apakah property atau method di class induk ingin diturunkan atau ingin disembunyikan. Kalau ingin diturunkan, sejauh mana penurunannya.
Aturan encapsulation untuk property dan method yang dapat diturunkan :
  1. Property dan method yang bersifat public akan diturunkan ke class anak dan dapat langsung diakses oleh object dan class dari class induk dan anak.
  2. Property dan method yang bersifat protected akan diturunkan ke class anak, dan dapat diakses langsung oleh object dan class dari class induk dan anak, tetapi tidak dapat diakses oleh object di luar dari package class induk, namun masih dapat diakses oleh class anak di luar package class induk.
  3. Property dan method yang bersifat private tidak diturunkan dan tidak dapat diakses oleh object dari class induk dan anak. Property dan method ini hanya dapat diakses dalam class induk itu sendiri.
Tujuan dilakukan inheritance :
  1. Tidak perlu membuat ulang class yang sama/mirip. Dengan melakukan inheritance, dapat mencegah redudansi kode program.
  2. Dengan melakukan inheritance, maka maintenance terhadap kode program dapat dilakukan pada class induk, dan class anak secara otomatis akan mendapatkan efek updatenya.
  3. Dengan melakukan inheritance, kita dapat menerapkan teknik polymorphism.

Format Inheritance

class nama_class_anak extends nama_class_induk

Contoh inheritance

05 inheritance karyawan
Gambar 1: Inheritance
Gambar 1 memperlihatkan proses inheritance.
Sebuah perusahaan memiliki 2 jenis golongan karyawan, yaitu manajer dan supervisor. Dari class Manajers dan Supervisors di sebelah kiri, dapat kita lihat persamaan antara ke 2 class tersebut. Kedua class tersebut memiliki nik, nama, gaji, dan lama kerja, serta memiliki 2 buah method yang sama, yaitu hitungCuti dan hitungGaji. Perbedaannya terletak pada property insentif dan property uangMakan. Method hitungCuti menggunakan rumus yang sama untuk kedua class tersebut yaitu hitungCuti = 11+lamaKerja. Namun method hitungGaji memiliki rumus yang berbeda yaitu :
  1. Untuk Manajer, hitungGaji = gaji + insentif.
  2. Untuk Supervisor, hitungGaji = gaji + uangMakan;
Untuk property dan method yang menggunakan rumus yang sama, kita kelompokkan dalam sebuah class induk. Untuk property dan method yang menggunakan rumus yang berbeda, kita dapat pisahkan dalam class anak yang berbeda.
Class induk, yaitu class Karyawan, memiliki 4 buah property dan 1 buah method. Pada saat diturunkan, class Manajer memiliki 4 buah property turunan + 1 property lokal dan 1 buah method turunan + 1 buah method lokal. Class Supervisor juga memiliki total 5 buah property dan 2 buah method. Meskipun secara explisit, dalam class Manajer dan Class Supervisor tidak terlihat adanya property dan method turunan, namun saat dipanggil, property dan method tersebut akan muncul.
package chapter5;

public class KaryawanInduk { 
    protected String nik; 
    protected String nama;
    protected double gaji;
    protected int lamaKerja;

    public int hitungCuti(){ 
        int cuti;

        cuti=11+lamaKerja; 
        return cuti;
    }
}

Kita membuat sebuah class baru dengan nama KaryawanInduk

Kita membuat 4 buah property untuk menampung data karyawan

Kita membuat sebuah method dengan nama hitungCuti. Method ini akan melakukan perhitungan cuti yang dapat diambil oleh seorang karyawan selama setahun.

Rumus dari perhitungan cuti tahunan ini dapat kita lihat pada baris ini, yaitu sebanyak 11 hari + berapa tahun karyawan tersebut telah bekerja di perusahaan tersebut.
Untuk menurunkan class Karyawan ke class Manajer dan class Supervisor dapat dilakukan dengan cara berikut :
package chapter5;

public class ManagerAnak extends KaryawanInduk{ 
    public double insentif; 

    public double hitungGaji(){ 
        double total = gaji+insentif; 
        return total;
    }
}

Kita membuat sebuah class baru dengan nama ManagerAnak yang merupakan turunan dari class induk KaryawanInduk.

Kita menambahkan sebuah property lokal untuk menampung data insentif manajer.

Kita menambahkan sebuah method lokal untuk menghitung total gaji yang diterima oleh manajer.

Rumus dari perhitungan total gaji adalah gaji + insentif.
package chapter5;

public class SupervisorAnak extends KaryawanInduk{ 
    public double uangMakan; 

    public double hitungGaji(){ 
        double total = gaji+uangMakan; 
        return total;
    }
}

Kita membuat sebuah class baru dengan nama SupervisorAnak yang merupakan turunan dari class induk KaryawanInduk.

Kita menambahkan sebuah property lokal untuk menampung data uang makan supervisor.

Kita menambahkan sebuah method lokal untuk menghitung total gaji yang diterima oleh supervisor.

Rumus dari perhitungan total gaji adalah gaji + uang makan.
Berikut ini adalah data karyawan yang akan kita gunakan :
NIK Nama Gaji Pokok Lama Kerja Insentif Uang Makan
10-31
Marlon
2.500.000
3 tahun
120.000
0
11-27
Henry
3.000.000
5 tahun
150.000
0
12-25
Cyntia
1.500.000
2 tahun
0
450.000
Berdasarkan 3 buah data karyawan di atas, maka kita dapat menciptakan 3 buah object karyawan sesuai dengan jabatannya lengkap dengan datanya masing-masing. Sesudah object karyawan tercipta, kita dapat melakukan perhitungan cuti dan total gaji dari masing-masing karyawan tersebut.
package chapter5;

public class Perusahaan {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Manajer manajer1 = new Manajer();
        manajer1.nik="10-31";
        manajer1.nama="Marlon";
        manajer1.gaji=2500000;
        manajer1.lamaKerja=3;
        manajer1.insentif=120000;

        System.out.println("Manajer 1 : " + manajer1.nama);
        System.out.println("Gaji : " + manajer1.gaji);
        System.out.println("Insentif : " + manajer1.insentif);
        System.out.println("Lama Kerja : " + manajer1.lamaKerja + " tahun");
        System.out.println("Cuti : " + manajer1.hitungCuti());
        System.out.println("Total : " + manajer1.hitungGaji());
        System.out.println("---------------------------------");

        Manajer manajer2 = new Manajer();
        manajer2.nik="11-27";
        manajer2.nama="Henry";
        manajer2.gaji=3000000;
        manajer2.lamaKerja=5;
        manajer2.insentif=150000;

        System.out.println("Manajer 2 : " + manajer2.nama);
        System.out.println("Gaji : " + manajer2.gaji);
        System.out.println("Insentif : " + manajer2.insentif);
        System.out.println("Lama Kerja : " + manajer2.lamaKerja + " tahun");
        System.out.println("Cuti : " + manajer2.hitungCuti());
        System.out.println("Total : " + manajer2.hitungGaji());
        System.out.println("---------------------------------");

        Supervisor supervisor1 = new Supervisor();
        supervisor1.nik="12-25";
        supervisor1.nama="Cyntia";
        supervisor1.gaji=1500000;
        supervisor1.lamaKerja=2;
        supervisor1.uangMakan=450000;

        System.out.println("Supervisor 1 : " + supervisor1.nama);
        System.out.println("Gaji : " + supervisor1.gaji);
        System.out.println("Uang Makan : " + supervisor1.uangMakan);
        System.out.println("Lama Kerja : " + supervisor1.lamaKerja + " tahun");
        System.out.println("Cuti : " + supervisor1.hitungCuti());
        System.out.println("Total : " + supervisor1.hitungGaji());
    }
}

Kelebihan Inheritance

  1. Update terhadap class induk akan mempengaruhi semua class anak yang merupakan turunannya. (cth : update perhitungan cuti).
  2. Jika terjadi spesialisasi fungsi, dapat menerapkan override pada class anak yang diinginkan tanpa mempengaruhi class induk atau class anak yang lain. (cth : override method menghitung cuti).
  3. Dapat menciptakan class baru dengan fungsi khusus tanpa merubah source dari class induk. (cth : include jar Karyawan untuk menciptakan class staff).

0 komentar:

Posting Komentar