Interface Nedir?
Java dilinde interface adını taşıyan, tasarım şablonlarında ve modellemede kullanılan sınıflar tanımlamak mümkündür. Bir interface normal bir Java sınıfından farksız bir şekilde
tanımlanır. Sınıf tanımlanırken class yerine interface terimi kullanılır.
Nesneye yönelik programlama dillerinde (örneğin C++) tamamen soyut (abstract) sınıflar
tanımlanarak oluşturulabilecek interface benzeri sınıflar için Java dilinde interface ve
implements gibi özel kelimeler mevcuttur. Bu Java diline esnek yazılımlar yapılabilmesi adına büyük zenginlik katmaktadır. Bunun nasıl yapıldığını görmeden önce, bir interface sınıfın ne olduğunu görelim.
Java’da tanımlanmış bir interface sınıftan, normal bir sınıfta olduğu gibi new() operatörü ile
bir nesne oluşturulamaz
Bir interface sınıfında sadece metotlar açıklanır. Bu metotların gövdeleri boştur. Alt sınıflar bu metotların gövdeleri için gerekli kodu oluştururlar (implement ederler). Metot gövdesi olmayan bir interface sınıftan nesne oluşturulamaz, çünkü sadece metot bildirimine sahip bir nesnenin hiçbir işlevsel görevi olamaz
Tekrar başa dönüp interface kavramından ne gibi durumlarda faydalandığımıza örnekler üzerinden bakalım.
At isimli interface tanımlandı.
Bunun yanına arapAti ve ingilizAti gibi iki sınıf da oluşturuyoruz. Bu sınıflar At sınıfını implemente ediyorlar. Bu iki implementasyon sınıfı bünyelerinde getAtinTuru() isminde bir metod oluşturup, bu metodu implemente etmek (metot gövdesi için gerekli kodu oluşturmak) zorundalar.
Herhangi bir Java sınıfı implements direktifini kullanarak, bir interface sınıfının sahip olduğu
metotları implemente edebilir. İmplementasyon ile, interface sınıfının tanımladığı (örneğin
getAtinTuru()) metot gövdelerinin, alt sınıfta (yukardaki örnekte arapAti sınıfı) kodlanmasını kastediyoruz. Buna göre interface sınıflarında sadece metodlar belirtilir ve
implemente edilemez. İmplementasyonu altsınıflar üstlenir
TestAt bünyesinde atNesne.getAtinTuru() metodu kullanılıyor. Bu metot, arapAti ve ingilizAti sınıflarında implemente edildiği için , new arapAti () yada new ingilizAti() ile TestAt sınıfına, At interface sınıfının verdiği sözü tutan bir sınıftan elde edilmiş bir nesneyi verebiliriz.
Bir interface aslında dış dünyaya verilen bir söz metnidir. Bir interface sınıf bünyesinde metotlar tanımlar. Interface sınıfı kullanan diğer sınıflar ise bu metodları kullanarak, gerekli işlemleri yaparlar
arapAti sınıfının, At interface tarafından sunulan getAtinTuru() metodunu implemente etmesi, yani metod gövdesini oluşturması gerekiyor. Aksi taktirde arapAti bir AT olamaz.
Interface kullanıcısı genelde hangi altsınıf üzerinden gereken hizmeti aldığını bilmez, bilmek zorunda değildir. Bu sayede “loose coupling“ olarak tabir edilen, servis sağlayıcı ve kullanıcı arasında gevşek bir bağımlılık oluşturulmuş olur. Bu yazılım mimarisi açısından büyük bir avantaj sağlamaktadır. Interface sınıflar kullanılarak, sisteme esnek ve ilerde servis kullanıcılarını etkilemeden eklemeler yapılabilir.
Örneğin ilerleyen zamanda Midilli atı cinsinde bir at daha eklenmek istenebilir. Burada yapılması gereken, sadece Midilli atı isminde bir alt sınıf oluşturup, At interface sınıfını implemente etmektir. Bu şekilde sistemi, diğer bölümleri etkilemeden genişletmiş oluyoruz.
Kısaca interface sınıflar, servis kullanıcılarından, kompleks yapıdaki alt sınıfları saklamak ve
servis sunucusu ve sağlayıcı arasındaki bağımlılığı azaltmak için kullanılır.
Özcan Acar Hocamızın notlarından derlenmiştir.
“Java’da Interface Kavramı” için 8 yanıt
İyi anlatmışsınız teşekkürler işime yaradı 🙂
Sayenizde interface’in ne işe yaradığını öğrendim teşekkürler
Araştırmalarımda 4-5 kaynak arasında bana en faydalı bilgiyi sunan kaynak bu oldu, teşekkürler.
Teşekkür ettim
kısa,öz, güzel anlatım. yüreğinize sağlık 🙂
Güzel anlatım çok teşekkürler
Peki interface’ler neden 100% soyuttur ve abstrac’lar neden 100% soyut değildir. Bu sorunun cevabını merak ediyorum ve araştırıyorum siz cevap vermeden öğrenmiş olurum fakat benden sonrakiler de merak edebilir.
Yazınızı beğendim teşekkür ediyorum.
interface bazen böyle kodlar görüyorum ne anlama geldiğini bulamadım yardımcı olurmusunuz.