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, 06:27

juanov's gravatar image

juanov
455465555
cevap kabul oranı: 33%


Ö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, 17:50

acemi's gravatar image

acemi
8702515
cevap kabul oranı: 36%

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, 02:19

ArnesTwin's gravatar image

ArnesTwin
1.1k1511
cevap kabul oranı: 14%

değiştirildi: 22 Ağu, 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, 15:35

juanov's gravatar image

juanov
455465555
cevap kabul oranı: 33%

Cevabınız
toggle preview

powered by BitNami OSQA