REPRESENTASI POLYMORPHISM

Untuk lebih memahami tentang polymorphism, kita lihat pada program berikut, dimana dalam program berikut terdapat empat class, yaitu class Employee yang digunakan sebagai class induk (parent class) dua class anak dari Employee yaitu Manager dan Programmer. Dan yang ke empat adalah class payroll. Untuk jelasnya perhatikan Listing program dan penjelasannya berikut :

public class Employee

{

  String nama;

  int Salary;

 

  Employee()

  {}

 

  Employee(String nama)

  {

      this.nama = nama;

      System.out.println(“Employee”);

  }

 

  public int salary()

  {

      return 0;

  }

}

 

class Manager extends Employee

{

  private static final int mgrSal = 40000;

  private static final int tunjangan = 40000;

 

    public int salary()

    {

        return mgrSal;

    }

 

    public int tunjangan()

    {

        return tunjangan;

    }

}

 

class Programmer extends Employee

{

   private static final int prgSal = 50000;

    private static final int prgBonus = 10000;

 

    public int salary()

    {

        return prgSal;

    }

 

    public int bonus()

    {

        return prgBonus;

    }

}

 

class Payroll{

    public int calcPayroll(Employee emp)

    {

        int money = emp.salary();

        if(emp instanceof Manager)

            money += ((Manager) emp).tunjangan();

        if(emp instanceof Programmer)

            money += ((Programmer) emp).bonus();

        return money;

    }

 

    public static void main(String[] args)

    {

        Payroll pr = new Payroll();

        Programmer prg = new Programmer();

        Manager mgr = new Manager();

 

        System.out.println(“Payroll untuk programmer : ” + pr.calcPayroll(prg));

        System.out.println(“Payroll untuk Manager : ” + pr.calcPayroll(mgr));

    }

}

Penjelasan Class Employee :

Class Employee di atas memiliki dua member, yaitu name dan salary serta mempunyai sebua method yaitu method salary() yang digunakan untuk mengembalikan nilai dari salary. Dalam class ini terdapat dua buah constructor, yang pertama constructor tanpa parameter dan yang kedua adalah constructor dengan satu parameter yaitu parameter name yang digunakan untuk men-set name pada saat pendefinisian obyek Employee.

 

Penjelasan Class Manager :

Class Manager merupakan class anak dari Employee dimana class manager ini memiliki dua member warisan dari class Employee yaitu name dan salary serta dua konstanta yaitu mgrSal dan tunjangan yang keduanya bernilai 40000. Dalam class Manager terdapat dua method, yang pertama adalah method tunjangan () yang digunakan untuk mengembalikan nilai dari tunjangan dan method salary() yang merupakan Overiding method dari method salary() yang sebelumnya mengembalikan nilai dari salary pada class parent, dalam class Manager method salary() mengembalikan nilai mgrSal tidak lagi nilai salary pada class parent-nya.

 

Penjelasan Class Programmer :

Sama halnya dengan Class Manager, Class Programmer juga merupakan class anak dari Employee dimana class ini memiliki dua member warisan dari class Employee yaitu name dan salary serta dua konstanta yaitu prgSal dan prgBonus yang masing – masing bernilai 50000 dan 10000. Class Programmer memiliki dua buah method yang pertama adalah method bonus() yang digunakan untuk mengembalikan nilai dari prgBonus dan yang kedua adalah Method salary() yang juga merupakan overriding method dari class parent. Method salary tidak lagi mengembalikan nilai salary tetapi mengembailakn nilai prgSal.

 

Penjelasan Class Payroll :

Class utama dimana dalam class ini terdapat method utama yang digunakan program pada saat pertama kali dieksekusi (main). Dalam class ini terdapat method public int calcPayroll(Employee emp) yang digunakan untuk menghitung jumlah uang yang didapatkan oleh masing – masing obyek (Employee, Manager, Programmer). Parameter dari method ini adalah class Employee karena Employee adalah class parent dari programmer dan Manager. Dari pernyataan if(emp instanceof Manager) akan menghasilkan nilai true jika emp merupakan obyek yang dibentuk dari class Manager, begitu pula pernyataan if yang selanjutnya. Ketentuan Nilai money dari masing – masing Obyek adalah :

