BAB 6 - Pemrograman Lanjut / PBO : INHERITANCE

(1)

LAPORAN PRAKTIKUM

PEMROGRAMAN BERORIENTASI OBJEK

FAKULTAS ILMU KOMPUTER

UNIVERSITAS BRAWIJAYA

BAB

: INHERITANCE

NAMA

: MOH. ARIF ANDRIAN

NIM

: 156150600111002

TANGGAL

: 27/04/2016

ASISTEN

: - REZA SAPURTA

- REZKY DERMAWAN

A. DEFINISI MASALAH

Buatlah class Employe yang d-inherit oleh class Manager, Pegawai tetap, Pegawai tidak tetap. Setelah itu program akan meminta user untuk menginputkan nama, idKerja, jabatan Employe, mempunyai istri atau tidak, mempunyai anak atau tidak dan memasukkan tahun masuk kerja. Ketentuan untuk mengerjakan soal ini adalah sebagai berikut :

a. Berlaku untuk semua jabatan (kecuali non PNS)

- Jika masa kerja di bawah 5 tahun maka tidak mendapatkan bonus dan tidak mendapatkan tunjangan (sama dengan Employe).

- Jika masa kerja di antara 6-10 tahun maka mendapatkan bonus 0.05 dari lama kerja dan tidak mendapatkan tunjangan.

- Jika masa kerja di atas 10 tahun maka mendapatkan bonus 0.1 dari lama kerja dan mendapatkan tunjangan 0.1 dari lama kerja.

- Jika mempunyai istri maka akan mendapatkan tunjangan 0.1 dari total gaji yang didapat (gaji+lama kerja+tunjangan) jika tidak maka tunjangan istri 0 rupiah.

- Jika mempunyai anak maka mendapatkan tunjangan anak sebesar 0.15 dari jumlah gaji yang didapatkan (gaji+lama kerja+tunjangan), tunjangan anak hanya diberikan sampai anak ketiga saja.

b. Berlaku untuk Manager saja

- Untuk manager selain mendapatkan bonus kerja dan tunjangan, pada manager mendapatkan tunjangan jabatan sebesar 0.1 dari jumlah gaji (gaji+lama kerja+tunjangan).

c. Berlaku untuk pegawai tidak tetap

- Gaji yang didapatkan adalah sama dengan gaji Employe, namun terdapat gaji lembur. Untuk mendapatkan gaji lembur, pegawai non PNS harus bekerja lebih dari 10 jam dengan mendapatkan gaji lembur sebesar 10.000 perjamnya. Namun jika di bawah 10 jam maka tidak akan mendapatkan gaji lembur. Untuk mengerjakan soal ini gunakan test case sebanyak 1 Manager, 10 Pegawai tetap dan 5 Pegawai tidak tetap yang mencakup seluruh ketentuan yang ada.

B. SOURCE CODE

Employee.java 1

2 3 4

package Praktikum6; public class Employee {

public String nama, jabatan, idKerja, istri; int thnKerja, anak;


(2)

5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6

static double gaji, bonus;

public Employee(String nama, String jabatan, String idKerja, String istri, int anak, int thn) {

this.nama = nama;

this.jabatan = jabatan; this.idKerja = idKerja; this.istri = istri; this.anak = anak; thnKerja = thn; }

public String getNama() { return nama;

}

public String getJabatan() { return jabatan;

}

public String getIdKerja() { return idKerja;

}

public double getGaji() { return gaji; } } Managerr.java 1 2 3 4 5 6 7 8 package Praktikum6;

public class Managerr extends Employee {

public Managerr(String nama, String jabatan, String idKerja, String istri, int anak, int thn) {

super(nama, jabatan, idKerja, istri, anak, thn); gaji = 5000000;

}

public void setBonus(int thn, String istri, int anak) { if (thn < 11) {


(3)

9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8

gaji += (gaji * (0.05 / 100)); } else {

gaji += (gaji * (0.1 / 100)) + (gaji * (0.1 / 100)); }

if (istri.equalsIgnoreCase("kawin") && anak == 0) { gaji += (gaji * (0.1 / 100)) + (gaji * (0.1 / 100)); } else if (istri.equalsIgnoreCase("kawin") && anak < 4){ gaji += (gaji * (0.1 / 100)) + ((gaji * (0.15 / 100)) * anak) + (gaji * (0.1 / 100));

} else if (istri.equalsIgnoreCase("kawin") && anak > 3){ gaji += (gaji * (0.1 / 100)) + ((gaji * (0.15 / 100)) * 3) + (gaji * (0.1 / 100));

} else if (istri.equalsIgnoreCase("cerai") && anak < 4){ gaji += ((gaji * (0.15 / 100)) * anak) + (gaji * (0.1 / 100));

} else if (istri.equalsIgnoreCase("cerai") && anak > 3){ gaji += ((gaji * (0.15 / 100)) * 3) + (gaji * (0.1 / 100));

} else {

gaji += (gaji * (0.1 / 100)); } } } PegawaiTetap.java 1 2 3 4 5 package Praktikum6;

public class PegawaiTetap extends Employee {

public PegawaiTetap(String nama, String jabatan, String idKerja, String istri, int anak, int thn) {

super(nama, jabatan, idKerja, istri, anak, thn); gaji = 3000000;


(4)

6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 }

public void setBonus(int thn, String istri, int anak) { if (thn < 11) {

gaji += (gaji * (0.05 / 100)); } else {

gaji += (gaji * (0.1 / 100)) + (gaji * (0.1 / 100)); }

if (istri.equalsIgnoreCase("kawin") && anak == 0) { gaji += (gaji * (0.1 / 100));

} else if (istri.equalsIgnoreCase("kawin") && anak < 4){ gaji += (gaji * (0.1 / 100)) + ((gaji * (0.15 / 100)) * anak);

} else if (istri.equalsIgnoreCase("kawin") && anak > 3){ gaji += (gaji * (0.1 / 100)) + ((gaji * (0.15 / 100)) * 3);

} else if (istri.equalsIgnoreCase("cerai") && anak < 4){ gaji += ((gaji * (0.15 / 100)) * anak);

} else if (istri.equalsIgnoreCase("cerai") && anak > 3){ gaji += ((gaji * (0.15 / 100)) * 3);

} else {

gaji += 0; } } } PegawaiTidakTetap.java 1 2 3 4 package Praktikum6;

public class PegawaiTidakTetap extends Employee {

public PegawaiTidakTetap(String nama, String jabatan, String idKerja, String istri, int anak, int thn) {


(5)

5 6 7 8 9 1 0

gaji = 1500000; }

public void setBonus(int jam) {

gaji += ((10000 * (jam - 10)) * 30); } } Main.java 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 package Praktikum6; import java.io.*; public class Main {

static String daftar = "\n| ID Kerja\t| Nama Pegawai\t\t| Jabatan\t\t| Gaji\t\t|\n" +"|

================================================================ ===============|\n";

public static void main(String[] args) throws IOException { BufferedReader in = new BufferedReader(new

InputStreamReader(System.in));

for (int i = 0; i < 16; i++) {

System.out.println("\nData Pegawai ke-" + (i + 1)); System.out.print("ID Kerja : ");

String id = in.readLine();

System.out.print("Nama Pegawai : "); String nama = in.readLine();

System.out.print("Jabatan : "); String jabatan = in.readLine();

System.out.print("Tahun Masuk : "); int thn = Integer.parseInt(in.readLine()); System.out.print("Lama Jam Kerja : "); int jam = Integer.parseInt(in.readLine()); System.out.println("Status Pernikahan"); System.out.print("(cerai/kawin/belum) : "); String status = in.readLine();

System.out.print("Jumlah Anak : "); int anak = Integer.parseInt(in.readLine()); if (jabatan.equalsIgnoreCase("Manager")) {

Managerr bos = new Managerr(nama, jabatan, id, status, anak, thn);

bos.setBonus(thn, status, anak);

daftar += "| " + bos.getIdKerja() + "\t\t| " + bos.getNama() + "\t\t| " + bos.getJabatan() + "\t\t| Rp. " + bos.getGaji() + "\t|\n";

} else if (jabatan.equalsIgnoreCase("Pegawai Tetap")) {

PegawaiTetap tetap = new PegawaiTetap(nama, jabatan, id, status, anak, thn);

tetap.setBonus(thn, status, anak);

daftar += "| " + tetap.getIdKerja() + "\t\t| " + tetap.getNama() + "\t\t| " + tetap.getJabatan() + "\t\t| Rp. " +


(6)

2 5 2 6 2 7 2 8 2 9

3 0 3 1 3 2 3 3

3 4 3 5 3 6 3 7

3 8 3 9 4 0 4 1 4 2 4 3

tetap.getGaji() + "\t|\n";

} else if (jabatan.equalsIgnoreCase("Pegawai Tidak Tetap")) {

PegawaiTidakTetap tidak = new

PegawaiTidakTetap(nama, jabatan, id, status, anak, thn); tidak.setBonus(jam);

daftar += "| " + tidak.getIdKerja() + "\t\t| " + tidak.getNama() + "\t\t| " + tidak.getJabatan() + "\t| Rp. " + tidak.getGaji() + "\t|\n";

} }

System.out.println(daftar);

System.out.println("\nMOH ARIF ANDRIAN + INDAH PUSPITASARI");

} }


(7)

C. PEMBAHASAN

Employee.java 1

2 3

4 5

6 7

8 9 10 11 12

13 14 15 16 17 18 19 20 21 22 23 24 25 26

Package dimana file java disimpan.

Deklarasi class Employee, merupakan kelas yang akan menjadi kelas induk atau superclass.

Deklarasi variable bertipe String bernama nama, jabatan, idKerja, dan istri. Di mana variable-variable ini bisa diakses oleh class lain karena memiliki access modifier

public.

Deklarsi variable bertipe integer thnKerja dan anak. Variable ini memiliki access modifier default, sehingga mampu diakses oleh class lain.

Deklarasi variable static double gaji dan bonus, dengan keyword static, nilai kedua variable ini tidak akan berubah tanpa adanya suatu statemen yang melibatkan variable tersebut.

