JAVA ProgramlamaYazılım Mühendisliği

Arayüzler (Interfaces)

image_pdfimage_print

Java’da arayüz soyut sınıf yerine kullanılır, ama soyut sınıftan farklı ve daha kullanışlıdır. Arayüz kullanarak, bir sınıfın neler yapacağını belirlerken, onları nasıl yapacağını gizleyebiliriz. Arayüzün yapısı sınıfın yapısına benzese de aralarında önemli farklar vardır.

  • Arayüz ,interfaceanahtar sözcüğü ile tanımlanır. Arayüz abstract(soyut) metotlar içerir.
  • Arayüz, anlık (instance) değişkenler içeremez. Ancak, belirtkeleri konmamış olsa bile, arayüz içindeki  değişkenler final ve staticolur. Bu demektir ki, arayüzde tanımlanan değişkenler, onu çağıran sınıflar tarafından değiştirilemez.
  • Arayüz, yalnızca publicve ön-tanımlı (dafault) erişim belirtkesi alabilir, başka erişim belirtkesi alamaz.
  • publicdamgalı arayüzpublicdamgalı class gibidir. Her kod ona erişebilir. 
  • Erişim damgasız arayüz, erişim damgasız class gibidir. Bu durumda, arayüze, ait olduğu paket içindeki bütün kodlar ona erişebilir. Paket dışındaki kodlar erişemez.
  • Arayüzpublicerişim belirtkesi ile nitelenmişse, içindeki bütün metotlar ve değişkenler otomatik olarak publicnitelemesine sahip olur.
  • Bir sınıf birden çok arayüze çağırabilir (implement).
  • Aynı arayüzü birden çok sınıf çağırabilir.
  • Sınıftaki metotlar tam olarak tanımlıdır, ama arayüzde metotların gövdeleri yoktur. Onlar abstract metotlardır. Metodun tipi, adı, parametreleri vardır, ama gövde tanımı yoktur; yani yaptığı iş belirli değildir. Metotların gövdesi, o arayüzü çağıran sınıf içinde yapılır. Böylece bir metot, farklı sınıflarda farklı tanımlanabilir. Bu özelik, Java’da polymorphismi olanaklı kılan önemli bir niteliktir.

Arayüz’ün yapısı

Erişim-belirtkesi ya public olur ya da hiç konmaz, o zaman default erişim etkin olur.

Şimdi Java dilinde yazılmış bir arayüzü inceleyelim.

 

Yukarıdaki örnekte örneğin bir insan’ın sofor olabilmesi için araba kullanması gerektiği anlatılmıştır. Bunun kullanımı aşağıdaki şekilde olabilir:

Örnekte bulunan taksici sınıfı (class) insan sınıfını miras almış aynı zamanda sofor arayüzünün kurallarına uyduğunu belirtmiştir. Buna göre sofor sınıfında bulunan soyut (abstractmetodu barındırmak zorundadır.

Bu özellik JAVA dilinde birden fazla sınıfın miras alınamamasına (multiple inheritance) bir çözüm olarak da kullanılabilir.

Örneğin yeni tanımlayacağımız bir sınıfın hem Thread hem de Applet sınıflarından miras almasını isteyelim (yani hem thread hem de applet olmasını istiyoruz). Bu durumda tek bir sınıfı inherit edebileceğimiz için diğerini implements etmemiz gerekir.

Örnek kodda Runnable arayüzü kullanan örnek bir deneme sınıfı verilmiştir. Bu sınıfın uyması gereken kural bir run fonksiyonunun bulunmasıdır.  Bu sınıfın bir thread olarak kullanılması için aşağıdaki şekilde bir sınıf tanımına nesneyi parametre geçirmek gerekir:

Thread denemeThread = new Thread(deneme);

Yukarıdaki satırda olan denemeThread isminde yeni bir thread nesnesi tanımlamak ve bu nesneyi deneme sınıfından türetmektir. Bunun olabilmesi için deneme sınıfının Runnable arayüzünü implement etmesi gerekir. Aksi halde thread olarak oluşturulamaz.

Dolayısıyla her ne kadar JAVA da doğrudan çoklu miras (multiple inheritance) yok denilse de bu sorunu çözmek için arayüz kullanımı mümkündür.

Kullanacağımız erişim belirteçleri public, static ve final tipindedir ve de ilk değer ataması zorunludur, tanımladığımız değişkenler daha çok diğer sınıflarda sabit olarak kullanacağımız değişkenlerdir.

Not: Arayüzler direk iş yapamayacaklarından, implement edildikleri sınıflarda override edilmelidirler.

Bir örneği daha inceleyelim.

Çıktı:

Bu örneğimizde 3 adet İnterface tanımladık. Hayvan ve Surungen iç içe olarak, Canli ise tek olarak içlerinde gövdesiz metodlar tanımladık,sonrasında kalıtım ile yeni sınıflar oluşturduk ve metodlarımızı override ederek çağırdık. Mainimiz de yeni nesneler oluşturarak metodlarımızı çağırdık.

Implements

Arayüz tanımlamayı öğrendik. Sınıfların kalıtım işleminde kullandığımız extends anahtar kelimeyi hatırlayın. Ancak arayüzleri kalıtım alırken kullanılacak anahtar kelimesi implements’dir. Arayüzlerin varoluş amacı çoklu kalıtımı sağlamaktır. Dolayısıyla kalıtım için extends ,çoklu kalıtım için ise implements anahtar kelimesi kullanılır.

 

 

 

Arkadaşlar sizlere Arayüzleri anlattım bu kez. Başka konularda görüşmek üzere :))

Pdf olarak paylaşacağım buradan ulaşabilirsiniz.

JAVA-Arayüzler

0
0

Bir cevap yazın

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