Anda di halaman 1dari 7

MEMAHAMI KONSEP DASAR PEWARISAN (INHERITANCE) DI JAVA

PETUNJUK PENGERJAAN :
3.5 Menerapkan konsep pewarisan
4.5 Membuat hubungan antara class dengan pola pewarisan

Alat yang dibutuhkan


1. Laptop/PC
2. Software JDK NetBeans
Pengerjaan tugas
1. Pelajari materi tentang konsep dasar pewarisan (inheritance)
2. Terapkan sintak program berdasarkan struktur yang ada
3. Buatlah simpulan dari output yang dihasilkan setelah program dijalankan.

Studi Kasus
Di sebuah perguruan tinggi (PT) X, terdapat 2 jenis pegawai yaitu: Tenaga Pendidik (Dosen), dan
Tenaga Kependidikan (Non Dosen).

Secara umum, atribut data yang dimiliki oleh setiap pegawai di perguruan tinggi X tersebut antara lain:
 id pegawai: String
 nama pegawai: String
 golongan: (integer) -> 1, 2
 tanggal lahir: Date
Adapun khusus untuk pegawai dosen, ada tambahan atribut yaitu ‘NIDN’ (Nomor Induk Dosen
Nasional) yang sifatnya wajib dimiliki oleh setiap dosen.

Selanjutnya, secara umum semua pegawai yang ada di PT X tersebut akan mendapatkan gaji pokok
yang sama perhitungannya, dengan ketentuan:
 Golongan 1 berusia kurang dari 40 tahun: Rp 3.500.000
 Golongan 1 berusia 40 tahun ke atas: Rp 4.500.000
 Golongan 2 berusia kurang dari 40 tahun: Rp 5.000.000
 Golongan 2 berusia 40 tahun ke atas: Rp 6.000.000
Selain gaji pokok, setiap pegawai juga akan mendapatkan tunjangan pegawai yang besarannya
dibedakan antara dosen dan nondosen, dengan ketentuan:
 Dosen: Rp 1.500.000
 NonDosen: Rp 1.000.000
Ditambah lagi, khusus untuk dosen terdapat tunjangan fungsional yang besarannya tergantung usianya
yaitu:
 Dosen berusia kurang dari 40 tahun: Rp 1.700.000
 Dosen berusia 40 tahun ke atas: Rp 2.000.000
Sehingga berdasarkan beberapa komponen gaji di atas, total gaji yang diterima oleh setiap jenis
pegawai adalah:
 Untuk Dosen: Total Gaji = Gaji Pokok + Tunjangan Pegawai + Tunjangan Fungsional
 Untuk NonDosen: Total Gaji = Gaji Pokok + Tunjangan Pegawai
Selanjutnya kita akan membuat program Java untuk menghitung setiap komponen gaji dan gaji total
yang diterima setiap pegawai di PT X tersebut.
Perancangan Class
Berdasarkan informasi di atas, kita mencoba mendesain struktur class untuk studi kasus yang diberikan
(disajikan dalam bentuk UML Class).

Struktur Class
Rancangan class di atas menggambarkan bahwa class Pegawai yang merupakan superclass dari class
Dosen, dan class NonDosen. Terdapat beberapa atribut dari Pegawai yang dimiliki juga oleh class
Dosen dan NonDosen (perhatikan atribut yang dicetak tebal/bold). Demikian juga untuk methodnya,
yaitu hitungUsia(), hitungGapok(), dan printPegawai().
Method hitungUsia() akan digunakan untuk menghitung usia pegawai berdasarkan tanggal
lahirnya (di sini menggunakan tipe data LocalDate), yang nantinya usia ini akan digunakan untuk
menghitung gaji pokok dan tunjangan fungsional bagi dosen.
Khusus untuk method printPegawai() di class Pegawai nantinya hanya akan menampilkan semua
atribut pegawai dan juga gaji pokoknya saja. Sedangkan printPegawai() di class Dosen dan
NonDosen, ada perbedaan yaitu selain menampilkan semua atribut pegawai juga dan gaji pokok, juga
akan menampilkan nilai tunjangan dan total gajinya. Perbedaan proses pada nama method yang sama
antara di superclass dan subclass ini dinamakan overriding. Method di dalam subclass yang meng-
override method dari superclass ditandai dengan #.
Coding Time…
Saatnya implementasi coding Java untuk setiap classnya berdasarkan rancangan di atas.

Class Pegawai
1 import java.time.*;
2
public class Pegawai {
3 // atribut
4 String idPegawai;
5 String nama;
6 int gol;
LocalDate tglLahir;
7
8
// constructor
9 Pegawai(String id, String nama, int gol, LocalDate tgllhr){
10 this.idPegawai = id;
11 this.nama = nama;
12 this.gol = gol;
this.tglLahir = tgllhr;
13 }
14
15 // method menghitung usia pegawai
16 int hitungUsia(){
17 // mendapatkan tanggal hari ini
18 LocalDate today = LocalDate.now();
// hitung selisih tgl lahir dan tgl hari ini
19 Period selisih = Period.between(this.tglLahir, today);
20 return selisih.getYears();
21 }
22
23 // hitung gaji pokok berdasarkan golongan dan usia
24 long hitungGapok(){
long gapok = 0;
25 if (this.gol == 1){
26 if (this.hitungUsia() < 40){
27 gapok = 3500000;
28 } else {
gapok = 4500000;
29 }
30 } else if (this.gol == 2){
31 if (this.hitungUsia() < 40){
32 gapok = 5000000;
33 } else {
gapok = 6000000;
34 }
35 }
36 return gapok;
37 }
38
39 // mencetak data pegawai dan gaji pokoknya
void printPegawai(){
40 System.out.println("ID Pegawai : " + this.idPegawai);
41 System.out.println("Nama Pegawai : " + this.nama);
42 System.out.println("Golongan : " + this.gol);
43 System.out.println("Tgl Lahir : " + this.tglLahir);
System.out.println("Gaji Pokok : Rp " + this.hitungGapok());
44 }
45 }
46
47
48
49
50
51
52
53
54

Manfaat dari penggunaan tipe data LocalDate untuk mendeklarasikan tanggal lahir pegawai adalah
kemudahan dalam mencari selisih tanggal hari ini (current date) dengan tanggal lahirnya. Cukup
dengan class Period dan method between(), maka perhitungan usia pegawai dapat dengan mudah
dilakukan. Adapun method getYears() digunakan untuk mendapatkan selisih dua tanggal dalam
satuan tahun. Class LocalDate ini terdapat dalam package Java.time.
Class Dosen
1 import java.time.*;
2
3 public class Dosen extends Pegawai {
4 // atribut tambahan untuk dosen
String nidn;
5
6 // constructor
7 Dosen(String id, String nama, int gol, LocalDate tgllhr, String nidn){
8 super(id, nama, gol, tgllhr);
9 this.nidn = nidn;
}
10
11 // menghitung tunjangan pegawai dosen
12 long hitungTunjPegawai(){
13 long tunjPegawai = 1500000;
14 return tunjPegawai;
15 }
16
// menghitung tunjangan fungsional dosen
17 long hitungTunjFungsional(){
18 long tunjFungsional;
19 if (this.hitungUsia() < 40){
20 tunjFungsional = 1700000;
21 } else {
tunjFungsional = 2000000;
22 }
23
24 return tunjFungsional;
25 }
26
27 // menghitung total gaji
28 long hitungTotalGaji(){
29 long total = this.hitungGapok() + this.hitungTunjPegawai() + this.hitungTunjFu
return total;
30 }
31
32 // cetak data pegawai, rincian gaji, total gaji
33 void printPegawai(){
34 System.out.println("ID Pegawai : " + this.idPegawai);
System.out.println("Nama Pegawai : " + this.nama);
35 System.out.println("Golongan : " + this.gol);
36 System.out.println("Tgl Lahir : " + this.tglLahir);
37 System.out.println("NIDN : " + this.nidn);
38 System.out.println("Usia : " + this.hitungUsia() + " tahun");
39 System.out.println("Gaji Pokok : Rp " + this.hitungGapok());
System.out.println("Tunj Pegawai : Rp " + this.hitungTunjPegawai());
40 System.out.println("Tunj Fungsi : Rp " + this.hitungTunjFungsional());
41 System.out.println("Total Gaji : Rp " + this.hitungTotalGaji());
42 }
43 }
44
45
46
47
48
49
50

Dikarenakan Dosen merupakan subclass dari Pegawai, maka cukup dengan