Deklarasi constructor dengan enam parameter, yakni String nama, String jabatan,

String idKerja, String istri, int anak, dan int thn.

Inisialisasi variable nama dengan nilai samadengan nilai parameter String nama, Pada baris ini terdapat keyword this yang berfungsi sebagai alat bantu bagi sebuah program agar program tersebut mampu menentukan manakah yang merupakan variable, sehingga tidak akan mengalami kebingungan dan program akan berjalan dengan baik.

Inisialisasi variable jabatan dengan nilai samadengan nilai parameter jabatan. Inisialisasi variable idKerja dengan nilai samadengan nilai parameter idKerja. Inisialisasi variable istri dengan nilai samadengan nilai parameter istri. Inisialisasi variable anak dengan nilai samadengan nilai parameter anak.

Inisialisasi variable thnKerja dengan nilai samadengan nilai parameter thn. Di sini terlihat perbedaan dengan inisialisasi sebelumnya, di sini tidak memerlukan keyword

this, karena antara variable dan parameter memiliki nama yang berbeda. Akhir dari deklarasi construktor.

Deklarasi accessor method String bernama getNama. Memiliki access modifier

public, sehingga mampu diakses oleh class lain. Memanggil nilai variable nama.

Akhir dari method accessor getNama.

Deklarasi accessor method String bernama getJabatan. Memiliki access modifier

public, sehingga mampu diakses oleh class lain. Memanggil nilai variable jabatan.

Akhir dari method accessor getJabatan.

Deklarasi accessor method String bernama getIdKerja. Memiliki access modifier

public, sehingga mampu diakses oleh class lain. Memanggil nilai variable idKerja.

Akhir dari method accessor getIdKerja.

Deklarasi accessor method String bernama getGaji. Memiliki access modifier public, sehingga mampu diakses oleh class lain.

Memanggil nilai variable gaji. Akhir dari method accessor getGaji.


(8)

Akhir dari deklarasi class Employee. Managerr.java

1 2 3 4

5 6 7

8 9 10 11 12 13 14 15 16 17 18 19

20 21 22 23

Package dimana file java disimpan.

Deklarasi class Managerr, class ini merupakan anak atau subclass dari superclass

Employee, ditandai dengan adanya extends.

Deklarasi constructor dengan enam parameter, yakni String nama, String jabatan,

String idKerja, String istri, int anak, dan int thn.

Dengan keyword super, subclass Manager akan memanggil constructor dari superclass terdekat, yaitu constructor Employee dengan enam parameter. Dengan menggunakan keyword super ini, semua statemen yang ada pada constructor yang dipanggil akan berjalan secara implisit, sehingga tidak diperlukan terlalu banyak code program.

Inisialisasi variable gaji dari superclass dengan nilai 5000000. Akhir deklarasi construktor.

Deklarasi method void bernama setBonus dengan terdapat tiga parameter, yakni int thn, String istri, dan int anak. Method ini digunakan untuk menghitung total gaji yang sudah diakumulasikan dengan bonus atau tunjangan.

Apabila nilai parameter thn kurang dari 11, maka...

Inisialisasi variabel gaji samdengan nilai gaji akan ditambahkan dengan nilai 0.05%

gaji itu sendiri.

Apabila kemungkinan dari baris 8 tidak terjadi, maka ...

Inisialisasi variabel gaji samdengan nilai gaji akan ditambahka dengan 0.1% gaji, kemudian ditambahkan lagi dengan nilai penambah terakhir.

Akhir dari statement kondisi. Baris kosong.

Apabila input status pernikahan (String istri) samadengan kata “Kawin”, dan tidak memiliki anak, maka ...

Inisialisasi variabel gaji samdengan nilai gaji akan ditambahkan dari nilai 0.1% +0.1% gaji, yang merupakan tunjangan untuk istri dan bonus khusus untuk manager. Apabila input status pernikahan (String istri) samadengan kata “Kawin”, dan mempunyai anak kurang dari 4 (kecuali 0), maka ...

Inisialisasi variabel gaji samdengan nilai gaji akan ditambah 0.1% gaji dari tunjangan istri, 0.1% gaji dari bonus khusus, dan 0.15% gaji dari tunjangan untuk satu anak. Apabila input status pernikahan (String istri) samadengan kata “Kawin”, dan mempunyai anak kurang dari 4 (kecuali 0), maka ...

Inisialisasi variabel gaji samdengan nilai gaji akan ditambah 0.1% gaji dari tunjangan istri, 0.1% gaji dari bonus khusus, dan 0.45% gaji dari tunjangan untuk tiga anak, karena maksimal tunjangan hanya untuk tiga anak.

Apabila input status pernikahan (String istri) samadengan kata “Cerai”, dan mempunyai anak kurang dari 4 (kecuali 0), maka ...

Inisialisasi variabel gaji samdengan nilai gaji akan ditambah 0.1% gaji dari bonus khusus, dan 0.15% gaji dari tunjangan untuk satu anak.

Apabila input status pernikahan (String istri) samadengan kata “Cerai”, dan mempunyai anak kurang dari 4 (kecuali 0), maka ...


(9)

