JavaSE Inheritance and Interface Bölüm-1

Java da Arayüz sözleşmeleri ve Kalıtım

INTERFACES NEDIR? NASIL TANIMLANIR?

Interfaces, arayüzler; bir yazılım işinde farklı programcı gruplarının yazılım ile nasıl etkileşime geçeceğini belirleyen sözleşmelerdir. Burada anlaşılması gereken konu, farklı grup programcıların bir birlerinin yazdığı kodlar hakkında hiçbir fikri olmasa dahi kodunu yazabilmesidir.

  Bir interface tanımlamak bir class tanımlamaya benzer, sadece tanım başına «interface» ifadesi konulur. Interface içine tanımlanan methodlar genel tanımı içerir, method gövdesi kodlanmaz.

 

INTERFACE KALITIM ALMASI VE ALINMASI

Interfaces, arayüzler; kendileri başka interface lerden kalıtım alabilirler. İhtiyaca göre belirlenerek kalıtım almaları sağlanır. Ancak genelde interface ler bir kalıp oldukları için yazılım ekipleri tarafından implament edilerek kullanılırlar.

INTERFACE KULLANIM

Interfaces, arayüzler; kalıtım alındıktan sonra, kalıtım alan sınıflar ayni türden olmak şartı ile o sınıflardan türetilen nesneler tarafında kullanılabilir methodlar yazılır. Yani object tipinde refere edilen nesneler aynı interface i kalıtım alırlar ise aynı methodları kullandıkları için o methodlar üzerinden ortak bir çatı kurulabilir.

EVOLVING INTERFACE, ÖNEMLİ HUSUSLAR

Interfaces, arayüzler; Genelde değişmezler, yani bir arayüzü uyguladığınız zaman onu bir çok programcı kullanacaktır ve güvenecektir. Örneğin bir arayüzü 100 programcı farklı 50 sınıfta kullanıyor diyelim, siz yeni bir metod eklediğiniz zaman 500 sınıfta değişiklik yapılmak zorunda kalacaktır. Bu nedenle uygulamaya başlamadan önce arayüzler iyi belirlenmeli ona göre kodlanmalıdır.

  Peki, arayüzede değişiklik yapmak istemeseniz dahi yeni eklenmesi gereken metodlar çıktı ve eklemek zorundasınız diyelim böyle bir durumda n yapacaksınız.

  Böyle bir durumda en mantıklı olan yeni bir arayüz(interface) declare etmektir. Yani mevcut arayüzü implement eden ve eklenmesi gereken kodları içeren yeni bir arayüz oluşturnak. Böylece isteyen programcı yeni arayüzü implement ederek kullanmaya başlayabilir. Eski kullanıcılar da zarar görmemiş olur.

Mevcut interface miz şöyle olsun

Mevcut interface i extend eden yeni interface de şu şekilde olacaktır.

Peki bunun dışında bir yöntem var mıdır? Tabiki ek olarak kullanabileceğimiz bir yöntem daha var o da «default» parametresi ile kullanılan tanımlamalardır.

USING DEFAULT

NOT: Buradan sonra kullanılan argümanlar, Oracle default tutorial tarafından eğitim içerikleri örneklenerek oluşturulmuştur. Orijinal kodlamalar ORACLE javaSE Tutorial içinde bulunabilir.

Bu konuyu iyi kavrayabilmek için şöyle bir örneklem yapmak yerinde olacaktır. Bir otomobil üreticisi için program kaynağı sağlayan bir firma düşünün, bu firma yeni konsept olarak arabalarına yeni bir özellik eklemek istiyor.  Uçan araba yapmak istiyor. Böyle bir durumda default interface e yeni bir özellik eklemek tüm sınıfları etkileyecek ve gerekli olamayan sınıflar bile bu yeni özelliği kodlamak zorunda kalacaklardır.

  Programcı temel interface bu yeni özelliği static bir yöntem olarak ekler ise, bu seferde programcılar bu yeni yöntemi ana işlev değil yardımcı bir argüman olarak tanıyacak ve kodlamayacaklardır.

  Default yöntem kullanımı, paket ve sınıflarımızın arabirimlerine yeni işlevler ekleyebilmemizi ve önceki sürümlerimizle uyumlu kodlamalar yapabilmemizi sağlayacaktır.

Şöyle bir Interace olsun elimizde, Tarih Saat işlemlerini yapabileceğimiz bir Interface.

Mevcut bu interface e yeni bir özellik eklemek isteyelim ve şöyle olsun

Böyle bir ekleme yaptığımız vakit, bu arayüzü implement eden tüm sınıflar bunu kodlamak zorundadırlar. Bu nedenle bunun yeride default idadesini koyarak aslından interface yazılmlarında olmayan metod gövdesinin kodlanması da sağlanmış olacaktır.

Default Bildirim ile yeni interface görünümü şöyle olacaktır.

Kodlamada görüldüğü gibi interface içine yazmış olduğumuz statik metod un gövdesi kodlanabilir ve hata syntax hatası vermeyecektir.

  Ayrıda asıl konumuz olan «default» kullanımında da metod gövdesini yazmak sorun teşkil etmemektedir. Ayrıca artık bu interface i implament eden sınıflar bu yeni metod u kodlamak zorunda değiller.

 

DEFAULT İÇEREN ARAYÜZLERİ GENİŞLETMEK

Default ifade içeren arayüzleri genişletmek için 3 ayrı yöntem kullanabilirsiniz.

•Yeni interface içinde default kullanıma hiç değinmeyin

  • Default metod u yeniden yazın. (abstract)

  • Mevcut default metodu override edin

JAVASE013_INTERFACES_INHERITANCE

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir