Herkese merhaba, Java 8 in getirdiği yenilikleri öğrenmeye çalışıyorum da bir noktada takıldım. Java içinde standart olan functional interfaceler var Runnable,Predicated gibi. Bunları kullanırken lambda expression da kullanmak daha okunabilir kod yazmamızı sağlıyor. Peki functional arayüzün başka ne faydası var?

Yani ben yarın bir interface oluşturduğumda bunu neden functional yapayım? Belki o arayüze ikinci bir metod eklemek isteyeceğim bu değişim bayağı zahmetli olacak. Sadece Lambda yazabilmek için değer mi? Bu konuyla ilgili bilgisi olan üstadlarım yazarsa sevinirim.

soruldu: 21 Ağu '16, 06:27

juanov's gravatar image

juanov
480465656
cevap kabul oranı: 25%


Özellikle -able (-ebilmek) eki ile biten arayüzler genellikle emir kipi ile adlandırılmış tek metod tanımlarlar. Runnable-run, Walkable-walk vb...

İşin teknik tarafı hakkında çok yorum yapamam ancak, Yürüyebilir adlı bir arayüzde yürü adlı bir metoddan başka ne yer alabilir ki? Genel kullanıma açık ve sık kullanılan işlemler için bu tür bir yola gidiyorlar diye düşünüyorum. Örneğin; bir projemde çok sık kullandığım kiralama işlemi için Rentable adlı bir arayüzde yalnızca rent adlı bir metod barındırıyordum. Ürüne ve hizmete göre kiralama şekilleri farklı olduğu için bu arayüzü lambda ile sıkça kullanmıştım.

Amaç "sadece lambda yazabilmek" değil, yerine ve kullanım sıklığına göre bunun gibi nimetlerden yararlanmak olmalı diye düşünüyorum.

Üstadlarımız daha teknik ve detaylı bir açıklama yaparlar sanırım.

permanent link

cevaplandı: 21 Ağu '16, 17:50

acemi's gravatar image

acemi
8953715
cevap kabul oranı: 35%

Aslında tek başına interface şu işe yarar diyebilmek biraz zor. Birden çok kullanımı, birden çok işe yaradığı yerler var. Genel olarak açıklamak gerekirse, iyi bir yazılım mimarisi, mimariyi değiştirmeden modifikasyona izin vermelidir şeklinde tanımlanır. Inheritance, polymorphism, interface vb. dil özellikleri çeşitli şekillerde düzenlenerek bu prensibi destekler biçimde bir mimarinin oluşturulması için kullanılır zaten bu yüzden de yani bu ihtiyaçlardan dolayı ortaya çıkmışlardır.

Basit bir örnek vereyim. IByteOverNetwork diye bir interfaceimiz var ve void send(byte[] buffer) diye bir metoda sahip olsun. Bu send metodu da interface ve metod adından da anlaşılacağı gibi network üzerinden byteları yollasın. Network üzerinden bir şey yollamak için çeşitli protokoller var. Örneğin, http uygulaması TCP protokolü üzerinden haberleşir, skype konuşma özelliği için p2pyi kullanır. Çeşitli broadcast uygulamalarında UDP, RTSP gibi aktarma protokolleri kullanılır. Burada IByteOverNetwork interfacei yapılan işi implementasyondan ayırmış oluyor, yani developer geliştirirken UDP üzerinden mi gönderilicek TCP üzerinden mi gönderilicek o kısmı düşünmüyor veya tek bir aktarma protokülüne bağımlı kalmıyor. Yani burada mimariyi değiştirmeden modifikasyon yapabiliyoruz. Burda diğer ve çok önemli olan interchangebility özelliği de korunmuş oluyor. Terimler biraz karmaşık gelmiş olabilir ama olabildiğince basit anlatmaya çalıştım, eğer ki merak ediyorsanız Design Patterns'la ilgili araştırma yapabilirsiniz. OOP'e bakış açınız değişecek

permanent link

cevaplandı: 22 Ağu '16, 02:19

ArnesTwin's gravatar image

ArnesTwin
1.1k1511
cevap kabul oranı: 14%

değiştirildi: 22 Ağu '16, 03:45

Teşekkür ederim cevaplar için. Kafamda biraz daha şekillendi. Nesnenin esas olarak ezmesi gereken tek bir metod varsa kullanmak mantıklı diye anlıyorum.

permanent link

cevaplandı: 24 Ağu '16, 15:35

juanov's gravatar image

juanov
480465656
cevap kabul oranı: 25%

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,103
×3
×1
×1
×1

Soruldu: 21 Ağu '16, 06:27

Görüntüleme: 236 kez

Son güncelleme: 24 Ağu '16, 15:35

powered by BitNami OSQA