search
Giriş
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
302 gösterim
Program yazarken neden interface kullanıyoruz? Aslında tam olarak ne anlama geliyor açıklayabilir misiniz?
kapalı
Java kategorisinde 115 puan
yeniden etikenlendirildi

1 cevap

2 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.

6.2k puan
seçti

İlgili sorular

0 oy
1 cevap 683 gösterim
683 gösterim
Merhaba, Abstract ile interface arasındaki farkları madde madde yazıyor olsaydık en belirgin olanları neler olurdu ve ayrıca hangi durumlarda neyi kullanmalıyız? Teşekkürler
20 Aralık 2017 Java kategorisinde erkanerkisi 211 puan sordu
0 oy
1 cevap 351 gösterim
351 gösterim
Java OOP'de soyutlama yeteneğini kazandıran Interface'ler ve Abstract Class'lar nedir ? Farkları nedir? Hangi durumlarda hangisi kullanılmalıdır? Bu kavramları bir örnek ile açıklarsak cevabı okuyan insanların aklında kalıcı bir yere sahip olur.
24 Temmuz 2020 Genel Kavramlar kategorisinde furkankahveci 167 puan sordu
0 oy
1 cevap 243 gösterim
243 gösterim
Mikro servis mimarisinde sürekli interface kullanılıyor. Neden interface kullanırız?
29 Nisan 2022 Genel Kavramlar kategorisinde canonka 334 puan sordu
0 oy
1 cevap 89 gösterim
89 gösterim
Tomcat, apache web server bunlar sadece backend aplikasyonlarının endpointlerini yayınlıyor değil mi? Başka ne gibi işlevleri var?
9 Eylül 2022 Web Programlama kategorisinde Furkan Bilsel 138 puan sordu
0 oy
1 cevap 83 gösterim
83 gösterim
Websocket ve gRPC farkı tam olarak nedir?
9 Eylül 2022 Web Programlama kategorisinde Furkan Bilsel 138 puan sordu