Merhabalar arkadaşlar, Sitemizi programlama ile ilgilenen bütün arkadaşlarımızın türkçe içerik konusunda çektiği sıkıntılar düşünülerek soru/cevap şeklinde bir etkileşimde bulunabilmesi için kurduk. Umuyoruz hepimiz için güzel bir deneyim olur. Hasscript Ekibi
0 oy
33 gösterim
Program yazarken neden interface kullanıyoruz? Aslında tam olarak ne anlama geliyor açıklayabilir misiniz?
Java kategorisinde (115 puan) sordu
yeniden etikenlendirildi

1 cevap

0 oy
 
En İyi Cevap

Ben interface (arayüz) kavramını hep kariyer.net üzerindeki iş ilanlarına benzetirim. Bence duruma çok güzel uyum sağlıyor. Mesela bir iş üzerinden yola çıkalım.

Mesela bir arazi aldık ve bu araziye kendimize ait bir ev yapacağız. Kenarda maddi kaynaklarımız var diye düşünelim (ram/cpu/vs.). Fazla uzatmadan devam edelim. Bize temel kazmak için bir kepçe lazım. Temeli atmak için temel ustası lazım. Sonra duvar ustası, birkaç usta daha, en son da boya ustası diyelim. Şimdi basitçe programını yazalım.

Öncelikle bu ustaların işlerini belirleyelim. 

interface Kepce { void temelKaz(); }
interface TemelUstasi { void temelDok();}
interface DuvarUstasi { void duvarCek();}
interface BoyaUstasi { void duvarlariBoya(); }

Şimdi elimizde ustaların ne iş yapacağına dair bilgiler var. Artık evi yapabilir miyiz? Aşağıdaki kodları çağırırsak evi yapmış olmayı planlıyoruz. 

void evYapiyoruz() {
    kepce.temelKaz();
    temelUstasi.temelDok();
   duvarUstasi.duvarCek();
   .......
   boyaci.duvarlariBoya();
}

Yazdık ve çağırdık ne olur? Direk yazma anında ya da derleme anında bu interface tanımlarını yapmışsın ama hiçbirisi gerçekleştirimi yok diye hata alırız. Yani işin tanımı belli ama nasıl yapılacağı belli değil. Bu normal bir iş verenin yani bizim çıkardığımız bir iş ihtiyaçları listesi. Keza elimizde böyle bir liste yaparak ev yapamayız. Peki ne olacak? Biz bu işlemlerini yaptığını idda eden insanları işe alacağız. Yani Kenan, Ahmet, Mehmet, .... Peki bunlarda aradığımız nokta ne olacak? Yukarıda interface olarak belirlediklerimizden en az bir ya da birkaçını gerçekleştirebildiklerini (implementation) bize söylemeleri gerekiyor. Nasıl yapıyoruz? Bakalım.

class CATKepce implements Kepce {.....}
class Temelci implements TemelUstasi {.....}
class Duvarci implements DuvarUstasi {.....}
class TanidikBoyaci implements BoyaUstasi {.....}

Sınıfların içinde ne yazdığını vermiyorum, keza eclipse, netbeans kullanıyorsanız size hemen şunları yazın diyecekler. Yani fonksiyonların nasıl çalıştığını yazacağız. Asıl kilit noktamız en sonra yatıyor. Kim neyi yapıyor nasıl belirliyoruz? EvYapıyoruz adındaki metodun olduğu yere de Islem diyelim.

class Islem {
      Kepce arkadasinKepcesi = new CATKepce();
     TemelUstasi karadenizliTemel = new Temelci();
     DuvarUstasi malleninDuvarcisi = new Duvarci();
     BoyaUstasi amcaOglu = new TanidikBoyaci();

  void evYapiyoruz() {
      arkadasinKepcesi .temelKaz();
      karadenizliTemel .temelDok();
      malleninDuvarcisi .duvarCek();
      .......
      amcaOglu .duvarlariBoya();
  }
}

Yavaş yavaş bitirelim. Şu anda en son atama/yaratma olduğu kısımda dikkati ne çekiyor? 

Atamanın sağındaki ve solundaki tiplerin çekmesi lazım. Sol tarafta kullandığımız tipler; bizim en başta belirlediğimiz, kişilerden ne istediğimiz değil mi? Sağındakiler ise Aslında o işleri yapan kişiler. 

Dikkat edilecek nokta ise TanidikBoyaci dediğimiz arkadaşın esas mesleği belki de boyacılık değil. Belki güzel saz çalıyor. Belki güzel araba kullanıyor. Bizi ilgilendiren kısmı boya yapması ve bu elemanı boya yapsın diye işe aldık. Bizim sözleşmemiz (BoyaUstasi) üzerinden bu elemana sazCal komutunu gönderemeyiz!! Ne bekliyorsak onu göndeririz. Direk ustayı tanıyorsanız ve size o elemanın kendi lazımsa o zaman eşitliğin sol tarafına bana BoyaUstasi lazım demeyin! direk TanidikBoyaci kenan = new TanidikBoyaci() deyin. Sapla samanı karıştırmanın lüzumu yok.

İyi çalışmalar.

(3.1k puan) cevapladı
seçti

İlgili sorular

0 oy
1 cevap 64 gösterim
0 oy
1 cevap 64 gösterim
64 gösterim 15 Kasım 2016 Java kategorisinde kambala (115 puan) sordu
0 oy
1 cevap 27 gösterim
27 gösterim 9 Ocak Java kategorisinde kenan (3.1k puan) sordu
0 oy
1 cevap 102 gösterim
0 oy
1 cevap 22 gösterim
...