Konsep Oop Abstract Class


Abstract Class ialah kelas yang tidak sanggup diinstansiasi. Method dalam kelas abstract tidak berisi instruksi implementasi aktivitas namun hanya dideklarasikan saja. Nantinya, method-method tersebut di override oleh sub-class nya.
 Contohnya :

public abstract void iniMethod();

Deklarasi method ini disebut dengan prototype method.
Java mempunyai aturan-aturan dalam penggunaan method abstract dan abstract class sebagai berikut :
- Class yang di dalamnya terdapat abstract method harus dideklarasikan sebagai abstract class.
- Abstract class tidak sanggup diinstansi, tetapi harus di turunkan
- Abstract class tidak sanggup diinstansi (menjadi objek dari class abstract), tetapi kita sanggup mendeklarasikan suatu variable yang bertipe abstract class dan menciptakan instansi dari variabel tersebut yang bertipe class turunan dari abstract class tersebut (teknik polymorphism).
- Sebuah class sanggup dideklarasikan sebagai abstract class meskipun class tersebut tidak mempunyai abstract method.
- Abstract method dihentikan mempunyai body method dan demikian juga sebaliknya bahwa method yang tidak ditulis body methodnya maka harus dideklarasikan sebagai abstract method.

Jadi, fungsi abstract class tak lain ialah untuk menciptakan prototype bagi class di tingkatan paling atas dalam hierarki class dan subclass-nya yang menyediakan detail implementasi dari abstract class tersebut.
Sekarang kita akan coba mengimplementasikan konsep abstract class. Misalkan kita punya soal sebagai berikut :

CV. Maju Mundur mempunyai 40 orang pegawai, dimana ke-40 pegawainya tersebut terbagi menjadi 2 status kepegawaian, yaitu sebagian pegawai tetap dan sebagian yang lain (sisanya) ialah pegawai kontrak. Secara umum perbedaan antara keduanya ialah pegawai tetap selain mendapat honor juga mendapat pinjaman yang besarnya 200 ribu, sedangkan pegawai kontrak hanya mendapat honor saja. Dari perkara diatas, sanggup digambarkan class-class pegawai sebagai berikut :

- Class PegawaiKontrak, dengan atribut :
NoPeg : no pegawai kontrak (diinputkan)
Nama : nama pegawai (diinputkan)
MasaKontrak : usang kontrak pegawai (diinputkan)
Kehadiran : jumlah hari masuk dalam 1 bulan (diinputkan)
UangMakan : besarnya 6 ribu dikali jumlah kehadiran(tidak diinputkan)
Gaji : besarnya honor pokok yang diterima tiap bulan(diinputkan)

- Class PegawaiTetap, dengan atribut :
NoPeg : no pegawai kontrak (diinputkan)
Nama : nama pegawai (diinputkan)
Kehadiran : jumlah hari masuk dalam 1 bulan (diinputkan)
Tunjangan : besarnya 200 ribu (tidak diinputkan)
UangMakan : besarnya 6 ribu dikali jumlah kehadiran(tidak diinputkan)
Gaji : besarnya honor pokok yang diterima tiap bulan(diinputkan)

Method-method yang harus ada :
- hitungGaji() : untuk menghitung honor higienis pegawai, dimana untuk pegawai kontrak = Uang Makan + Gaji, pegawai tetap = Tunjangan + Uang Makan + Gaji
- lihatData() : untuk menampilkan data-data pegawai secara lengkap beserta total honor yang diterima (gaji bersih)

Dari kedua class diatas, analisa dan desainlah superclass yang sempurna untuk perkara tersebut. Setelah itu buatlah class utama yaitu class PegawaiMajuMundur (yang memakai class-class diatas). Tentukan pula modifier yang sempurna untuk semua class diatas (termasuk superclass-nya, mana yg jawaban class dan mana yang abstract class).

Pertama, buat abstract class dengan nama Pegawai.java. Di dalam kelas ini terdapat dua method abstract yaitu hitung honor dan lihat data.