menambahkan extends sehingga atribut dan method yang ada di class Pegawai diwariskan kepada
class Dosen. Adapun penambahan atribut pada class Dosen hanya pada nidn saja. Sedangkan untuk
method, penambahannya hanya pada hitungTunjPegawai(), hitungTunjFungsional(),
dan hitungTotalGaji().
Selanjutnya perhatikan di class Dosen terdapat constructor. Sesuai teori yang ada di video sebelumnya
bahwa apabila superclassnya memiliki constructor, maka subclassnya juga memiliki minimal
sebuah constructor juga yang diarahkan ke superclassnya menggunakan perintah super().
Pada constructor Dosen ini terdapat 5 argumen, 4 diantaranya digunakan untuk diarahkan
ke constructor superclass, sedangkan yang satu (nidn) diassign ke dalam atribut nidn.
Untuk method printPegawai() di dalam class Dosen meng-override
method printPegawai() yang ada di superclassnya disebabkan perbedaan output yang akan
ditampilkan.
Class NonDosen
1 import java.time.*;
2
3 public class NonDosen extends Pegawai {
4
// constructor
5 NonDosen(String id, String nama, int gol, LocalDate tgllhr){
6 super(id, nama, gol, tgllhr);
7 }
8
9 // menghitung tunjangan pegawai nondosen
10 long hitungTunjPegawai(){
11 long tunjPegawai = 1000000;
return tunjPegawai;
12 }
13
14 // menghitung total gaji
15 long hitungTotalGaji(){
16 long total = this.hitungGapok() + this.hitungTunjPegawai();
return total;
17 }
18
19 // cetak data pegawai, rincian gaji, total gaji
20 void printPegawai(){
21 System.out.println("ID Pegawai : " + this.idPegawai);
22 System.out.println("Nama Pegawai : " + this.nama);
System.out.println("Golongan : " + this.gol);
23 System.out.println("Tgl Lahir : " + this.tglLahir);
24 System.out.println("Usia : " + this.hitungUsia() + " tahun");
25 System.out.println("Gaji Pokok : Rp " + this.hitungGapok());
26 System.out.println("Tunj Pegawai : Rp " + this.hitungTunjPegawai());
27 System.out.println("Total Gaji : Rp " + this.hitungTotalGaji());
}
28 }
29
30
31
32
33

Class NonDosen ini juga merupakan subclass dari Pegawai, sehingga class ini juga wajib
memiliki constructor yang argumennya diarahkan ke constructor superclassnya. Kebetulan argumen
dari constructor class NonDosen sama dengan superclassnya.
Untuk atribut class NonDosen tidak ada tambahan baru, sehingga semua atribut dari class ini
merupakan inherit (warisan) dari class Pegawai. Method tambahannya
adalah hitungTunjPegawai() dan hitungTotalGaji().
Adapun method printPegawai() juga meng-override method yang sama pada superclassnya
karena diinginkan perbedaan proses tampilan.
Terakhir, kita buat main class nya yang di dalamnya terdapat beberapa instansiasi obyek-obyek dari
class yang sudah dibuat.
import java.time.*;
1
2 public class ProjectSIAKAD {
3
4 public static void main(String[] args) {
5 // contoh obyek data pegawai
6 Pegawai p1 = new Pegawai("P01", "Rosihan Ari", 2, LocalDate.of(1979, 9, 1));
7 p1.printPegawai();
8
// contoh obyek data pegawai dosen
9 Dosen p2 = new Dosen("P02", "Dwi Amalia Fitriani", 1, LocalDate.of(1979, 9, 17
10 p2.printPegawai();
11
12 // contoh obyek data pegawai nondosen
13 NonDosen p3 = new NonDosen("P03", "Faza Fauzan K", 1, LocalDate.of(2008, 1, 25
p3.printPegawai();
14 }
15
16 }
17
18
19

Dalam contoh di atas, dibuat 3 buah obyek dari class yang berbeda. Apabila dijalankan maka akan
muncul tampilan berikut ini.
ID Pegawai : P01
Nama Pegawai : Rosihan Ari
Golongan : 2
Tgl Lahir : 1979-09-01
Usia : 41 tahun
Gaji Pokok : Rp 6000000

ID Pegawai : P02
Nama Pegawai : Dwi Amalia Fitriani
Golongan : 1
Tgl Lahir : 1979-09-17
NIDN : 8888
Usia : 41 tahun
Gaji Pokok : Rp 4500000
Tunj Pegawai : Rp 1500000
Tunj Fungsi : Rp 2000000
Total Gaji : Rp 8000000

ID Pegawai : P03
Nama Pegawai : Faza Fauzan K
Golongan : 1
Tgl Lahir : 2008-01-25
Usia : 12 tahun
Gaji Pokok : Rp 3500000
Tunj Pegawai : Rp 1000000
Total Gaji : Rp 4500000

Anda mungkin juga menyukai