·         Bila Obyek Employee, maka nilai dari money adalah nilai dari salary itu sendiri perhatikan pernyataan dari  int money = emp.salary();

·         Bila Obyek Manager, maka nilai dari money adalah : money += ((Manager) emp).tunjangan();

Nilai money yang tadinya mgrSal (40000) dari pernyataan int money = emp.salary(); akan ditambahkan dengan tunjangan (40000) sehingga money menjadi 80000

·         Bila Obyek Programmer, maka nilai dari money adalah : money += ((Programmer) emp).bonus();

Nilai money yang tadinya prgSal (50000) dari pernyataan int money = emp.salary(); akan ditambahkan dengan prgBonus (10000) sehingga money menjadi 60000

Latihan II Class MyRect

 

import java.awt.Point;

 

class MyRect

{

    int x1 = 0;

    int x2 = 0;

    int y1 = 0;

    int y2 = 0;

 

    MyRect buildRect(int x1, int y1, int x2, int y2)

    {

        this.x1 = x1;

        this.x2 = x2;

        this.y1 = y1;

        this.y2 = y2;

        return this;

    }

 

    MyRect buildRect(Point topLeft, Point bottomRight)

    {

        x1 = topLeft.x;

        y1 = topLeft.y;

        x2 = bottomRight.x;

        y2 = bottomRight.y;

        return this;

    }

 

    MyRect buildRect(Point topLeft, int w, int h)

    {

        x1 = topLeft.x;

        y1 = topLeft.y;

        x2 = (x1 + w);

        y2 = (y1 + h);

        return this;

    }

 

    void printRect()

    {

        System.out.print(“MyRect : <” + x1 + “, ” + y1);

        System.out.println(“, ” + x2 + “, ” + y2 + “>”);

    }

 

    public static void main(String []args)

    {

        MyRect rect = new MyRect();

        System.out.println(“Calling buildRect with coordinates 25,25,50,50”);

        rect.buildRect(25,25,50,50);

        rect.printRect();

        System.out.println(“***”);

        System.out.println(“Calling buildRect with points (10,10),(20,20) : “);

        rect.buildRect(new Point(10,10), new Point(20,20));

        rect.printRect();

        System.out.println(“***”);

        System.out.print(“Calling buildRect with 1 points (10,10),”);

        System.out.println(“width(50) and height(50): “);

        rect.buildRect(new Point(10,10), 50,50);

        rect.printRect();

        System.out.println(“***”);

    }

}

 

Penjelasan Program di Atas :

Program di atas merupakan representasi dari Overloading Method. Dimana dalam class MyRect di atas terdpat 3 method overloading yaitu method buildRect(), satu method printRect() yang digunakan unutk mencetak informasi yang ada dalam MyRect dan method main().

·         Overloading Method yang pertama MyRect buildRect(int x1, int y1, int x2, int y2)

Method ini digunkan untuk men-set nilai x1, x2, y1, y2 dimana parameter dari method ini ada empat yang kesemuanya bertipe int. nilai x1, x2, y1, y2 diperoleh dari :

this.x1 = x1;

this.x2 = x2;

this.y1 = y1;

this.y2 = y2;

·         Overloading Method yang kedua MyRect buildRect(Point topLeft, Point bottomRight)

Sama halnya dengan method yang pertama, method ini digunkan untuk men-set nilai x1, x2, y1, y2 tetapi dengan cara yang berbeda. Parameter dari method ini juga berbeda dengan method yang pertama, dalam method ini menggunakan dua parameter dengan tipe Point.[(x,y)]. nilai x1, x2, y1, y2 diperoleh dari :

x1 = topLeft.x;

y1 = topLeft.y;

x2 = bottomRight.x;

y2 = bottomRight.y;


·         Overloading Method yang ketiga MyRect buildRect(Point topLeft,int w,int h)

Sama halnya dengan method yang sebelumnya, method ini juga digunkan untuk men-set nilai x1, x2, y1, y2 dan dengan cara yang berbeda pula. Parameter dari method ini juga berbeda dengan method yang pertama dan kedua, dalam method ini menggunakan tiga parameter, satu parameter tipe Point.[(x,y)] dan dua parameter bertipe int. nilai x1, x2, y1, y2 diperoleh dari :

x1 = topLeft.x;

y1 = topLeft.y;

x2 = (x1 + w);

y2 = (y1 + h);

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