24 25 26 27 28

khusus, dan 0.45% gaji dari tunjangan untuk tiga anak, karena maksimal tunjangan hanya untuk tiga anak.

Apabila semua kemungkina di atas tidak terjadi, maka ...

Inisialisasi variabel gaji samdengan nilai gaji hanya akan ditambahkan dengan 0.1%

gaji dari bonus khusus manager. Akhir dari statement kondisi. Akhir dari method setBonus.

Akhir dari deklarasi class Managerr. PegawaiTetap.java

1 2 3 4

5 6 7

8 9 10 11 12 13 14 15 16 17 18 19

20

Package dimana file java disimpan.

Deklarasi class PegawaiTetap, class ini merupakan anak atau subclass dari superclass

Employee, ditandai dengan adanya extends.

Deklarasi constructor dengan enam parameter, yakni String nama, String jabatan,

String idKerja, String istri, int anak, dan int thn.

Dengan keyword super, subclass Manager akan memanggil constructor dari superclass terdekat, yaitu constructor Employee dengan enam parameter. Dengan menggunakan keyword super ini, semua statemen yang ada pada constructor yang dipanggil akan berjalan secara implisit, sehingga tidak diperlukan terlalu banyak code program.

Inisialisasi variable gaji dari superclass dengan nilai 3000000. Akhir deklarasi construktor.

Deklarasi method void bernama setBonus dengan terdapat tiga parameter, yakni int thn, String istri, dan int anak. Method ini digunakan untuk menghitung total gaji yang sudah diakumulasikan dengan bonus atau tunjangan.

Apabila nilai parameter thn kurang dari 11, maka ...

Inisialisasi variabel gaji samdengan nilai gaji akan ditambahkan dengan nilai 0.05%

gaji itu sendiri.

Apabila kemungkinan dari baris 8 tidak terjadi, maka ...

Inisialisasi variabel gaji samdengan nilai gaji akan ditambahka dengan 0.1% gaji, kemudian ditambahkan lagi dengan nilai penambah terakhir.

Akhir dari ststement kondisi. Baris kosong.

Apabila input status pernikahan (String istri) samadengan kata “Kawin”, dan tidak memiliki anak, maka ...

Inisialisasi variabel gaji samdengan nilai gaji akan ditambahkan dari nilai 0.1% gaji, yang merupakan tunjangan untuk istri.

Apabila input status pernikahan (String istri) samadengan kata “Kawin”, dan mempunyai anak kurang dari 4 (kecuali 0), maka ...

Inisialisasi variabel gaji samdengan nilai gaji akan ditambah 0.1% gaji dari tunjangan istri, dan 0.15% gaji dari tunjangan untuk satu anak.

Apabila input status pernikahan (String istri) samadengan kata “Kawin”, dan mempunyai anak kurang dari 4 (kecuali 0), maka ...

Inisialisasi variabel gaji samdengan nilai gaji akan ditambah 0.1% gaji dari tunjangan istri, dan 0.45% gaji dari tunjangan untuk tiga anak, karena maksimal tunjangan hanya untuk tiga anak.


(10)

21 22 23 24 25 26 27 28

Apabila input status pernikahan (String istri) samadengan kata “Cerai”, dan mempunyai anak kurang dari 4 (kecuali 0), maka ...

Inisialisasi variabel gaji samdengan nilai gaji akan ditambah 0.15% gaji dari tunjangan untuk satu anak.

Apabila input status pernikahan (String istri) samadengan kata “Cerai”, dan mempunyai anak kurang dari 4 (kecuali 0), maka ...

Inisialisasi variabel gaji samdengan nilai gaji akan ditambah 0.45% gaji dari tunjangan untuk tiga anak, karena maksimal tunjangan hanya untuk tiga anak.

Apabila semua kemungkina di atas tidak terjadi, maka ...

Inisialisasi variabel gaji samdengan nilai gaji tidak akan mengalami perubahan. Akhir dari statement kondisi.

Akhir deklarasi method setBonus. Akhir dari deklarasi class PegawaiTetap. PegawaiTidakTetap.java

1 2 3 4

5 6 7

8

9 10

Package dimana file java disimpan.

Deklarasi class PegawaiTidakTetap, class ini merupakan anak atau subclass dari superclass Employee, ditandai dengan adanya extends.

Deklarasi constructor dengan enam parameter, yakni String nama, String jabatan,

String idKerja, String istri, int anak, dan int thn.

Dengan keyword super, subclass Manager akan memanggil constructor dari superclass terdekat, yaitu constructor Employee dengan enam parameter. Dengan menggunakan keyword super ini, semua statemen yang ada pada constructor yang dipanggil akan berjalan secara implisit, sehingga tidak diperlukan terlalu banyak code program.

Inisialisasi variable gaji dari superclass dengan nilai 1500000. Akhir deklarasi construktor.

Deklarasi method void bernama setBonus dengan terdapat satu parameter, yakni int jam. Method ini digunakan untuk menghitung total gaji yang didapat pegawai tidak tetap yang ditentukan melalui lama jam lembur.

Inisialisasi variabel gaji samdengan nilai gaji yang ditambah Rp. 10000 tiap jam lemburnya, yang kemudian total jam lembur dikalikan 30, sesuai jumlah hari dalam sebulan.

Akhir dari deklarasi method setBonus. Akhir deklarasi class PegawaiTidakTetap. Main.java

1 2 3 4 6 7

Package dimana file java disimpan.

Program mengimport dari package java.io, sehingga kita bisa menggunakan class-class yang ada di dalamnya, misal saja, BufferedReader.

Deklarasi class Main, merupakan class utama.

Deklarasi dan inisialisasi variable static daftar yang berisi daftar nama dan gaji pegawai.

Deklarasi method void main, dengan throws IOException agar BufferedReader dapat berfungsi.


(11)

8 9 10 11 12 13 14 15 16 17 18 19 20 22 23 24 26 27 28 29 30 31 32 33 34 35 36 37

Kondisi perulangan yang dimulai dari i = 0, perulangan akan berhenti saat i mencapai 15 karena di tiap perulangan i akan ditambah 1.

Menampilkan sebuah output “Data Pegawai ke” yang diikuti nilai i+1 yang diikuti sebuah baris baru.

Menampilkan sebuah output “ID Kerja : ” tanpa baris baru.

Method memanggil in.readLine(), mendapatkan input dari user dan memberikan nilai String yang akan disimpan pada variable id.

Menampilkan sebuah output “Nama Pegawai : ” tanpa baris baru.

Method memanggil in.readLine(), mendapatkan input dari user dan memberikan nilai String yang akan disimpan pada variable nama.

Menampilkan sebuah output “Jabatan : ” tanpa baris baru.

Method memanggil in.readLine(), mendapatkan input dari user dan memberikan nilai String yang akan disimpan pada variable jabatan.

Menampilkan sebuah output “Tahun Masuk : ” tanpa baris baru.

Method memanggil in.readLine(), mendapatkan input dari user dan memberikan nilai String yang akan diubah ke nilai integer, kemudian disimpan pada variable thn.

Menampilkan sebuah output “Lama Jam Kerja : ” tanpa baris baru.

Method memanggil in.readLine(), mendapatkan input dari user dan memberikan nilai String yang akan diubah ke nilai integer, kemudian disimpan pada variable jam.

Menampilkan sebuah output “Status Pernikahan : ” tanpa baris baru.

Method memanggil in.readLine(), mendapatkan input dari user dan memberikan nilai String yang akan disimpan pada variable status.

Menampilkan sebuah output “Jumlah Anak : ” tanpa baris baru.

Method memanggil in.readLine(), mendapatkan input dari user dan memberikan nilai String yang akan diubah ke nilai integer, kemudian disimpan pada variable anak.

Apabila input jabatan (Stringjabatan) samadengan “Manager”, maka ...

Membuat objek bernama bos dari class Manager dengan 6 parameter, yaitu nama, jabatan, id, status, anak, dan thn.

Method main akan memanggil method setBonus dari class Manager dengan parameter thn, status, dan anak.

Proses perhitungan nilai daftar yang ditambahkan nilai ID, nama, jabatan, dan gaji pegawai.

Apabila input jabatan (Stringjabatan) samadengan “Pegawai Tetap”,

Membuat objek bernama tetap dari class Manager dengan 6 parameter, yaitu nama, jabatan, id, status, anak, dan thn.

Method main akan memanggil method setBonus dari class PegawaiTetap dengan parameter thn, status, dan anak.

Proses perhitungan nilai daftar yang ditambahkan nilai ID, nama, jabatan, dan gaji pegawai.

Apabila input jabatan (Stringjabatan) samadengan “Pegawai Tidak Tetap”,

Membuat objek bernama tidak dari class Manager dengan 6 parameter, yaitu nama, jabatan, id, status, anak, dan thn.

Method main akan memanggil method setBonus dari class PegawaiTidakTetap dengan parameter jam.

Proses perhitungan nilai daftar yang ditambahkan nilai ID, nama, jabatan, dan gaji pegawai.


(12)

38 39 40 41 42 43

Akhir dari sttement kondisi. Akhir dari perulangan.

Menampilkan output dari nilai String daftar yang berisi daftar gaji pegawai. Menampilkan anggota kelompok.

Akhir dari deklarasi method main. Akhit deklrasi class Main.

D. SCREENSHOT PROGRAM

Input Manager.


(13)

(14)

(15)

Tampilan Output.

E. PRAKTIKUM

Data dan Analisis hasil percobaan

1. Jalankan code program di atas dan benahi jika menemukan kesalahan!

Jawaban :

Dalam code program tersebut tidak ditemukan kesalahan, hanya saja terdapat beberapa nilai atribut yang tidak ditampilkan pada output. Kemudian juga terdapat method yang tidak berfungsi (tidak digunakan).

2. Bagaimana cara kontruktor pada subclass memanggil konstruktor di superclass nya? Apakah hal itu perlu dilakukan? Sertakan alasan anda !

Jawaban :