/**  *  * @author Wim Sonevel  */ public abstract class Pegawai {     abstract void hitungGaji();     abstract void lihatData(); } 

Buat kelas PegawaiKontrak.java kemudian extends dari kelas Pegawai. Override dua method dari kelas Pegawai.
/**  *  * @author Wim Sonevel  */ public class PegawaiKontrak extends Pegawai{     int noPeg, kehadiran, gaji;     String nama, masaKontrak;      public PegawaiKontrak(int noPeg, String nama, String masaKontrak, int kehadiran, int gaji){         this.noPeg = noPeg;         this.nama = nama;         this.masaKontrak = masaKontrak;         this.kehadiran = kehadiran;         this.gaji = gaji;     }      public int getUangMakan(){         return 6000 * kehadiran;     }     //setter     public void setNoPeg(int noPeg){         this.noPeg = noPeg;     }     public void setNama(String nama){         this.nama = nama;     }     public void setMasaKontrak(String masaKontrak){         this.masaKontrak = masaKontrak;     }     public void setKehadiran(int kehadiran){         this.kehadiran = kehadiran;     }     public void setGaji(int gaji){         this.gaji = gaji;     }      public void lihatData(){         System.out.println("No. Pegawai : "+noPeg);         System.out.println("Nama Pegawai : "+nama);         System.out.println("Masa Kontrak : "+masaKontrak);         System.out.println("Kehadiran : "+kehadiran);         System.out.println("Uang Makan : "+getUangMakan());         System.out.println("Gaji : "+gaji);     }     public void hitungGaji(){         int gajiBersih = getUangMakan() + gaji;         System.out.println("Gaji Bersih : "+gajiBersih);     } } 

Buat kelas PegawaTetap.java kemudian extends kelas Pegawai. Sama halnya dengan kelas PegawaiKontrak.java
/**  *  * @author Wim Sonevel  */ public class PegawaiTetap extends Pegawai{     int noPeg, kehadiran, gaji;     String nama;     public jawaban int pinjaman = 200000;      public PegawaiTetap(int noPeg, String nama, int kehadiran, int gaji){         this.noPeg = noPeg;         this.nama = nama;         this.kehadiran = kehadiran;         this.gaji = gaji;     }      public int getUangMakan(){         return 6000 * kehadiran;     }     //setter     public void setNoPeg(int noPeg){         this.noPeg = noPeg;     }     public void setNama(String nama){         this.nama = nama;     }     public void setKehadiran(int kehadiran){         this.kehadiran = kehadiran;     }     public void setGaji(int gaji){         this.gaji = gaji;     }      public void lihatData(){         System.out.println("No. Pegawai : "+noPeg);         System.out.println("Nama Pegawai : "+nama);         System.out.println("Kehadiran : "+kehadiran);         System.out.println("Uang Makan : "+getUangMakan());         System.out.println("Tunjangan : "+tunjangan);         System.out.println("Gaji : "+gaji);     }     public void hitungGaji(){         int gajiBersih = getUangMakan() + gaji;         System.out.println("Gaji Bersih : "+gajiBersih);     } } 

Kemudian kita akan menginstasiasi kelas PegawaiKontrak dan PegawaiTetap di KelasUtama.java
/**  *  * @author Wim Sonevel  */ import java.io.*; public class KelasUtama {     public static void main(String[] args){         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));          Pegawai pg;         PegawaiKontrak pk = new PegawaiKontrak(0, "", "", 0, 0);         PegawaiTetap pt = new PegawaiTetap(0, "", 0, 0);                  while(true){             System.out.println("MENU UTAMA");             System.out.println("=====================");             System.out.println("1. Input Data Pegawai");             System.out.println("2. Lihat Data Pegawai");             System.out.println("3. Keluar");              int pilih1 = 0;             int pilih2 = 0;             try{                 System.out.print("Masukkan pilihan [1]/[2]/[3] : ");                 pilih1 = Integer.parseInt(br.readLine());                  if(pilih1==1){                     System.out.println("1. Pegawai Kontrak");                     System.out.println("2. Pegawai Tetap");                     System.out.print("Masukkan pilihan [1]/[2] : ");                     pilih2 = Integer.parseInt(br.readLine());                      if(pilih2==1){                         System.out.print("Input no. pegawai kontrak : ");                         int no = Integer.parseInt(br.readLine());                         System.out.print("Input nama pegawai kontrak : ");                         String nama = br.readLine();                         System.out.print("Input masa kontrak : ");                         String masa = br.readLine();                         System.out.print("Input kehadiran : ");                         int hadir = Integer.parseInt(br.readLine());                         System.out.print("Input honor : ");                         int honor = Integer.parseInt(br.readLine());                                                  pk = new PegawaiKontrak(no, nama, masa, hadir, gaji);                         System.out.println("=====DATA TERSIMPAN=====\n");                     }                     System.out.print("Masukkan pilihan [1]/[2] : ");                     pilih2 = Integer.parseInt(br.readLine());                      if(pilih2==2){                         System.out.print("Input no. pegawai tetap : ");                         int no = Integer.parseInt(br.readLine());                         System.out.print("Input nama pegawai tetap : ");                         String nama = br.readLine();                         System.out.print("Input kehadiran : ");                         int hadir = Integer.parseInt(br.readLine());                         System.out.print("Input honor : ");                         int honor = Integer.parseInt(br.readLine());                                                  pt = new PegawaiTetap(no, nama, hadir, gaji);                         System.out.println("=====DATA TERSIMPAN=====\n");                     }                 }else if(pilih1==2){                     System.out.println("===DATA PEGAWAI KONTRAK===");                     pg = pk;                     pg.lihatData();                     pg.hitungGaji();                     System.out.println("===DATA PEGAWAI TETAP===");                     pg = pt;                     pg.lihatData();                     pg.hitungGaji();                 }else{                     System.exit(0);                 }             }catch(IOException e){                 System.out.println(e);             }         }     } } 

