Menu

4 Aralık 2008 Perşembe

Java Interface

Interface Kavram?
Yaz?lan programramlarda Interface'lerin kullan?lmas?, dahas? OOP(Object Oriented Programming) kurallar?na uygun olarak kod yaz?lmas?, ilk olarak kod miktar? buyudukce yaz?lan class'lar?n hangi islevleri yerine getirdiginin bilinmek istenmesi sorununa futi kardesimin de dedigi gibi bir cevap olabilir.
Kodunuzda interface kullan?m?na giderseniz, size en buyuk yararlar?ndan biri, kabaca class'lar?n ne ise yarad?g?n?n kolayca ogrenilebilmesi de diyebilecegimiz, koda butun parcalar halinde bakabilmektir.Burdan kast etmek istedigim sey su; yazd?g?n?z program? tek bas?n?za gelistiriyorsan?z ve kod karmasas? da dusukse belki direkt faydas?n? goremeyebilirsiniz ancak bir tak?m halinde kod gelistiriyorsan?z buyuk bir class'?n tek bak?sta hangi islevleri yerine getirebildigini sizden baska birilerinin hemen kavrayabilmesi zor olabilir
Simdi ogulun babadan aldigi genlerin ilk etapla implementle ili$kisi yok. Oraya gelecegiz. Cünkü implement büyükbabayla baba arasinda.

Interface, icinde metod isimleri bulunan bir zorunluluk listesi gibidir. O interface'i implement eden sinif interface'in icinde adi gecen metodlarin hepsini gercellemek (to implement) zorundadir.

Yani Interface gen kalitimindan öte bir vasiyet gibidir. Büyük baba babaya eger benim oglum olmayi kabul ediyorsan bu $artlari (interface'deki metodlari) gercekle$tirmek zorundasin der. Baba Implements sözcügü ile bu vasiyeti kabul etmi$ olur ve $artlari (yani interface metodlarini) gercekle$tirir.

Extends ise cocugun babasindan dolayi sahip oldugu $eylerdir. Mesela cocugun kendine ait evi olmasi gerekmez. Cünkü babasinin evi vardir ve orada uyur. Babasinin evini, limuzinini, bankadaki parasini kullanir. Bunlar kendisine ait degildir ama babasin oldugu icin kullanma hakkina sahiptir. Bunlar tamamen babanin kendi kazanip edindigi mallar da olabilir, implements yoluyla büyükbabadan miras kalmi$ da olabilir. Cocuk icin hepsi aynidir. Sonucta nereden gelmi$ olursa olsun bu mallar babasinindir ve hepsinde kendisi de kullanim hakkina sahiptir.

Java'da interface, bir class'ta olmas? gereken method ve property'leri tan?mlayan yap?d?r. Kendisi normal bir class degildir, sadece neyin yap?lacag?n? gostermekte, ancak nas?l yap?lacag?n? gostermemektedir. Ornek olarak, bir madde'de ne gibi islevler ve ozellikler olmas? gerektigini belirten bir interface yazal?m.

Matter.javaIndir Goster Gizle Kopar Sat?r Gizle Sat?r Goster

public interface Matter{
public double getVolume();
public double getMass();
}


Bu ifade, 'bir maddenin yogunlugu, hacmi ve kutlesi olur' demenin Java'daki yoludur. Ancak goruldugu gibi maddenin yogunlugu nas?l hesaplan?r, kutlesi nas?l verilir, hic bir sekilde belirtmemektedir. Sadece ne olmas? gerktigini soylemektedir.

Interface'in Implementation'u
Bir class'?n interface'deki butun method'lar? icerdigini, gerceklestirdigini belirtmesine implementation denir ve 'implements' keyword'uyle kullan?l?r.

CubeMatter.javaIndir Goster Gizle Kopar Sat?r Gizle Sat?r Goster

public class CubeMatter implements Matter{
public double density=1.0;
public double edge=1.0;
public double getDensity(){
return density;
}
public double getVolume(){
return edge*edge*edge;
}
public double getMass(){
return density*edge*edge*edge;
}
}


Burada "Kup diye bir nesnemiz var ve o bir maddedir, yani bir maddede olabilecek butun nitelikler onda da bulunur." demis olduk ve bunlar?n nas?l hesapland?g?n? gosterdik. Ayn? interface'i implement eden baska bir class'da yap?labilir.

SphereMatter.javaIndir Goster Gizle Kopar Sat?r Gizle Sat?r Goster

public class SphereMatter implements Matter{
public double density=1.0;
public double radius=1.0;
public double getDensity(){
return density;
}
public double getVolume(){
return (3.14 * radius * radius * radius )/3;
}
public double getMass(){
return density*(3.14 * radius * radius * radius )/3;
}
}
Goruldugu gib bu class'da ayn? interface implement ediyor. Ancak hacim ve kutle hesaplamas? cok degisik
interfacle`rin nasil bi kolaylik sagladigini asagidaki adreste cok guzel anlatilmis
http://jtpd.org/docs/strategy_design_pattern.pdf
----
Interfaceeri kullanmak icin icin bi kac ornek yazalim
public interface DoIt {
void doSomething(int i, double x);
int doSomethingElse(String s);
}

public interface DoIt {

void doSomething(int i, double x);
int doSomethingElse(String s);
boolean didItWork(int i, double x, String s);

}

public interface DoItPlus extends DoIt {

boolean didItWork(int i, double x, String s);

}
Bunlarda interfaceleri tekrar nasil kullanabiliriz onlar hakkinda bi kac ornekdi :), Ama sunu soylemek istiyorum ki java ogrenebicegimiz en iyi yer Sun`nin itesidir.
Interfacelerin anlatildigi bolumun linki asagisdadir,
http://java.sun.com/docs/books/tutorial/java/IandI/interfaceAsType.html

1 yorum: