Abstract Class, Interface, dan Polymorphism


Abstract Class

Misalnya  kita  ingin  membuat  superclass  yang  mempunyai  method  tertentu  yang  berisi implementasi, dan juga beberapa method yang akan di-overridden oleh subclasses nya.

Sebagai contoh, kita akan membuat superclass bernama LivingThing. class ini mempunyai method tertentu seperti breath, eat, sleep, dan walk. Akan tetapi, ada beberapa method di dalam superclass yang sifatnya tidak dapat digeneralisasi. Kita ambil contoh, method walk.

Tidak  semua  kehidupan  berjalan(walk)  dalam  cara  yang  sama.  Ambil  manusia  sebagai misal,  kita  manusia  berjalan  dengan  dua  kaki,  dimana  kehidupan  lainnya  seperti  anjing berjalan  dengan  empat  kaki.  Akan  tetapi,  beberapa  ciri  umum  dalam  kehidupan  sudah biasa, itulah kenapa kita inginkan membuat superclass umum dalam hal ini.

ScreenHunter_198 Feb. 22 15.28

Kita  dapat  membuat  superclass yang  mempunyai  beberapa method  dengan  implementasi sedangkan yang lain tidak. Class jenis ini yang disebut dengan class abstract. Sebuah class abstract  adalah  class  yang  tidak  dapat di-instantiate.  Seringkali  muncul  di atas hirarki class pemrograman berbasis object, dan mendefinisikan keseluruhan aksi yang mungkin pada object dari seluruh subclasses dalam class. Method  ini  dalam  class  abstract  yang  tidak  mempunyai  implementasi  dinamakan  method abstract. Untuk membuat method abstract, tinggal menulis deklarasi method tanpa tubuh class dan digunakan menggunakan kata kunci abstract. Contohnya,

public abstract void someMethod();

Sekarang mari membuat contoh class abstract.

public abstract class LivingThing{
public void breath(){
   System.out.println("Living Thing breathing..."); 
 }  

public void eat(){
    System.out.println("Living Thing eating...");  
 }  

/**
   * abstract method walk
   * Kita ingin method ini di-overridden oleh subclasses
   */
  public abstract void walk();
}

Ketika  class  meng-extend  class  abstract  LivingThing,  dibutuhkan  untuk  override  method abstract  walk(),  atau  lainnya,  juga  subclass  akan  menjadi  class  abstract,  oleh  karena  itu tidak dapat di-instantiate. Contohnya,

public class Human extends LivingThing
{

public void walk(){
System.out.println("Human walks...");  
}  
}

Jika  class  Human  tidak  dapat  overridde  method  walk,  kita  akan  menemui  pesan  error berikut ini,

Human.java:1: Human is not abstract and does not override abstract method walk() in LivingThing
public class Human extends LivingThing
       ^
    1 error

Interface

Interface adalah jenis khusus dari blok yang hanya berisi method signature(atau constant ). Interface mendefinisikan sebuah(signature) dari sebuah kumpulan method tanpa tubuh.Interface mendefinisikan sebuah cara standar dan umum dalam menetapkan sifat-sifat dari class-class. Mereka menyediakan class-class, tanpa memperhatikan lokasinya dalam hirarki class,  untuk  mengimplementasikan  sifat-sifat  yang  umum.  Dengan  catatan  bahwa interface-interface juga menunjukkan polimorfisme, dikarenakan program dapat memanggil method  interface  dan  versi yang tepat  dari method  yang  akan  dieksekusi  tergantung  dari tipe object yang melewati pemanggil method interface.

Kenapa kita memakai interface ?

Kita  akan  menggunakan  interface  jika  kita  ingin  class  yang  tidak  berhubungan mengimplementasikan  method  yang  sama.  Melalui  interface-interface,  kita  dapat  menangkap  kemiripan  diantara  class  yang  tidak  berhubungan  tanpa  membuatnya  seolah-olah class yang berhubungan.

Mari  kita  ambil  contoh  class  Line  dimana  berisi  method  yang  menghitung  panjang  dari garis dan membandingkan object Line ke object dari class yang sama. Sekarang, misalkan kita  punya  class  yang  lain  yaitu  MyInteger  dimana  berisi  method  yang  membandingkan object  MyInteger  ke  object  dari  class  yang  sama.  Seperti  yang  kita  lihat  disini,  kedua class-class mempunyai method yang mirip dimana membandingkan mereka dari object lain dalam  tipe  yang  sama,  tetapi  mereka  tidak  berhubungan  sama  sekali.  Supaya  dapat menjalankan  cara  untuk  memastikan  bahwa  dua  class-class  ini  mengimplementasikan beberapa  method  dengan  tanda  yang  sama,  kita  dapat  menggunakan  sebuah  interface untuk  hal  ini.  Kita  dapat  membuat  sebuah  class  interface,  katakanlah  interface  Relation dimana  mempunyai  deklarasi  method  pembanding.  Relasi  interface  dapat  dideklarasikan sebagai,

public interface Relation
{
public boolean isGreater( Object a, Object b);
public boolean isLess( Object a, Object b);
public boolean isEqual( Object a, Object b);
}

Alasan lain  dalam menggunakan  interface  pemrograman  object  adalah untuk menyatakan sebuah interface pemrograman object tanpa menyatakan classnya. Seperti yang dapat kita lihat nanti dalam bagian Interface vs class, kita dapat benar-benar menggunakan interface sebagai tipe data. Pada  akhirnya,  kita  perlu  menggunakan  interface  untuk  pewarisan  model  jamak  dimana

menyediakan  class  untuk  mempunyai  lebih  dari  satu  superclass.  Pewarisan  jamak  tidak  ditunjukkan di Java, tetapi ditunjukkan di bahasa berorientasi object lain seperti C++.

Interface vs Class

Satu ciri umum dari sebuah interface dan class adalah pada tipe mereka berdua. Ini artinya bahwa sebuah interface dapat digunakan dalam tempat-tempat dimana sebuah class dapat digunakan.  Sebagai  contoh,  diberikan  class  Person  dan  interface  PersonInterface,  berikut deklarasi yang benar:

    PersonInterface  pi = new Person();
    Person    pc = new Person(); 

Bagaimanapun, Anda tidak dapat membuat instance dari sebuah interface.

Contohnya:

PersonInterface  pi = new PersonInterface(); //COMPILE       //ERROR!!!

Ciri  umum  lain  adalah  baik  interface  maupun  class  dapat  mendefinisikan  method. Bagaimanapun,  sebuah  interface  tidak  punya  sebuah  kode  implementasi  sedangkan  class memiliki salah satunya.

Hubungan dari Interface ke Class

Seperti yang telah kita lihat dalam bagian sebelumnya, class dapat mengimplementasikan sebuah interface selama kode implementasi untuk semua method yang didefinisikan dalam interface tersedia.

Hal  lain  yang  perlu  dicatat  tentang  hubungan  antara  interface  ke  class-class  yaitu,  class hanya dapat mengEXTEND SATU superclass, tetapi dapat mengIMPLEMENTASIkan BANYAK interface. Sebuah contoh dari sebuah class yang mengimplementasikan interface adalah,

public class Person implements PersonInterface,
   LivingThing, 
          WhateverInterface {
  //beberapa kode di sini
}

Contoh  lain  dari  class  yang  meng-extend  satu  superclass  dan  mengimplementasikan sebuah interface adalah,

public class ComputerScienceStudent extends Student           implements PersonInterface,
                 LivingThing {
//beberapa kode di sini
}

Catatan bahwa sebuah interface bukan bagian dari hirarki pewarisan class. Class yang tidak berhubungan dapat mengimplementasikan interface yang sama.

Polymorphism

Polymorphism merupakan suatu aksi yang memungkinkan pemogram menyampaikan suatu pesan tertentu keluar dari hierarki obyeknya, dimana suatu obyek tersebut yang berbeda memberikan tanggapan ataupun respon terhadap pesan yang sama sesuai dengan sifat masing-masing obyek. Itu berarti, Polymorphism “mempunyai banyak bentuk” yang juga merupakan salah satu sifat class yang memungkinkan sebuah method mempunyai nama yang sama, namun memiliki aksi yang berbeda.
Polymorphism adalah pemikiran bahwa objek dinamis suatu class dasar dapat berperilaku seperti class turunan. Jika objek menunjuk class dasar maka ia perilaku seperti class dasar, dan jika ia menunjuk class turunan ia akan berperilaku seperti class turunan.

Dalam hal ini obkjek memiliki beberapa bentuk, tergantung ia menunjuk kemana. Dalam hal ini suatu objek atau class dan perubahan perilakunya adalah dari kelas dasar ke kelas turunan, tidak bisa objek kelas turunan menunjuk ke kelas dasar. Polimorfisme dimungkinkan karena adanya mekanisme ikatan dinamis, ikatan ini adalah ikatan yang terjadi ketika program dijalankan (run-time), ikatan yang terjadi pada saat compiling disebut ikatan dinamis. Ikatan dinamis hanya akan terjadi antara suatu objek dinamis dengan metode yang dinamis juga, dalam hal ini metode virtual (maya)

Polymorphism berasal dari bahasa Yunani yang berarti banyak bentuk. Dalam PBO, konsep ini memungkinkan digunakannya suatu interface yang sama untuk memerintah objek agar melakukan aksi atau tindakan yang mungkin secara prinsip sama namun secara proses berbeda.
Keuntungan Pemograman dengan menggunakan Polymorphism adalah :

  • Kita dapat menggunakan kelas-kelas yang kita buat (sebagai super kelas) dan membuat kelas kelas baru berdasar superkelas tersebut dengan karakteristik yang lebih khusus dari behaviour umum yang dimiliki superkelas.
  • kita dapat membuat super kelas yang hanya mendefinisikan behaviuor namun tidak memberikan implementasidari metode-metode yang ada.Hal ini berguna jika kita ingin membuat semacam template kelas,kelas semacam ini disebut kelas abstrak karena behaviournya masih abstrak dan belum diimplementasikan.subkelas-subkelas dari kelas semacam ini yang disebut kelas konkret,mengimplementasikan behaviuor abstrak tersebut sesuai dengan kebutuhan masing-masing.
  • Menghindari duplikasi object,kita dapat menciptakan class baru dari class yang sudah ada,sehingga tidak perlu menuliskan code dari nol ataupun mengulangnya, namun tetap bisa menambahkan attribute dan atau method unik dari class itu sendiri. Dalam konsep yang lebih umum sering kali polymorphism disebut dalam istilah satu interface banyak aksi.

Polymorphic dapat berarti banyak bentuk, maksudnya yaitu kita dapat menimpa (override), suatu method, yang berasal dari parent class (super class) dimana object tersebut diturunkan, sehingga memiliki kelakuan yang berbeda.
Pada dasarnya ada 2 tipe polymorphism, yaitu:

1. Static atau trivial

Merupakan, function overloading (penggunaan kembali nama fungi yang sama tapi dgn argumen yang berbeda) yang terbagi dalam 3 signature yaitu:

– Jenis Array
– Letak Array
– Type Array

Contoh function overloading :

 void tambah (int a, int b);
 void tambah(float d, float c);

2. Dynamic atau true
Merupakan function overriding (sebuah fungsi dalam class turunan yang memiliki nama, return type argumen function yang sama dengan fungsi dalam class induk). Menggunakan virtual method.

Pure Virtual Method (tanpa function body)
contoh : virtual void jalan() = 0;

Squasi Virtual Method (ada function body)
contoh : virtual void info() {;}

Contoh Program Polymorphism :

public class cobapolymor {

public static void main(String[] args) {
mencetakdata data = new mencetakdata();

System.out.print(“Cetak Data Tipe String : “);
data.cobacetak(“DKI Jakarta”);

System.out.print(“Cetak Data Tipe Integer : “);
data.cobacetak(1992);

System.out.print(“Cetak Data Tipe Double : “);
data.cobacetak(16.5 / 2);

System.out.print(“Cetak Data Tipe Char : “);
data.cobacetak(‘N’);

 }
 }

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s