Jika di jalankan maka outputnya sebagai berikut :
MENU UTAMA
=====================
1. Input Data Pegawai
2. Lihat Data Pegawai
3. Keluar Masukkan pilihan [1]/[2]/[3] : 1
1. Pegawai Kontrak
2. Pegawai Tetap Masukkan pilihan [1]/[2] : 1
Input no. pegawai kontrak : 12345
Input nama pegawai kontrak : Wim
Input masa kontrak : 5
Input kehadiran : 20
Input honor : 3000000
 =====DATA TERSIMPAN=====

Masukkan pilihan [1]/[2] : 2
Input no. pegawai tetap : 54321
Input nama pegawai tetap : Sonevel
Input kehadiran : 20
Input honor : 4000000
=====DATA TERSIMPAN=====

MENU UTAMA
=====================
1. Input Data Pegawai
2. Lihat Data Pegawai
3. Keluar Masukkan pilihan [1]/[2]/[3] : 2

===DATA PEGAWAI KONTRAK===
 No. Pegawai : 12345
Nama Pegawai : Wim
Masa Kontrak : 5
Kehadiran : 20
Uang Makan : 120000
Gaji : 3000000
Gaji Bersih : 3120000

===DATA PEGAWAI TETAP===
No. Pegawai : 54321
Nama Pegawai : Sonevel
Kehadiran : 20
Uang Makan : 120000
Tunjangan : 200000
Gaji : 4000000
Gaji Bersih : 4120000

MENU UTAMA
=====================
1. Input Data Pegawai
2. Lihat Data Pegawai
3. Keluar Masukkan pilihan [1]/[2]/[3] :

Sekian dan Terima Kasih
Happy Coding :)

Comments

Popular posts from this blog

Pewarnaan Objek Geometri Di Java 2D

Tugas Komplemen Terakhir

Konsep Oop Encapsulation