Pembahasan Soal UAS Dasar Pemrograman


Udah lama ga posting tentang programming. Barusan saya ngeberesin pembahasan salah satu soal UAS mata kuliah Dasar Pemrograman yang soalnya saya buat sendiri. UAS-nya sendiri udah dilaksanakan 3 hari yang lalu. Sekarang saatnya sibuk-sibuk mengoreksi lagi😀

Soal yang saya buat bertema Inheritance (pewarisan) yang akan diimplementasikan dalam bahasa Java. Berikut soal yang dimaksud beserta solusinya.

Soal Inheritance

Seorang sekretaris sebuah perusahaan memerlukan aplikasi sistem address book, yang dapat mengelola data karyawan dan melakukan perhitungan gaji secara otomatis. Pada perusahaan tersebut terdapat 4 tipe karyawan yaitu Employee, BoardMember, Executive, dan Worker. Setiap karyawan yang baru masuk akan dikategorikan sebagai kelas Employee. Sedangkan kelas-kelas karyawan lainnya merupakan turunan dari kelas Employee dengan spesifikasi sebagai berikut :

  • Kelas BoardMember memiliki tambahan properti totalInvestment (banyaknya investasi dalam bentuk uang)
  • Kelas Executive memiliki tambahan properti position (jabatan)
  • Kelas Worker memiliki tambahan properti contractPeriod (masa kontrak dalam satuan bulan)
  • Semua karyawan memiliki method computeSalary(Integer baseSalary, Integer days) yang mengembalikan nilai gaji karyawan dengan rumus perhitungan untuk masing-masing kelas karyawan sebagai berikut :
    • Employee : salary=baseSalary+20 x days
    • Worker : salary=baseSalary+45 x days+50 x age
    • Executive : salary=baseSalary+40 x days+100 x age
    • BoardMember : salary=baseSalary+35 x days+150 x age

Keterangan :

  • baseSalary : gaji pokok
  • days : hari bekerja
  • age : umur karyawan

Kelas Executive memiliki tambahan method retirementPeriod() yang mengembalikan informasi usia pensiun. Jika executive tersebut pria, maka usia pensiunnya adalah 70 tahun, sedangkan jika wanita, maka usia pensiunnya adalah 65 tahun.

Sebuah AddressBook akan mengelola semua data karyawan yang, paling tidak, memiliki 4 buah properti yaitu array of Employee, array of Worker, array of Executive, dan array of BoardMember, serta memiliki 1 buah method displaySalaryReport(int baseSalary, int days) yang menampilkan daftar gaji semua karyawan yang dimilikinya dengan format output sebagai berikut :

== EMPLOYEE ==

  1. Name (age, gender) : computeSalary

== WORKER ==

  1. Name (age, gender, contractPeriod) : computeSalary

== EXECUTIVE ==

  1. Name (age, gender, position, retirementPeriod): computeSalary

== BOARDMEMBER ==

  1. Name (age, gender, totalInvesment) : computeSalary

Tugas Anda adalah mengimplementasikan kelas Worker, Executive, BoardMember, dan AddressBook (lengkap dengan accessor dan mutator). Anda akan diberikan 2 buah file kelas (Employee.java dan AddressBookTester.java) yang boleh Anda modifikasi jika diperlukan. Anda harus menggunakan inheritance yang sesuai dengan spesifikasi di atas. Pastikan juga Anda memakai method super(), method overloading, dan method overriding pada konteks yang tepat.

Solusi

Berikut solusi yang mungkin dari permasalahan tersebut

Ubah modifier dari properties pada kelas Employee dari private menjadi protected, karena kelas Employee akan di-extend oleh kelas-kelas lainnya. Berikut implementasi kelas Employee setelah dilakukan perbaikan:

Employee.java

public class Employee{
/**
* ATTRIBUTES
*/
protected String name;
protected int age;
protected char gender; //'m' : male or 'f' : female

/**
* METHODS
*/
//Constructor
public Employee(String name, int age, char gender){
this.name = name;
this.age = age;
this.gender = gender;
}
//Getter
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
public char getGender(){
return this.gender;
}

//Setter
public void setName(String name){
this.name = name;
}
public void setAge(int age){
this.age = age;
}
public void setGender(char gender){
this.gender = gender;
}

//Other
public int computeSalary(int baseSalary, int days){
return baseSalary + days * 20;
}
}

Berikut implementasi dari kelas Worker, Executive, BoardMember, dan Address Book sesuai dengan spesifikasi pada soal :

Worker.java

public class Worker extends Employee
{
/**
* ATTRIBUTES
*/
private int contractPeriod; //dalam satuan bulan

/**
* METHODS
*/
public Worker(String name, int age, char gender, int contractPeriod)
{
super(name, age, gender);
this.contractPeriod = contractPeriod;
}

//Setter
public void setContractPeriod(int contractPeriod)
{
this.contractPeriod = contractPeriod;
}

//Getter
public int getContractPeriod()
{
return this.contractPeriod;
}

//Other
@Override
public int computeSalary(int baseSalary, int days){
return baseSalary + days * 45 + this.age * 50;
}
}

