Serdar YILMAZ / Software Developer
Bizimkisi Bir “Bug” Hikayesi...
Akbank Bankacılık Merkezi
Serdar Yılmaz C# – Arayüzler

C# – Arayüzler

.netArayüzler, sınıflara rehberlik etmek üzere oluşturulan nesneye dayalı programlamanın en önemli özelliklerinden biridir. Sınıfların hangi metotları ve özellikleri içermesi gerektiğini arayüzler içerisinde bildiriyoruz.

Arayüz Oluşturma

Arayüzler “interface” anahtar sözcüğü ile oluşturulur. Zorunlu olmamakla birlikte arayüz isimleri genellikle “I” harfiyle başlatılır. Böylece “I” ön ekini gören bir programcı onun bir arayüz olduğunu anlar. Arayüz içerisinde özelliklerin ve metotların sadece bildirimi yapılır. Yani herhangi bir şekilde özelliklere bir değer atanmaz sadece türleri ve isimleri yazılır, aynı şekilde metotların içerisine kodlar yazılmaz sadece geri dönüş türleri ve isimleri yazılır. 

Arayüzlerin Sınıflara İmplement Edilmesi

IKisi arayüzü, Yonetici sınıfına implement edildiği için (1.Satır) Yonetici sınıfı, IKisi arayüzünde bildirimi yapılmış olan özellikleri ve metotları içermek zorundadır. Yonetici sınıfı içerisine, IKisi arayüzünde bildirimi yapılmış metotlar ve özellikler haricinde Yonetici sınıfına has metotlar ve özellikler de tanımlanabilir. 

Arayüzlere Neden İhtiyaç Duyarız?

Arayüzlerin geniş bir kullanım alanı bulunmaktadır. Basit bir örnek üzerinden anlatacak olursak; 

Arayüz kullanımı sınıflarımızı bir standart çerçevesinde yapılandırmamızı sağlamaktadır. IKisi arayüzünün Isci ve Yonetici sınıflarına implement edildiğini gören bir programcı, bu sınıfların içerisinde adSoyad, adres, departman gibi özelliklerin olduğunu ve bu özelliklere erişilerek gerekli bilgilerin alınabileceğini bilecektir.

Örneğin, Yonetici ve Isci sınıflarından oluşturulan nesnelerin içerisindeki adSoyad özelliğini ekrana yazdıran bir metot yazalım. Arayüzlerin sağlamış olduğu kolaylıktan faydalanmıyor olsaydık bu işlemi aşağıdaki gibi yapıyor olurduk;

İki farklı metot tanımlamamız gerekirdi. Bu metotlardan biri Yonetici sınıfı türünden parametre alırken, diğeri Isci sınıfı türünden parametre alırdı. Ancak arayüzler sayesinde bu işlemi tek bir metot yazarak yapabiliriz.

IKisi arayüzü, Yonetici ve Isci sınıflarına implement edildiği için bu sınıflardan oluşturulan nesneler, IKisi arayüzü türündeki bir parametrede tutulabilir. Bu yüzden adSoyadBilgisi() metoduna parametre olarak Yonetici veya Isci sınıfından oluşturulan nesneleri gönderebiliriz. Bu parametre aracılığı ile ilgili nesnelerin sadece IKisi arayüzünden gelen özellik ve metotlarına erişebiliriz.

Çoklu İmplementasyon 

Bir sınıfa birden fazla arayüz implement edilebilir. Örnek bir senaryo üzerinden konuyu anlatacak olursak; Bir fabrika için otomasyon programı yazdığımızı düşünelim. Fabrikada 3 farklı çalışan türü olsun, bunlar yönetici, işçi ve robot. Her bir çalışanın ID, ad-soyad, adres, maaş, departman ve toplam çalışma saati bilgisi olsun. 

Eğer arayüz tasarımını yukarıdaki gibi yaparsak ICalisan arayüzünü, oluşturacağımız Yonetici ve Isci sınıflarına implement edebiliriz ancak Robot sınıfına implement edemeyiz. Çünkü robotların adlarının ve adreslerinin olmayacağını ve maaş almayacaklarını biliyoruz. Bu yüzden ICalisan arayüzünü uygun bir şekilde parçalamamız gerekiyor. 

ICalisan ve IKisi şeklinde iki arayüz oluşturduk. Yöneticiler ve işçiler hem çalışan hemde birer kişi olduğundan, bu sınıflara hem ICalisan arayüzünü hem de IKisi arayüzünü imlement edeceğiz. Robot sınıfına ise sadece ICalisan arayüzünü implement edeceğiz. 

Kurumsal Mimarilerde Arayüz Kullanımı

Daha önce kurumsal mimaride bir uygulama geliştirmediyseniz bu bölümü şimdilik atlayabilirsiniz. 

Bu başlıkta olabildiğince yalın bir şekilde arayüzlerin kurumsal mimarilerde ki kullanımına bir örnek vermeye çalışacağım. Kod kalabalığını arttırmamak ve konuyu daha anlaşılır bir şekilde anlatmak için sınıfları karışıklığa yer vermeyecek şekilde isimlendirip, konumuzun dışında olan kod satırlarına/bloklarına (veritabanı sorguları) yer vermemeye çalışacağım.

Bir projede farklı veritabanı yönetim sistemleri kullanılabilir. Projelerimizi bizden fazla veritabanı yönetim sistemine destek verecek şekilde geliştirebilmek için arayüzlerden faydalanabiliriz. 

Öncelikle IRepository adını verdiğimiz arayüzün içerisinde, veritabanı üzerinde ekleme, silme, güncelleme, kaydetme gibi temel işlemleri yapacak metotların bildirimini yapıyoruz. Sonra bu arayüzü, farklı veritabanı yönetim sistemleri üzerinde işlem yapacak olan sınıflara implement ediyoruz. 

Projemizin hem Oracle veritabanına hemde MsSQL veritabanına destek vermesini istiyorsak; IRepository arayüzü içerisinde bildirimi yapılan metotları, OracleDB sınıfında Oracle vertabanında işlem yapacak şekilde, MsSQLDB sınıfında MsSQL veritabanında işlem yapacak şekilde yazmamız gerekiyor.

MsSQLDB ve OracleDB sınıfları ile artık hem MsSQL veritabanında hem de Oracle veritabanında işlem yapabiliyoruz.

Son olarak ExampleManager isimli bir sınıf oluşturuyoruz, bu sınıftan nesne oluştururken yapıcı metoduna parametre olarak MsSQLDB sınıfından bir nesne gönderirsek ekleme, silme, güncelleme, kaydetme işlemini MsSQL veritabanı üzerinde yapacaktır, OracleDB sınıfından bir nesne gönderirsek de Oracle veritabanı üzerinde yapacaktır. 

Ekran Çıktısı:

Serdar YILMAZ


Bu İçeriği Arkadaşlarınızla Paylaşmak İster misiniz?

1 Yorum

  1. Nurettin
    17 Mayıs 2019 de 14:59 · Cevapla

    Harika. Ellerine sağlık

Bir Yorum Yapın