POLYMORPHISME
Melalui pengiriman pesan. Tidak bergantung kepada pemanggilan subrutin, bahasa orientasi objek dapat mengirim pesan; metode tertentu yang berhubungan dengan sebuah pengiriman pesan tergantung kepada objek tertentu di mana pesa tersebut dikirim. Contohnya, bila sebuah burung menerima pesan "gerak cepat", dia akan menggerakan sayapnya dan terbang. Bila seekor singa menerima pesan yang sama, dia akan menggerakkan kakinya dan berlari. Keduanya menjawab sebuah pesan yang sama, namun yang sesuai dengan kemampuan hewan tersebut. Ini disebut polimorfisme karena sebuah variabel tungal dalam program dapat memegang berbagai jenis objek yang berbeda selagi program berjalan, dan teks program yang sama dapat memanggil beberapa metode yang berbeda di saat yang berbeda dalam pemanggilan yang sama. Hal ini berlawanan dengan bahasa fungsional yang mencapai polimorfisme melalui penggunaan fungsi kelas-pertama.
Sekarang, class induk Person dan subclass Student dari contoh sebelumnya, kita tambahkan subclass lain dari Person yaitu Employee. Di bawah ini adalah hierarkinya,
person
student employee
Dalam Java, kita dapat membuat referensi yang merupakan tipe dari superclass ke sebuah
object dari subclass tersebut. Sebagai contohnya :
public static main( String[] args )
{
Person ref;
Student studentObject = new Student();
Employee employeeObject = new Employee();
ref = studentObject; //Person menunjuk kepada
// object Student
//beberapa kode di sini
}
Sekarang dimisalkan kita punya method getName dalam superclass Person kita, dan kita
override method ini dalam kedua subclasses Student dan Employee,
public class Person
{
public String getName(){
System.out.println(“Person Name:” + name);
return name;
}
}
public class Student extends Person
{
public String getName(){
System.out.println(“Student Name:” + name);
return name;
}
}
public class Employee extends Person
{
public String getName(){
System.out.println(“Employee Name:” + name);
return name;
}
Kembali ke method utama kita, ketika kita mencoba memanggil method getName dari referensi Person ref, method getName dari object Student akan dipanggil. Sekarang, jika kita berikan ref ke object Employee, method getName dari Employee akan dipanggil.
public static main( String[] args )
{
Person ref;
Student studentObject = new Student();
Employee employeeObject = new Employee();
ref = studentObject; //Person menunjuk kepada
// object Student
String temp = ref.getName(); //getName dari Student
//class dipanggil
System.out.println( temp );
ref = employeeObject; //Person menunjuk kepada
// object Employee
String temp = ref.getName(); //getName dari Employee
//class dipanggil
System.out.println( temp );
}
Kemampuan dari referensi untuk mengubah sifat menurut object apa yang dijadikan acuan dinamakan polimorfisme. Polimorfisme menyediakan multiobject dari subclasses yang berbeda untuk diperlakukan sebagai object dari superclass tunggal, secara otomatis
menunjuk method yang tepat untuk menggunakannya ke particular object berdasar subclass yang termasuk di dalamnya.
Contoh lain yang menunjukkan properti polimorfisme adalah ketika kita mencoba melalui referensi ke method. Misalkan kita punya method statis printInformation yang mengakibatkan object Person sebagai referensi, kita dapat me-referensi dari tipe Employee dan tipe Student ke method ini selama itu masih subclass dari class Person.
public static main( String[] args )
{
Student studentObject = new Student();
Employee employeeObject = new Employee();
printInformation( studentObject );
printInformation( employeeObject );
}
public static printInformation( Person p ){
. . . .
}
INHERITANCE
Inheritance atau pewarisan sifat adalah sebuah class yang memiliki properti (variabel member dan method) dari class induknya. Dengan inheritance ini maka suatu class anak akan mempunyai semua member dan semua method yang ada di class induk. Berikut ini adalah sebuah contoh penggunaan inheritance dimana class Lingkaran1.java di atas merupakan class induk dan class Tabung.java merupakan class turunannya. Untuk menyatakan suatu class sebagai turunan class yang lain dapat dilakukan dengan menambahkan pernyataan extends pada definisi class tersebut.
class classAnak extends classInduk
Pernyataan ini digunakan untuk membuat suatu class yang bernama classAnak, class ini menjadi class turunan dari classInduk. Dengan demikian semua member dan method dari classInduk akan berlakuk juga pada classAnak.
class Tabung extends Lingkaran1
{
public double hitungSelimut(int tinggi)
{
double Selimut;
Selimut=2*hitungLuas()+hitungKeliling()*tinggi;
return Selimut;
}
public static void main(String args[])
{
Tabung t1=new Tabung();
t1.inputData(10);
t1.cetak();
System.out.println("Luas Selimut : "+
t1.hitungSelimut(10));
}
}
Hasil dari program di atas adalah:
Radius Lingkaran : 10.0
Luas Lingkaran : 314.1592653589793
Keliling Lingkaran : 62.83185307179586
Luas Selimut : 1256.6370614359173
ENKAPSULASI
Memastikan pengguna sebuah objek tidak dapat mengganti keadaan dalam dari sebuah objek dengan cara yang tidak layak; hanya metode dalam objek tersebut yang diberi ijin untuk mengakses keadaannya. Setiap objek mengakses interface yang menyebutkan bagaimana objek lainnya dapat berinteraksi dengannya. Objek lainnya tidak akan mengetahui dan tergantung kepada representasi dalam objek tersebut.
class Encapsulation {
private int secret; //field tersembunyi
public boolean setSecret(int secret) {
if (secret <> 100) {
return false; }
this.secret = secret;
return true;
}
public getSecret() {
return secret;
}
}
Tidak ada komentar:
Posting Komentar