Sabtu, 02 Juni 2012

Polimorphism, Overloading dan Overriding

TUGAS 3
Polimorphism, Overloading dan Overriding


1.        Polymorphism
Polymorphism artinya bersifat poly morphy (memiliki banyak bentuk).
Method-method overloading masih dalam kelas yang sama, namun contoh berikut memvisualisaikan method respon() nama sama, namun pada kelas yang berbeda dapat memilki isi method yang berbeda pula tergantung kelasnya.

2.        Overloading
Maksud overloading disini bukan overloading terhadap operator sebagaimana C++. Overloading disini adalah mendefinisikan dua atau lebih method di dalam kelas yang sama, dengan nama yang sama, namun dengan deklarasi parameter yang berbeda.
Java interpreter mampu membedakan method mana yang dieksekusi dengan mengenali tipe parameter yang dilewatkan ke method, serta mengenali return valuenya.
Tugas dari method-method yang dioverloading tersebut berbeda.

3.        Overriding
Overriding adalah kemampuan suatu subkelas untuk memodifikasi attribute dan method milik kelas supernya (tentu yang memiliki sifat private atau final tidak biasa dilakukan overriding).
Modifikasi yang dilakukan, misalnya jumlah parameter, tipe parameter, tipe return value, ataupun lingkungan pemrosesan datanya.



PEMBAHASAN


4.1.  Contoh Pemrograman Java
·      Polymorphism
Contoh pertama :
class EkspresiWajah {
    public String respons() {
        return("Perhatikan ekspresi wajah saya");
    }
}
class Gembira extends EkspresiWajah {
    public String respons() {
        return("ha ha ha…");
    }
}
class Sedih extends EkspresiWajah {
    public String respons() {
        return("hik hik ngeee ngeee ngeee");
    }
}
class Marah extends EkspresiWajah {
    public String respons() {
        return("Hai kurang ajar…!");
    }
}
class MainEkspresiWajah {
    public static void main(String args[]) {
        EkspresiWajah objEkspresi = new EkspresiWajah();
        Gembira objGembira = new Gembira();
        Sedih objSedih = new Sedih();
        Marah objMarah = new Marah();

        EkspresiWajah[] arrEkspresi = new EkspresiWajah[4];
        arrEkspresi[0] = objEkspresi;
        arrEkspresi[1] = objGembira;
        arrEkspresi[2] = objSedih;
        arrEkspresi[3] = objMarah;

System.out.println("Ekspresi[0] : " + arrEkspresi[0].respons());
System.out.println("Ekspresi[1] : " + arrEkspresi[1].respons());
System.out.println("Ekspresi[2] : " + arrEkspresi[2].respons());
System.out.println("Ekspresi[3] : " + arrEkspresi[3].respons());
    }
}

Contoh kedua :
//Class Employee
public class Employee {
    private String name;
    private double salary;
    protected Employee(String n, double s) {
        name = n;
        salary = s;
    }
    protected String getDetails() {
        return "Name : "+name+ "\nSalary : "+salary;
    }
    public void cetak() {
        System.out.println("coba di Employee");
    }
}

//Class Manager.java
public class Manager extends Employee {
    private String department;
    public Manager(String nama, double salary, String dep) {
        super(nama, salary);
        department = dep;
    }
    public String getDepartment() {
        return department;
    }
    public String getDetails() {
return super.getDetails() + "\nDepartment : " + getDepartment();  
    }
    public void cetak() {
        System.out.println("Coba di Manager");
    }
}

//Class View.java
public class View {
    public static void main(String[] args) {
       Employee e = new Employee ("Satria",1100000);
Employee em = new Manager ("Satria",1100000,"Informatika");
System.out.println("Data Employee : \n " + e.getDetails());
System.out.println("Data Manager : \n " + em.getDetails());
       em.cetak();      
    }
}

Catatan :
Kalau method cetak() di kelas Employee dan kelas Manager ada, maka yang dijalankan adalah method milik kelas Manager.
Prioritasnya adalah kelas Manager kemudian kelas Employee.

·      Overloading
public class Perkalian {
    private double pangkat(int a, int b) {
        double hasil = 1.0;
        //kode program
        for(int i = 1; i<=b;i++)
            hasil *= a;
        return hasil;
    }
    private double pangkat(double a, int b) {
        double hasil = 1.0;
        //kode program
        for(int i = 1; i<=b;i++)
            hasil *= a;
        return hasil;
    }
    private double pangkat(int a, double b) {
        double hasil = 1.0;
        //kode program
        for(int i = 1; i<=b;i++)
            hasil *= a;
        return hasil;
    }
    private double pangkat(double a, double b) {
        double hasil = 1.0;
        //kode program
        for(int i = 1; i<=b;i++)
            hasil *= a;
        return hasil;
    }
    public static void main(String[] args) {
         Perkalian kali = new Perkalian();
         System.out.println(kali.pangkat(5, 3));
         System.out.println(kali.pangkat(5.0, 3));
         System.out.println(kali.pangkat(5, 3.0));
         System.out.println(kali.pangkat(5.0, 3.0));
    }
}