Executive.java

public class Executive extends Employee
{
    /**
     * ATTRIBUTES
     */
    private String position; //dalam satuan bulan

    /**
     * METHODS
     */
    public Executive(String name, int age, char gender, String position)
    {
        super(name, age, gender);
        this.position = position;
    }

    //Setter
    public void setPosition(String position)
    {
        this.position = position;
    }

    //Getter
    public String getPosition()
    {
        return this.position;
    }

    //Other
    @Override
    public int computeSalary(int baseSalary, int days)
    {
        return baseSalary + days * 40 + this.age * 100;
    }

    public int retirementPeriod()
    {
        int ret = 70; //for male (default)
        if(this.gender == 'f') ret = 65;
        return ret;
    }
}

BoardMember.java

public class BoardMember extends Employee
{
/**
* ATTRIBUTES
*/
private int totalInvestment;

/**
* METHODS
*/
//Contrusctor
public BoardMember(String name, int age, char gender, int totalInvestment)
{
super(name, age, gender);
this.totalInvestment = totalInvestment;
}

//Getter
public int getTotalInvestment()
{
return this.totalInvestment;
}

//Setter
public void setTotalInvestment(int totalInvestment)
{
this.totalInvestment = totalInvestment;
}

//Others
public int computeSalary(int baseSalary, int days)
{
return baseSalary + 35*days + 150*this.age;
}
}

AddressBook.java

public class AddressBook
{
/**
* ATTRIBUTES
*/
Employee[] empList;
Worker[] workerList;
Executive[] exList;
BoardMember[] bmList;

/**
* METHODS
*/
public AddressBook(Employee[] empList, Worker[] workerList, BoardMember[] bmList, Executive[] exList)
{
//Employee
this.empList  = new Employee[empList.length];
for(int i=0; i<this.empList.length; i++)
{
this.empList[i] = new Employee(empList[i].getName(),empList[i].getAge(), empList[i].getGender());
}

//Worker
this.workerList  = new Worker[workerList.length];
for(int i=0; i<this.workerList.length; i++)
{
this.workerList[i] = new Worker(workerList[i].getName(),workerList[i].getAge(),
workerList[i].getGender(), workerList[i].getContractPeriod());
}

//BoardMember
this.bmList  = new BoardMember[bmList.length];
for(int i=0; i<this.bmList.length; i++)
{
this.bmList[i] = new BoardMember(bmList[i].getName(),bmList[i].getAge(),
bmList[i].getGender(), bmList[i].getTotalInvestment());
}

//Executive
this.exList  = new Executive[exList.length];
for(int i=0; i<this.exList.length; i++)
{
this.exList[i] = new Executive(exList[i].getName(),exList[i].getAge(),
exList[i].getGender(), exList[i].getPosition());
}
}

public void displaySalaryReport(int baseSalary, int days)
{
System.out.println("== EMPLOYEE ==");
for(int i=0; i<this.empList.length; i++)
{
System.out.print("        ");
System.out.println((i+1)+". "+this.empList[i].getName()+"("+this.empList[i].getAge()+","+
this.empList[i].getGender()+") : "+
this.empList[i].computeSalary(baseSalary,days));
}

System.out.println("== WORKER ==");
for(int i=0; i<this.workerList.length; i++)
{
System.out.print("        ");
System.out.println((i+1)+". "+this.workerList[i].getName()+"("+this.workerList[i].getAge()+","+
this.workerList[i].getGender()+","+
this.workerList[i].getContractPeriod()+") : "+
this.workerList[i].computeSalary(baseSalary,days));
}

System.out.println("== EXECUTIVE ==");
for(int i=0; i<this.exList.length; i++)
{
System.out.print("        ");
System.out.println((i+1)+". "+this.exList[i].getName()+"("+this.exList[i].getAge()+","+
this.exList[i].getGender()+","+
this.exList[i].retirementPeriod()+") : "+
this.exList[i].computeSalary(baseSalary,days));
}

System.out.println("== BOARD MEMBER ==");
for(int i=0; i<this.bmList.length; i++)
{
System.out.print("        ");
System.out.println((i+1)+". "+this.bmList[i].getName()+"("+this.bmList[i].getAge()+","+
this.bmList[i].getGender()+","+
this.bmList[i].getTotalInvestment()+") : "+
this.bmList[i].computeSalary(baseSalary,days));
}
}
}

Coba compile semua kelas lalu jalankan kelas AddressBookTester.java yang merupakan main program-nya. Seharusnya akan mengembalikan hasil keluaran seperti yang tertera pada soal🙂

— Sekian —

One thought on “Pembahasan Soal UAS Dasar Pemrograman

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s