PENGERTIAN ABSTRAKSI DALAM OOP DAN STUDI KASUS DALAM APLIKASI BANK
Pengertian Abstraksi dalam OOP dan studi kasus dalam aplikasi Bank.
Materi :
Abstraksi - Kemampuan sebuah program untuk melewati aspek informasi yang diproses olehnya, yaitu kemampuan untuk memfokus pada inti. Setiap objek dalam sistem melayani sebagai model dari "pelaku" abstrak yang dapat melakukan kerja, laporan dan perubahan keadaannya, dan berkomunikasi dengan objek lainnya dalam sistem, tanpa mengungkapkan bagaimana kelebihan ini diterapkan. Proses, fungsi atau metode dapat juga dibuat abstrak, dan beberapa teknik digunakan untuk mengembangkan sebuah pengabstrakan.Contoh Implementasi konsep Abtraksi: Mobil adalah kumpulan sistem pengapian, sistem kemudi, sistem pengereman. Orang tidak perlu berpikir bahwa mobil adalah kumpulan dari puluhan atau ribuan bagian-bagian kecil (mesin, kabel, baut,roda, rem, dsb). Orang hanya perlu berpikir bahwa mobil adalah sebuah objek yang telah memiliki prilaku spesifik, yang dapat digunakan sebagaialat transportasi, sehingga dia/mereka tinggal menggunakannya atau mengendarainya tanpa harus mengetahui kerumitan proses yang terdapat didalam mobil tersebut. Ini artinya, si pembuat mobil telah menyembunyikan semua kerumitan-kerumitan proses yang terdapat didalam mobil dan pengguna tidak perlu mengetahui bagaimana sistem mesin , transmisi, danrem berkerja. Konsep seperti inilah yang dinamakan dengan abstraksi.
Contoh abstraksi dalam model pemrograman berorientasi objek, kita sebagai programmer atau pengembang program tidak perlu tahu secara detail bagaimana cara membuat sebuah tombol, yang perlu kita ketahui adalah bagaimana cara menggunakan objek tombol yang sudah ada (baikdata/propeti maupun method-nya). dalam kasus ini, si pembuat objek telahmengabstraksikan semua proses yang berkaitan dengan pembuatan tombol.
Dalam OOP abstraksi sering digunakan pada kelas atau method. Abstract Class adalah sebuah class yang tidak bisa di-instansiasi (tidak bisa dibuat menjadi objek) dan berperan sebagai ‘kerangka dasar’ bagi class turunannya. Di dalam abstract class umumnya akan memiliki abstract method. Sedangkan Abstract Method adalah sebuah ‘method dasar’ yang harus diimplementasikan ulang di dalam class anak (child class). Abstract method ditulis tanpa isi dari method, melainkan hanya ‘signature’-nya saja. Signature dari sebuah method adalah bagian method yang terdiri dari nama method dan parameternya (jika ada).
Berikut adalah karakter abstrak jika diterapkan dalam class, method, variabel, dan interface.
Contoh Studi kasus :
Studi kasus yang kami gunakan adalah program untuk menghitung gaji manager Bank, Dimana manager dibagi menjadi Lending Manager, Funding Manager, Operational Manager, Kredit Manager dan Service Manager. Dengan class abstract Manager. Konsep yang digunakan antara lain : Abstraksi, Inheritance, Encapsulation, Polimorfisme, Overriding.
Source Code Program :
package gaji.manager;import java.text.DecimalFormat;
import java.util.Scanner;
abstract class Manager {
protected double golongan, kode_manager, absensi;
protected double gajipokok, transport, t_transport, gajikotor, pph, gajibersih;
protected String nama, jabatan;
public Manager(double golongan, double kode_manager, String nama, double absensi){
this.golongan = golongan;
this.kode_manager=kode_manager;
this.nama=nama;
this.absensi=absensi;
}
abstract void getjabatan(String jabatan);
abstract void tunjangantransport();
abstract void gajikotor();
abstract void PPH();
abstract void gajibersih();
}
class LendingManager extends Manager{
public LendingManager(double golongan, double kode_manager, String nama, double absensi){
super(golongan,kode_manager, nama, absensi);
};
void getjabatan(String jabatan){
this.jabatan = jabatan;
};
void tunjangantransport(){
transport = 100000;
t_transport = transport * absensi;
};
void gajikotor(){
gajipokok = 5000000;
gajikotor = gajipokok + t_transport;
};
void PPH(){
if(gajikotor >= 2500000){
pph = gajikotor * 2/100;
}else{
pph=0;
}
};
void gajibersih(){
gajibersih = gajikotor - pph;
};
}
class FundingManager extends Manager{
public FundingManager(double golongan, double kode_manager, String nama, double absensi){
super(golongan,kode_manager, nama, absensi);
}
void getjabatan(String jabatan){
this.jabatan = jabatan;
};
void tunjangantransport(){
transport = 75000;
t_transport = transport * absensi;
};
void gajikotor(){
gajipokok = 4500000;
gajikotor = gajipokok + t_transport;
};
void PPH(){
if(gajikotor >= 2500000){
pph = gajikotor * 2/100;
}else{
pph=0;
}
};
void gajibersih(){
gajibersih = gajikotor - pph;
};
}
class OperationManager extends Manager{
public OperationManager(double golongan, double kode_manager, String nama, double absensi){
super(golongan,kode_manager, nama, absensi);
}
void getjabatan(String jabatan){
this.jabatan = jabatan;
};
void tunjangantransport(){
transport = 50000;
t_transport = transport * absensi;
};
void gajikotor(){
gajipokok = 4000000;
gajikotor = gajipokok + t_transport;
};
void PPH(){
if(gajikotor >= 2500000){
pph = gajikotor * 2/100;
}else{
pph=0;
}
};
void gajibersih(){
gajibersih = gajikotor - pph;
};
}
class KreditManager extends Manager{
public KreditManager(double golongan, double kode_manager, String nama, double absensi){
super(golongan,kode_manager, nama, absensi);
}
void getjabatan(String jabatan){
this.jabatan = jabatan;
};
void tunjangantransport(){
transport = 100000;
t_transport = transport * absensi;
};
void gajikotor(){
gajipokok = 3500000;
gajikotor = gajipokok + t_transport;
};
void PPH(){
if(gajikotor >= 2500000){
pph = gajikotor * 2/100;
}else{
pph=0;
}
};
void gajibersih(){
gajibersih = gajikotor - pph;
};
}
class ServiceManager extends Manager{
public ServiceManager(double golongan, double kode_manager, String nama, double absensi){
super(golongan,kode_manager, nama, absensi);
}
void getjabatan(String jabatan){
this.jabatan = jabatan;
};
void tunjangantransport(){
transport = 100000;
t_transport = transport * absensi;
};
void gajikotor(){
gajipokok = 3500000;
gajikotor = gajipokok + t_transport;
};
void PPH(){
if(gajikotor >= 2500000){
pph = gajikotor * 2/100;
}else{
pph=0;
}
};
void gajibersih(){
gajibersih = gajikotor - pph;
};
}
public class GajiManager {
public static void main(String[] args) {
double gol, kode, absen;
String nam,bul;
Manager manager;
int pil=1;
Scanner input = new Scanner(System.in);
DecimalFormat df1 = new DecimalFormat("####");
DecimalFormat df2 = new DecimalFormat("Rp ###,####,###,###");
while (pil==1){
System.out.println("==PROGRAM MENGHITUNG GAJI MANAGER BANK==");
System.out.print("Masukkan golongan (1-5) : ");
gol = input.nextDouble();
System.out.print("Masukkan kode manager : ");
kode = input.nextDouble();
System.out.print("Masukkan nama manager : ");
nam = input.next();
System.out.print("Masukkan jumlah kehadiran (1-30) : ");
absen = input.nextDouble();
System.out.println("=================================");
System.out.println(" ");
if (gol == 1){
manager = new LendingManager (gol, kode, nam, absen);
manager.tunjangantransport();
manager.gajikotor();
manager.PPH();
manager.gajibersih();
manager.getjabatan("Lending Manager");
System.out.println(" ");
System.out.println(" ");
System.out.println("========Laporan Gaji========");
System.out.println("Kode manager : "+df1.format(manager.kode_manager));
System.out.println("Nama Manager : "+manager.nama);
System.out.println("Golongan : "+df1.format(manager.golongan));
System.out.println("Absensi / Jumlah kehadiran : "+df1.format(manager.absensi)+" Hari ");
System.out.println("Jabatan : "+manager.jabatan);
System.out.println("Gaji pokok : "+df2.format(manager.gajipokok));
System.out.println("Transport/Hr : "+df2.format(manager.transport));
System.out.println("Tunjangan Transport : "+df2.format(manager.t_transport));
System.out.println("Gaji kotor : "+df2.format(manager.gajikotor));
System.out.println("PPH : "+df2.format(manager.pph));
System.out.println("Gaji bersih : "+df2.format(manager.gajibersih));
}
else if(gol == 2){
manager = new FundingManager (gol, kode, nam, absen);
manager.tunjangantransport();
manager.gajikotor();
manager.PPH();
manager.gajibersih();
manager.getjabatan("Funding Manager");
System.out.println(" ");
System.out.println(" ");
System.out.println("========Laporan Gaji========");
System.out.println("Kode manager : "+df1.format(manager.kode_manager));
System.out.println("Nama Manager : "+manager.nama);
System.out.println("Golongan : "+df1.format(manager.golongan));
System.out.println("Absensi / Jumlah kehadiran : "+df1.format(manager.absensi)+" Hari ");
System.out.println("Jabatan : "+manager.jabatan);
System.out.println("Gaji pokok : "+df2.format(manager.gajipokok));
System.out.println("Transport/Hr : "+df2.format(manager.transport));
System.out.println("Tunjangan Transport : "+df2.format(manager.t_transport));
System.out.println("Gaji kotor : "+df2.format(manager.gajikotor));
System.out.println("PPH : "+df2.format(manager.pph));
System.out.println("Gaji bersih : "+df2.format(manager.gajibersih));
}
else if (gol == 3){
manager = new OperationManager (gol, kode, nam, absen);
manager.tunjangantransport();
manager.gajikotor();
manager.PPH();
manager.gajibersih();
manager.getjabatan("Operational Manager");
System.out.println(" ");
System.out.println(" ");
System.out.println("========Laporan Gaji========");
System.out.println("Kode manager : "+df1.format(manager.kode_manager));
System.out.println("Nama Manager : "+manager.nama);
System.out.println("Golongan : "+df1.format(manager.golongan));
System.out.println("Absensi / Jumlah kehadiran : "+df1.format(manager.absensi)+" Hari ");
System.out.println("Jabatan : "+manager.jabatan);
System.out.println("Gaji pokok : "+df2.format(manager.gajipokok));
System.out.println("Transport/Hr : "+df2.format(manager.transport));
System.out.println("Tunjangan Transport : "+df2.format(manager.t_transport));
System.out.println("Gaji kotor : "+df2.format(manager.gajikotor));
System.out.println("PPH : "+df2.format(manager.pph));
System.out.println("Gaji bersih : "+df2.format(manager.gajibersih));
}
else if(gol == 4){
manager = new KreditManager (gol, kode, nam, absen);
manager.tunjangantransport();
manager.gajikotor();
manager.PPH();
manager.gajibersih();
manager.getjabatan("Kredit Manager");
System.out.println(" ");
System.out.println(" ");
System.out.println("========Laporan Gaji========");
System.out.println("Kode manager : "+df1.format(manager.kode_manager));
System.out.println("Nama Manager : "+manager.nama);
System.out.println("Golongan : "+df1.format(manager.golongan));
System.out.println("Absensi / Jumlah kehadiran : "+df1.format(manager.absensi)+" Hari ");
System.out.println("Jabatan : "+manager.jabatan);
System.out.println("Gaji pokok : "+df2.format(manager.gajipokok));
System.out.println("Transport/Hr : "+df2.format(manager.transport));
System.out.println("Tunjangan Transport : "+df2.format(manager.t_transport));
System.out.println("Gaji kotor : "+df2.format(manager.gajikotor));
System.out.println("PPH : "+df2.format(manager.pph));
System.out.println("Gaji bersih : "+df2.format(manager.gajibersih));
}else if(gol == 5){
manager = new ServiceManager (gol, kode, nam, absen);
manager.tunjangantransport();
manager.gajikotor();
manager.PPH();
manager.gajibersih();
manager.getjabatan("Service Manager");
System.out.println(" ");
System.out.println(" ");
System.out.println("========Laporan Gaji========");
System.out.println("Kode manager : "+df1.format(manager.kode_manager));
System.out.println("Nama Manager : "+manager.nama);
System.out.println("Golongan : "+df1.format(manager.golongan));
System.out.println("Absensi / Jumlah kehadiran : "+df1.format(manager.absensi)+" Hari ");
System.out.println("Jabatan : "+manager.jabatan);
System.out.println("Gaji pokok : "+df2.format(manager.gajipokok));
System.out.println("Transport/Hr : "+df2.format(manager.transport));
System.out.println("Tunjangan Transport : "+df2.format(manager.t_transport));
System.out.println("Gaji kotor : "+df2.format(manager.gajikotor));
System.out.println("PPH : "+df2.format(manager.pph));
System.out.println("Gaji bersih : "+df2.format(manager.gajibersih));
}else{
System.out.println("Golongan yang anda masukkan salah : ");
System.out.println("Golongan 1 : LendingManager");
System.out.println("Golongan 2 : FundingManager");
System.out.println("Golongan 3 : OperationManager");
System.out.println("Golongan 4 : KreditManager");
System.out.println("Golongan 4 : ServiceManager");
}
System.out.println(" ");
System.out.println("==================================");
System.out.println("Ingin Memasukkan Data Lagi ? ");
System.out.println("1. YA");
System.out.println("2. Tidak");
System.out.print("Masukkan Pilihanmu (1 atau 2): ");
pil= input.nextInt();
}
}
}
Screen Shot Hasil Program :
Analisa Program :
Penerapak Konsep OOP dalam program antara lain:Abstraksi: :
Dalam class manager bersifat abstrak, didalamnya juga terdapat method abstrak. Sehingga perlu diimplementasikan dahulu dalam subclassnya sebelum dapat digunakan.
Encapsulation:
Variabel – variabel pada class Manager bersifat protected yang artinya hanya dapat diakses oleh subclassnya saja. Sehingga pada main class variabel pada class manager diakses melalui subclassnya.
Inheritance:
Class Manager dituruni oleh 5 subclass yaitu : class LendingManager, class FundingManager, Class OperationalManager, class KreditManager, dan class ServiceManager.
Overriding:
Method-method pada class Manager ditulis ulang oleh subclassnya sehingga memiliki sifat atau perilaku baru yang berbeda dari superclassnya.
Polimorfisme:
Dapat dilihat pada main class bahwa untuk mengakses semua method dan variabel dari class LendingManager, class FundingManager, Class OperationalManager, class KreditManager, dan class ServiceManager hanya digunakan satu obyek bernama manager. Dan bukan dari obyek yang berbeda beda.