Subclass dapat memanggil constructor dari superclass terdekat dengan menggunakan keyword super. Pemanggil constructor super dalam constructor dari subclass akan menghasilkan eksekusi dari superclass constructor yang bersangkutan, berdasar dari argumen sebelumnya. Terdapat salah satu contoh pemanggilan constructor dalam program ini, berikut contohnya :

Pada code di atas, subclass Manager memanggil constructor pada class Employe yang merupakan superclass, penggunaan keyword super untuk memanggil


(16)

constructor dari superclass juga diperlukan dengan alasan efisiensi. Dengan begitu, kita tidak perlu membuat code program sebanyak yang ada pada superclass Employe (tidak perlu membuat statemen dalam constructor yang dipanggil). Kemudian saat ingin menampilkan nilai dari suatu atribut (baik atribut dari superclass Employe ataupun subclass Manager) hanya diperlukan accessor method (dari superclass) untuk menampilkan hasil nilai yang berbeda. 3. Tambahkan constructor pada class Employe dengan parameter String name!

amati perubahan apa yang terjadi, jelaskan Jawaban anda!

Jawaban :

Dengan menambahkan constuctor pada class Employe dengan parameter String name, hal ini tidak akan mempengaruhi/mengubah program ini. Ini terjadi karena constructor ini tidak dipanggil, ditambah lagi constructor ini tidak terdapat statement di dalamnya.

4. Pada Class Manager baris ke 7, setelah variable day tambahkan variable bonus! Amati apa yang terjadi dan mengapa demikian?

Jawaban :

Apabila ditambahkan variable bonus, akan terjadi/muncul pesan error.

Error terjadi karena dalam hal ini subclass memanggil constructor dari superclass, sehingga untuk menjadikannya berhasil, urutan tipe data dalam parameter super juga harus sama dengan urutan parameter yang ada pada constructor di superclass.

Pada gambar di atas sudah terlihat jelas, di mana parameter mulai String name

hingga int day (total terdapat lima parameter), serta diketahui pula tidak ada variable bonus dalam parameter tersebut.

5. Untuk apa digunakan keyword this pada class manager dan Employe? Hapus keyword this dan amati apa yang terjadi?

Jawaban :

Keyword this digunakan untuk pembeda antara atribut dengan parameter yang ada pada constructor atau method. Sehingga tidak terjadi kekacauan atau tabrakan karena nama yang sama antara atribut dengan parameter.


(17)

Dengan dihilangkannya keyword this, akan memberikan/memunculkan tanda peringatan berupa gambar “pentung” (lihat baris 12), hal ini terlihat tidak penting, namun saat program dijalankan akan menghasilkan output sebagai berikut :

Dengan hilangnya keyword this, semua nilai akan bernilai null atau nol. Hal ini terjadi karena program kebingungan untuk menentukan mana yang atribut class, mana yang merupakan parameter.

6. Tambahkan constructor pada class Employe dengan parameter Bertipe data string bernama name yang nantinya bila constructor ini akan dipanggil akan menginisialisasi variable name! Amati perubahannya pada class anak dan jelaskan! Benahi bila terjadi kesalahan!

Jawaban :

Pada soal nomor enam ini kasusnya hampir mirip dengan nomor tiga.

Agar parameter String name dapat menginisialisasi variable name saat constructor dipanggil, maka diperlukan sebuah penginisialisasian dalam constructor, apabila nama variable dan parameter sama, maka perlu diimbuhkan “this.” di depan variable name.

Kemudian tambahkan code seperti baris 8 untuk membuat objek baru sebagai percobaan, namun di sini baris ini tidak akan berpengaruh karena tidak ada tindak lanjut lagi, seperti memberikan gaji (jadi, apabila diberikan output untuk staff baru ini, nilai gajinya adalah 0.0). Untuk subclass Manager juga tidak terpengaruh oleh hal tersebut, sehingga subclass Manager tidak akan mengalami perubahan sedikitpun.


(18)

7. Pada bab sebelumnya anda telah belajar mengenai konsep encapsulation, jelaskan mengapa pada super class menggunakan modifier protected? Apa yang terjadi jika modifier anda ubah menjadi private atau public? Jelaskan !

Jawaban :

Untuk sebuah superclass pastinya menggunakan modifier public, karena superclass akan menjadi induk yang nantinya, data-data yang ada pada superclass dapat digunakan oleh subclass.

Sementara itu, untuk atribut menggunakan modifier protected agar subclass dapat mengakses atribut dari superclass, begitu halnya dengan public, subclass juga mampu mengakses atribut dari superclass. Apabila modifiernya diubah menjadi private, subclass tidak akan mampu mengakses atribut dari superclass, sehingga program akan error. Jadi, untuk dapat mengakses nilai atribut superclass yang bermodifier private, diperlukan sebuah instansiasi dan sebuah getter method, dengan code <namaObjek>.<namaGetterMethod>. Jadi, apabila menggunakan modifier public atau protected, dapat dengan <namaObjek><namaAtribut>, jadi tidak memerlukan perantara getter method.

8. Ubahlah access modifier method pada kelas Employe menjadi : a. Private

b. Protected

Amati perubahan apa yang terjadi? Jelaskan Jawabanan anda dengan detail!

Jawaban :

Apabila access modifier method pada class Employe diubah menjadi private, semua perintah atau kode yang melibatkan (memanggil) method dari class Employe akan mengalami error, karena class lain tidak mampu mengakses method dari class Employe.

Apabila access modifier diubah menjadi protected, tidak akan muncul error pada class yang memanggil method-method dari class Employe, karena dengan modifier protected, subclass mampu mengakses method dari subclass, yaitu class Employe.

F.

KESIMPULAN

Inheritance adalah suatu pewarisan sifat atau method yang ada pada class induk (superclass) kepada semua subclass-nya. Dengan hanya menuliskan code method atau atribut, maka mereka akan dapat digunakan dalam subclass-nya. Subclass hanya perlu mengimplementasikan perbedaan antara dirinya dengan superclass. Untuk dapat membuat suatu class (subclass), yang diperlukan adalah keyword extends.

Misalkan terdapat class Gadget, pada class Gadget ini terdapat atribut, method, maupun constructor. Sementara itu, terdapat pula class Smartphone dan class Smartwatch. Untuk menerapkan konsep inheritance, tinggal kita tambahkan keyword extends yang diikuti nama class induk, misal ...


(19)

public class Smartphone extends Gadget { //statement

{

Dengan begitu, class Smartphone sudah menjadi subclass dari class Gadget, sehingga class Smartphone mampu mengakses atribut atau method dari class Gadget secara menyeluruh.

Subclass dapat memanggil constructor dari superclass terdekat. Untuk dapat melakukannya, subclass membutuhkan keyword super yang dapat digunakan untuk memanggil constructor yang bersangkutan dan akan menjalankan statement sesuai yang ada pada superclass, dengan begitu tidak diperlukan lagi sebuah code program yang cukup panjang serta memiliki struktur yang sama dengan constructor di class lain. Keyword super dapat digunakan apabila memiliki urutan tipe data dalam parameter yang sesuai dengan urutan tipe data dalam parameter di constructor dari superclass. Keyword super hanya dapat digunakan di awal statement dalam sebuah constructor, dan keyword ini hanya dapat digunakan dalam definisi constructor. Pemakaian lain dari super adalah dapat digunakan sebagi penunjuk (seperti this).


(1)

(2)

Tampilan Output.

E. PRAKTIKUM

Data dan Analisis hasil percobaan

1. Jalankan code program di atas dan benahi jika menemukan kesalahan!

Jawaban :

Dalam code program tersebut tidak ditemukan kesalahan, hanya saja terdapat beberapa nilai atribut yang tidak ditampilkan pada output. Kemudian juga terdapat method yang tidak berfungsi (tidak digunakan).

2. Bagaimana cara kontruktor pada subclass memanggil konstruktor di superclass nya? Apakah hal itu perlu dilakukan? Sertakan alasan anda !

Jawaban :

Subclass dapat memanggil constructor dari superclass terdekat dengan menggunakan keyword super. Pemanggil constructor super dalam constructor dari subclass akan menghasilkan eksekusi dari superclass constructor yang bersangkutan, berdasar dari argumen sebelumnya. Terdapat salah satu contoh pemanggilan constructor dalam program ini, berikut contohnya :

Pada code di atas, subclass Manager memanggil constructor pada class Employe yang merupakan superclass, penggunaan keyword super untuk memanggil


(3)

constructor dari superclass juga diperlukan dengan alasan efisiensi. Dengan begitu, kita tidak perlu membuat code program sebanyak yang ada pada superclass Employe (tidak perlu membuat statemen dalam constructor yang dipanggil). Kemudian saat ingin menampilkan nilai dari suatu atribut (baik atribut dari superclass Employe ataupun subclass Manager) hanya diperlukan accessor method (dari superclass) untuk menampilkan hasil nilai yang berbeda. 3. Tambahkan constructor pada class Employe dengan parameter String name!

amati perubahan apa yang terjadi, jelaskan Jawaban anda!

Jawaban :

Dengan menambahkan constuctor pada class Employe dengan parameter String name, hal ini tidak akan mempengaruhi/mengubah program ini. Ini terjadi karena constructor ini tidak dipanggil, ditambah lagi constructor ini tidak terdapat statement di dalamnya.

4. Pada Class Manager baris ke 7, setelah variable day tambahkan variable bonus! Amati apa yang terjadi dan mengapa demikian?

Jawaban :

Apabila ditambahkan variable bonus, akan terjadi/muncul pesan error.

Error terjadi karena dalam hal ini subclass memanggil constructor dari superclass, sehingga untuk menjadikannya berhasil, urutan tipe data dalam parameter super juga harus sama dengan urutan parameter yang ada pada constructor di superclass.

Pada gambar di atas sudah terlihat jelas, di mana parameter mulai String name

hingga int day (total terdapat lima parameter), serta diketahui pula tidak ada variable bonus dalam parameter tersebut.

5. Untuk apa digunakan keyword this pada class manager dan Employe? Hapus keyword this dan amati apa yang terjadi?

Jawaban :

Keyword this digunakan untuk pembeda antara atribut dengan parameter yang ada pada constructor atau method. Sehingga tidak terjadi kekacauan atau tabrakan karena nama yang sama antara atribut dengan parameter.


(4)

Dengan dihilangkannya keyword this, akan memberikan/memunculkan tanda peringatan berupa gambar “pentung” (lihat baris 12), hal ini terlihat tidak penting, namun saat program dijalankan akan menghasilkan output sebagai berikut :

Dengan hilangnya keyword this, semua nilai akan bernilai null atau nol. Hal ini terjadi karena program kebingungan untuk menentukan mana yang atribut class, mana yang merupakan parameter.

6. Tambahkan constructor pada class Employe dengan parameter Bertipe data string bernama name yang nantinya bila constructor ini akan dipanggil akan menginisialisasi variable name! Amati perubahannya pada class anak dan jelaskan! Benahi bila terjadi kesalahan!

Jawaban :

Pada soal nomor enam ini kasusnya hampir mirip dengan nomor tiga.

Agar parameter String name dapat menginisialisasi variable name saat constructor dipanggil, maka diperlukan sebuah penginisialisasian dalam constructor, apabila nama variable dan parameter sama, maka perlu diimbuhkan “this.” di depan variable name.

Kemudian tambahkan code seperti baris 8 untuk membuat objek baru sebagai percobaan, namun di sini baris ini tidak akan berpengaruh karena tidak ada tindak lanjut lagi, seperti memberikan gaji (jadi, apabila diberikan output untuk staff baru ini, nilai gajinya adalah 0.0). Untuk subclass Manager juga tidak terpengaruh oleh hal tersebut, sehingga subclass Manager tidak akan mengalami perubahan sedikitpun.


(5)

7. Pada bab sebelumnya anda telah belajar mengenai konsep encapsulation, jelaskan mengapa pada super class menggunakan modifier protected? Apa yang terjadi jika modifier anda ubah menjadi private atau public? Jelaskan !

Jawaban :

Untuk sebuah superclass pastinya menggunakan modifier public, karena superclass akan menjadi induk yang nantinya, data-data yang ada pada superclass dapat digunakan oleh subclass.

Sementara itu, untuk atribut menggunakan modifier protected agar subclass dapat mengakses atribut dari superclass, begitu halnya dengan public, subclass juga mampu mengakses atribut dari superclass. Apabila modifiernya diubah menjadi private, subclass tidak akan mampu mengakses atribut dari superclass, sehingga program akan error. Jadi, untuk dapat mengakses nilai atribut superclass yang bermodifier private, diperlukan sebuah instansiasi dan sebuah getter method, dengan code <namaObjek>.<namaGetterMethod>. Jadi, apabila menggunakan modifier public atau protected, dapat dengan <namaObjek><namaAtribut>, jadi tidak memerlukan perantara getter method.

8. Ubahlah access modifier method pada kelas Employe menjadi : a. Private

b. Protected

Amati perubahan apa yang terjadi? Jelaskan Jawabanan anda dengan detail!

Jawaban :

Apabila access modifier method pada class Employe diubah menjadi private, semua perintah atau kode yang melibatkan (memanggil) method dari class Employe akan mengalami error, karena class lain tidak mampu mengakses method dari class Employe.

Apabila access modifier diubah menjadi protected, tidak akan muncul error pada class yang memanggil method-method dari class Employe, karena dengan modifier protected, subclass mampu mengakses method dari subclass, yaitu class Employe.

F.

KESIMPULAN

Inheritance adalah suatu pewarisan sifat atau method yang ada pada class induk (superclass) kepada semua subclass-nya. Dengan hanya menuliskan code method atau atribut, maka mereka akan dapat digunakan dalam subclass-nya. Subclass hanya perlu mengimplementasikan perbedaan antara dirinya dengan superclass. Untuk dapat membuat suatu class (subclass), yang diperlukan adalah keyword extends.

Misalkan terdapat class Gadget, pada class Gadget ini terdapat atribut, method, maupun constructor. Sementara itu, terdapat pula class Smartphone dan class Smartwatch. Untuk menerapkan konsep inheritance, tinggal kita tambahkan keyword extends yang diikuti nama class induk, misal ...


(6)

public class Smartphone extends Gadget { //statement

{

Dengan begitu, class Smartphone sudah menjadi subclass dari class Gadget, sehingga class Smartphone mampu mengakses atribut atau method dari class Gadget secara menyeluruh.

Subclass dapat memanggil constructor dari superclass terdekat. Untuk dapat melakukannya, subclass membutuhkan keyword super yang dapat digunakan untuk memanggil constructor yang bersangkutan dan akan menjalankan statement sesuai yang ada pada superclass, dengan begitu tidak diperlukan lagi sebuah code program yang cukup panjang serta memiliki struktur yang sama dengan constructor di class lain. Keyword super dapat digunakan apabila memiliki urutan tipe data dalam parameter yang sesuai dengan urutan tipe data dalam parameter di constructor dari superclass. Keyword super hanya dapat digunakan di awal statement dalam sebuah constructor, dan keyword ini hanya dapat digunakan dalam definisi constructor. Pemakaian lain dari super adalah dapat digunakan sebagi penunjuk (seperti this).