·       Overriding
//Class KelasSuper.java
public class KelasSuper {
public void methodAsli() {
        System.out.println("Method milik KelasSuper jalan");
    }
    public static void main(String[] args) {
        KelasSuper KS = new KelasSuper();
        KS.methodAsli();
    }
}

//Class SubKelas.java
public class SubKelas extends KelasSuper {
    public void methodAsli() {
        System.out.println("Method yang overrided jalan");   
    }
    public void methodPemanggil() {
System.out.println("Method pemanggil method Asli jalan");
super.methodAsli(); //yang dipanggil milik kelas super
    } 
    public static void main(String[] args) {
        SubKelas SK = new SubKelas();
        SK.methodAsli();
        SK.methodPemanggil();
    }
}

4.2.  Contoh Pemrograman C#
//Class Kendaraan.cs  
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
 
namespace Polymorphism 
{
class Kendaraan {
public Kendaraan(int posisi) {
this.posisi = posisi;
}
private int posisi;
public int Posisi {
get { return posisi; }
set { posisi = value; }
} 
public virtual void Move() {
return; 
} 
} 
}

//Class Motor.cs
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
 
namespace Polymorphism 
{ 
class Motor : Kendaraan {
public Motor(int posisi)
: base(posisi) { } 
public override void Move() {
base.Posisi = base.Posisi + 30; 
} 
}
}

//Class Mobil.java
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
 
namespace Polymorphism 
{ 
class Mobil : Kendaraan { 
public Mobil(int posisi) 
: base(posisi) { } 
public override void Move() { 
base.Posisi = base.Posisi + 70; 
} 
}
}

//Class Pesawat.cs
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
 
namespace Polymorphism 
{ 
class Pesawat : Kendaraan { 
public Pesawat(int posisi) 
: base(posisi) { }
public override void Move() { 
base.Posisi = base.Posisi + 300; 
}
} 
}

//Class Program.cs
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
 
namespace Polymorphism 
{ 
class Program {
static void Main(string[] args) {   
int posisi = 10;   
Kendaraan[] kendaraan = new Kendaraan[3]; 
kendaraan[0] = new Motor(posisi); 
kendaraan[1] = new Mobil(posisi); 
kendaraan[2] = new Pesawat(posisi); 
 
Console.WriteLine("Intansiasi 3 Object Turunan Class Kendaraan"); 
Console.WriteLine("-Kendaraan[0] merupakan instantsiasi dari class " + "Motor dengan posisi awal " + posisi);
Console.WriteLine("-Kendaraan[1] merupakan instantsiasi dari class " + "Mobil dengan posisi awal " + posisi);
Console.WriteLine("-Kendaraan[2] merupakan instantsiasi dari class " + "Pesawat dengan posisi awal " + posisi);
Console.WriteLine();
                
for (int i = 0; i < kendaraan.Length; i++) { 
Console.WriteLine("Object [" + i + "] memanggil method move"); 
Console.WriteLine("Posisi sebelum method move() dipanggil : " + kendaraan[i].Posisi); 
kendaraan[i].Move(); 
Console.WriteLine("Posisi setelah method move() dipanggil : " + kendaraan[i].Posisi); 
Console.WriteLine();
Console.Write("Press any key to continue...");
Console.ReadKey(true);
} 
} 
} 
}

4.3.  Contoh Pemrograman C++
#include <iostream>
using namespace std;
class Cbangun {
protected:
int nPanjang, nLebar;
public:
void PindahSisi(int,int);
};
void CBangun::PindahSisi(int nAtas, int nSamping) {
nPanjang = nAtas;
nLebar = nSamping;
}
class CPersegi: public Cbangun {
public:
int Luas() {return(nPanjang * nLebar);};
};
class CSegitiga: public Cbangun {
public:
int Luas() {return(nPanjang * nLebar / 2);};
};
int main() {
CBangun *pBangun1, *pBangun2;
CPersegi Persegi;
CSegitiga Segitiga;
pBangun1 = &Persegi; // pBAngun1 berisi address Persegi
pBangun2 = &Segitiga; // pBangun2 berisi address Segitiga
pBangun1->PindahSisi(6, 6);
pBangun2->PindahSisi(6, 6);
cout << "Luas dari persegi adalah: " << Persegi.Luas() << endl
<< "Luas dari segitiga adalah: " << Segitiga.Luas() << endl;
system("PAUSE");
return 0;
}

Tidak ada komentar:

Posting Komentar