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 :
- Property dan method yang bersifat public akan diturunkan ke class
anak dan dapat langsung diakses oleh object dan class dari class induk
dan anak.
- 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.
- 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 :
- Tidak perlu membuat ulang class yang sama/mirip. Dengan melakukan inheritance, dapat mencegah redudansi kode program.
- Dengan melakukan inheritance, maka maintenance terhadap kode
program dapat dilakukan pada class induk, dan class anak secara
otomatis akan mendapatkan efek updatenya.
- Dengan melakukan inheritance, kita dapat menerapkan teknik
polymorphism
.
Format Inheritance
class nama_class_anak extends nama_class_induk
Contoh inheritance
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 :- Untuk Manajer, hitungGaji = gaji + insentif.
- 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.
Untuk menurunkan class Karyawan ke class Manajer dan class Supervisor dapat dilakukan dengan cara berikut :
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.
Kelebihan Inheritance
- Update terhadap class induk akan mempengaruhi semua class anak yang merupakan turunannya. (cth : update perhitungan cuti).
- 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).
- 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