nesneye yönelik programlama gün
geçtikçe daha çok uygulamada kullanım yeri buluyor. günümüzdeki
uygulamaların gittikçe daha gelişmiş ve esnek olması şartı programcıları
ve tasarımcıları bu yöne itiyor.
nesneye yönetlik programlamanın önemli yapılarından biri olan arayüzler
(interface) kavramını bu yazımızda inceleyeceğiz.
arayüzler uygulandığı sınıfa veya
arayüze bir taslak verirler. yani uygulandığı sınıf veya arayüz
taslaktan gelen özellikleri aynen almalıdır. yani arayüzde deneme()
isimli bir metod varsa, uygulandığı sınıfta da aynen bu isimde bir metod
olmalıdır.
arayüzler içinde bulunan metodlarda ve
özelliklerde gövde olmaz. yani sadece metodun ismi ve geri dönüş değeri
gibi bilgiler olurken, o metodun ne yapacağını arayüz bildirmez.
arayüzlerin isimleri genellikle ı
(büyük ı harfi) ile başlar ve böylece diğer yapılardan ayrılırlar; biz
de bu kurala uyarak kodlarımızı yazacağız.
bir arayüz bildirmek için interface
kelimesi kullanılır. aşağıda ıdeneme isimli bir arayüz bildiriyoruz.
interface ıdeneme
{
// arayüz gövdesi
}
arayüzler içinde metodlar
bildirebiliriz.
interface ıdeneme
{
void denememetodu();
int topla(int x, int y);
}
dikkat ettiyseniz metodlarımız için
herhangi bir gövde yazmadık. ayrıca metodlar için public, private gibi
herhangi bir erişim belirteci de kullanmadık. çünkü arayüzlerde bu tür
erişim belirteçleri kullanılmaz; erişim belirteçleri konusundaki
tasarruf arayüzü uygulayan sınıfa ya da arayüze bırakılmıştır.
arayüzler içinde özellikler
(property) bildirebiliriz.
interface ıdeneme
{
void denememetodu();
int topla(int x, int y);
bool ozellik1
{
get;
set;
}
string ozellik2
{
set;
}
int ozellik3
{
get;
}
}
metodlar gibi arayüzler içinde
bildirdiğimiz özelliklerinde herhangi bir erişim belirteci ve gövdesi
yoktur. sadece get, set veya ikisinden birini bildiririz. böylece
arayüzün uygulandığı sınıf veya arayüzde bu özellikler benzer şekilde
yer almalıdır. ancak burada bir notkanın üzerinde durmak istiyorum; eğer
özellikte sadece get; ifadesi yer alıyorsa uygulanan sınıfta veya
arayüzde sadece get; veya hem get; hem de set;
bulunabilir. ancak sadece set; olamaz.
arayüzler içinde alanlar (field)
bildiremeyiz.
interface ıdeneme
{
int sayi; // hata verir
char karakter; // hata verir.
void denememetodu();
int topla(int x, int y);
bool ozellik1
{
get;
set;
}
string ozellik2
{
set;
}
int ozellik3
{
get;
}
}
arayüzler içerisinde normal bir
sınıftaki gibi üye alanlar (field) bildirilemez.
arayüzlerin uygulanması
şu ana kadar arayüzler ile ilgili genel
bilgilere yer verdik. şimdi bir arayüz oluşturup bunu sınıfımıza
uygulayalım. örneğin arayüzümüz dört işlem ile ilgili olsun.
interface ıdortıslem
{
int topla(int x, int y);
int cikar(int x, int y);
int carp(int x, int y);
int bol(int x, int y);
}
tanımladığımız arayüz int
türündeki veriler için dört işlemi sağlayacak olan dört metod bulunuyor.
ancak daha önce de dediğimiz gibi bu işlemlerin nasıl yapılacağı yok.
şimdi dortıslem isimli bir sınıf oluşturup arayüzümüzü bu sınıfa
uygulayalım.
class dortıslem : ıdortıslem
{
}
bu kod ile biz sınıfımıza ıdortıslem
arayüzünü uygulamış olduk. ancak bu hali ile derlemeye çalışırsak
aşağıdaki hataları alırız.
- error 1 'ınterfaces.dortıslem'
does not implement interface member
'ınterfaces.ıdortıslem.topla(int, int)'
- error 2 'ınterfaces.dortıslem'
does not implement interface member
'ınterfaces.ıdortıslem.cikar(int, int)'
- error 3 'ınterfaces.dortıslem'
does not implement interface member 'ınterfaces.ıdortıslem.carp(int,
int)'
- error 4 'ınterfaces.dortıslem'
does not implement interface member 'ınterfaces.ıdortıslem.bol(int,
int)'
bu hataların bize anlattığı arayüzde
tanımladığımız dört metodun sınıfımızda bulunmadığıdır. eğer visual
studio 2005 kullanıyorsanız bu metodları kolay bir şekilde sınıfınıza
uygulayabilirsiniz.

yukarıdaki komutu uyguladıktan sonra
otomatik olarak arayüzünüz sınıfınıza uygulanacaktır ve metodlar
oluşacaktır. şayet visual studio kullanmıyorsanız elle bu metodları
kendiniz de yazabilirsiniz. şimdi bu metodların içine doldurup
deneyelim.class
dortıslem : ıdortıslem
{
public int topla(int x, int y)
{
return x + y;
}
public int cikar(int x, int y)
{
return x - y;
}
public int carp(int x, int y)
{
return x * y;
}
public int bol(int x, int y)
{
if (y == 0)
throw new dividebyzeroexception("sıfıra bölünemez");
return x / y;
}
}
gördüğünüz gibi metodlarımızın içini
sınıfımızda doldurduk. şimdi bu sınıfımızın çalışmasını denemek için
main() metodu içine aşağıdaki kodları yazalım.
dortıslem di = new dortıslem();
console.writeline(di.topla(3,5));
console.writeline(di.cikar(3,5));
console.writeline(di.carp(3,5));
console.writeline(di.bol(10,5));
çalıştırdığınız zaman ekran görüntüsü aşağıdaki gibi olmalıdır.

gördüğünüz gibi arayüzlerin kullanımı
oldukça basittir. kullanımlarının temel amacı uygulanan sınfın içermesi
gereken elemanları zorla bildirmektir; bu özellikle büyük programlar
geliştirilirken farklı gruplar tarafından yazılan kodlarda sorun
çıkmaması için kullanıldığı zaman oldukça verimli olmaktadır.
arayüz