Pages

Jumat, 09 Desember 2011

Interface(PBO)

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.


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. Abstract Class

Berikut  ini  adalah  perbedaan  utama  antara  sebuah  interface  dan  sebuah  class  abstract:
method  interface  tidak  punya  tubuh,  sebuah  interface  hanya  dapat  mendefinisikan
konstanta  dan  interface  tidak  langsung  mewariskan  hubungan  dengan  class  istimewa
lainnya, mereka didefinisikan secara independent.

Interface beda dengan 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.   

Yuk, Membuat Interface

Untuk membuat interface, kita tulis,

  public interface [InterfaceName]
  {
    //beberapa method tanpa isi
    }  

Sebagai contoh, mari kita membuat sebuah interface yang mendefinisikan hubungan antara
dua object menurut  urutan asli dari object.

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

 Sekarang, penggunaan interface, kita gunakan kata kunci implements. Contohnya,

/**
 * Class ini mendefinisikan segmen garis
 */
public class Line implements Relation
{
  private double x1;
  private double x2;
  private double y1;
  private double y2;

public Line(double x1, double x2, double y1, double y2){
    this.x1 = x1;  
    this.x2 = x2;  
    this.y1 = y1;  
    this.y2 = y2;  
  }  
  public double getLength(){
      double length = Math.sqrt((x2-x1)*(x2-x1) + 
            (y2-y1)* (y2-y1));  
    return length;
  }
  
  public boolean isGreater( Object a, Object b){
    double aLen = ((Line)a).getLength();
    double bLen = ((Line)b).getLength();
    return (aLen > bLen);
  }
  
  public boolean isLess( Object a, Object b){
    double aLen = ((Line)a).getLength();
    double bLen = ((Line)b).getLength();
    return (aLen < bLen);
    
  }
  
  public boolean isEqual( Object a, Object b){
    double aLen = ((Line)a).getLength();
    double bLen = ((Line)b).getLength();
    return (aLen == bLen);
  }    
  }

Ketika class Anda mencoba mengimplementasikan sebuah interface, selalu pastikan bahwa
Anda  mengimplementasikan  semua  method  dari  interface,  jika  tidak,  Anda  akan
menemukan kesalahan ini,
  
Line.java:4: Line is not abstract and does not override abstract
method   isGreater(java.lang.Object,java.lang.Object) in
Relation
public class Line implements Relation
       ^
 1 error

Hubungan Interface dengan 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.

 Pewarisan antar Interface

Interface  bukan  bagian  dari  hirarki  class.  Bagaimanapun,  interface  dapat  mempunyai
hubungan  pewarisan  antara  mereka  sendiri.  Contohnya,  misal  kita  punya  dua  interface
StudentInterface  dan  PersonInterface.  Jika  StudentInterface  meng-extend
PersonInterface, maka ia akan mewariskan semua deklarasi method dalam PersonInterface.

public interface PersonInterface {
  . . .
}

public interface StudentInterface extends PersonInterface {
  . . .
  }

0 komentar:

Posting Komentar

 

(c)2009 PD-Child. Based in Wordpress by wpthemesfree Created by Templates for Blogger