java interface ve abstract siniflar arasındaki fark nedir ? neden ve ne zaman kullanılır ?

soruldu: 18 Nis '12, 02:03

kemal_faust's gravatar image

kemal_faust
812122129
cevap kabul oranı: 28%

değiştirildi: 24 Nis '12, 05:34

%C3%B6zcanacar's gravatar image

özcanacar ♦♦
17.2k59183183


Java siniflari bünyesinde sadece metot tanimlamasi yapilabilir. Bu metotlar bünyesinde kod yer alamaz. Bu tür siniflar interface kelimesi ile tanimlanir.

public interface MyInterface
{
    public void log();
}

Abstract siniflar bünyesinde de abstract kelimesi kullanilarak sadece metot tanimlamasi yapilabilir:

public abstract class MyAbstractClass
{
   public abstract void log();
}

Tanimlamis oldugum MyInterface ve MyAbstractClass siniflari yapi olarak aynidir. MyAbstractClass sinifini kullanmak icin extend etmeniz gerekiyor. Buna Java dilinde kalitim (inheritance) deniyor. Bunun yanisira abstract sinif bünyesinde gövdesinde kod olan metotlar da tanimlamaniz mümkün. Interface ve abstract siniflar arasindaki en belirgin farklilik budur.

public abstract class MyAbstractClass
{
   public abstract void log();
   public void myLog(String s)
   {
      System.out.println(s);
   }    
}

API (application programming api) yaparken interface ve abstract siniflar kullanilabilir. Abstract siniflar genelde kalitimi zorunlu kildigi icin kullanimlari tavsiye edilmiyor. Kalitim bakimi ve gelistirilmesi zor kodun olusmasini sagliyor. Ben genelde interface siniflari kullanmayi tercih ediyorum. Lakin kalitimin gerekli oldugu yerlerde de abstract siniflari kullanmaktan cekinmiyorum.

EOF (End Of Fun) Özcan Acar

permanent link

cevaplandı: 18 Nis '12, 03:22

%C3%B6zcanacar's gravatar image

özcanacar ♦♦
17.2k59183183
cevap kabul oranı: 52%

Cevaplara ek olarak:

"Birden fazla kişiden oluşan projelerde sınıfların tasarımları arayüzler üzerinde yapılır. Arayüz tasarımını genellikle takım liderleri yapar. Yazılımcılar ise tasarlanmış arayüzleri uygulamaya geçirirler. Bir başka deyişle yazılımcılar, arayüzler altında formatı verilmiş metotların içini verilen formata göre doldururlar"

gibi bir ifade ile karşılaştım.

Ayrıca bu durumu tecrübe eden var mıdır acaba ?

permanent link

cevaplandı: 18 Nis '12, 07:51

aheng's gravatar image

aheng
2067815
cevap kabul oranı: 7%

2

Hocam "arayüz tasarimini genellikle takim liderleri yapar" cümlenize katilmiyorum. "Yazılımcılar ise tasarlanmış arayüzleri uygulamaya geçirirler." cümlenize de katilamayacagim. Ben programci olarak tasarimi kendim yapamiyorsam, o zaman batsin bu dünya :) Ekip icinde herkes herseyi yapabilmeli.

(18 Nis '12, 08:04) özcanacar ♦♦ %C3%B6zcanacar's gravatar image
1

Hocam, ifadeler çalıştığım kaynaktan alınmış ifadelerdi :) Yazar bu şekilde bir not düşmüş. Gerçekte durum nedir bilmiyorum. Sık kullanılan bir yöntem midir diye merakımdan bu şekilde ekleme yapmak istedim :) Aslında size katılmakla beraber, büyük çaplı işlerde(mesela aklıma ilk gelen, gsm firmalarında) uygulanabilir yöntem olarak geldi.

(18 Nis '12, 08:32) aheng aheng's gravatar image
1

Özellikle tecrübeli yazılımcıların, nisbeten daha toy (:)) yazılımcıları bu şekilde yönlendirmesi, en azından yapacağı işin çerçevesini çizmesi, iş bazlı düşünüldüğünde, kalite ve zaman kullanımı açısından kârlı olabilir. Tabi bunları âfakî söylüyorum :) ben de tecrübe etmiş değilim bu durumu.

(18 Nis '12, 08:32) aheng aheng's gravatar image
1

sorry hocam, sonuna dikkat etmemisim. Böyle seylere kulak vermeyelim. Eski selale (waterfall) yöntemlerini andiriyor.

(18 Nis '12, 08:34) özcanacar ♦♦ %C3%B6zcanacar's gravatar image
2

Eyvallah hocam. Bir seminer videonuzu izledikten sonra ne demek istediğiniz daha bir şekillendi. Bu vesile ile videolar için de teşekkür ederim. izlemek isteyen arkadaşlar için: http://vimeo.com/user2981319/videos

(19 Nis '12, 18:22) aheng aheng's gravatar image
-2

Konuyu Özcan hocamız süper açıklamış. UsTa isimli kullanıcı resmen saçmalamış iyice konuyu çorba yapmış.

Bir inteface olmadan projeler daha mı esnek kodlanıyor? Yoksa tam tersi mi?

permanent link

cevaplandı: 10 May '12, 04:47

betulcamsiler's gravatar image

betulcamsiler
160139
cevap kabul oranı: 0%

-4

Interface'i yasalara Uygulayıcı sınıflarını ise yönetmeliklere benzetebiliriz. Abstract sınıflar ise genel olarak baktığımızda hem Interface' ler hem de Uygulayıcı sınıflar arasında ara katman olarak kullanılıyor. Interface içerisinde bulunan gövdesiz yordamların ya bildiğimiz normal java sınıflarında ya da abstract sınıflarda uygulanması, gövde katılması gerekiyor. Bir interface' i uygulayacak farklı farklı uygulayıcı sınıflar olabileceğini düşünürsek, interface içersinde bulunan gövdesiz yordamlardan, farklı uygulayıcılara göre değişmeyenler, yani aynı görevi icra edenler, abstract sınıflara aktarılıyor, bu sayede her uygulayıcı sınıfta aynı fonksiyonu yerine getiren yordamlar tek noktada toplanmış oluyor. Benim gördüğüm kullanılış mantığı bu şekilde. Başka amaçlarla kullanılışı da olabilir. Aşağıdaki örnekte örneğin, Set arayüzünden 3 yordam soyut sınıf içinde uygulanmış, geri kalanları da TreeSet sınıfı içinde uygulanmış. İşte bu 3 yordam, genelgeçer olarak düşünülen, implementasyonuna göre kolay kolay değişmeyeceği varsayılan yordamlardır.

alt text

permanent link

cevaplandı: 18 Nis '12, 03:50

UsTa's gravatar image

UsTa
2.0k925
cevap kabul oranı: 20%

Birader kusura bakma ama kafayı çok karıştırmışsın.

(10 May '12, 04:48) betulcamsiler betulcamsiler's gravatar image

Hikaye anlatmadım, Java içerisindeki kütüphanelerde nasıl kullanılıyor ondan bahsettim. Yanlış noktaları belirtebilirsen düzelteyim, ya da daha güzelini yazabilirsin. Daha mı esnek kullanılıyor felan demişsin, çok iyi anlamışsın mübarek. Biraz örneğime kafa yoraydın sorun olmazdı.

(10 May '12, 05:32) UsTa UsTa's gravatar image
1

Türk kullanicilardan rica ediyorum, yazma üslubumuza dikkat edelim. Herkes istedigi sekilde fikrini beyan etmekte serbest, lakin bunu insanlari kirici, kizdirici tarzda olmadan yapmaya dikkat edelim.

(10 May '12, 05:48) özcanacar ♦♦ %C3%B6zcanacar's gravatar image
Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×1,076
×11
×4
×2

Soruldu: 18 Nis '12, 02:03

Görüntüleme: 4,970 kez

Son güncelleme: 02 Nis, 18:59

powered by BitNami OSQA