msHOWTO

24 Nisan 2012 Salı

C# Object Oriented Interface

Merhaba arkadaşlar.Bu makalemde sizlere object oriented da önemli kavramlardan biri olan interface kavramını elimden geldiğince anlatmaya çalışacağım.

Winamp'ı kullandınız mı bilmiyorum ama duymuş olmalısınız diye düşünüyorum.Media player programıdır.Winamp dışarıdan eklenti(plug-in) kabul edip onu kendi programına entegre edebiliyordu.Ne demek bu peki ? Şu demek oluyor arkadaşlar.Ben evimde otururken winamp'a bir özellik yazıp gönderiyorum.Winamp da bunu kendi programına entegre ediyor veya winamp kullanıcılarından herhangi biri benim yazdığım eklentiyi kendi winamp'ına ekleyip kullanabiliyor ( Tabi düzgün yazdıysam :) ). Peki bu işlem nasıl oluyor arkadaşlar ? Winamp benim yazdığım eklentiyi nasıl anlayıp da kendine ekleme yapıyor ? Ve ya ben winamp'a eklenti yazarken nereye nasıl kod yazacağımı nereden biliyorum ? Ortada öyle bir durum olmalı ki hem benim yazacağım eklentiyi winamp'ın anlaması lazım hem de benim nereye nasıl kod yazacağımı bilmem lazım bu sorunların çözülmesi için.İşte tüm bu sorunları çözmenin bir yolu var.Elbetteki makalemin konusu olan interface. Yani winamp bana bak kardeşim eğer sen bana eklenti yazmak istiyorsan ve benim bunları anlayıp kendime eklenti olarak eklememi istiyorsan benim belirlediğim şartlara uyacaksın demek zorundadır.Yani önüme gerçek hayattaki gibi bir sözleşme sunmalıdır ki ben o sözleşmeye uyayım ve winamp da kendine eklentiyi eklesin herkes mutlu mesut olsun.

Bir başka gerçek hayattan örnek vermek gerekirse en güzel örneklerden biri olan iş ilanlarını örnek olarak verebilirim.Mesela bir yazılım elemanı arayan iş ilanına baktığınızda bir veya birden fazla yazılım dili , aynı şekilde veri tabanı , belli teknolojiler , takım çalışmasına yatkın falan filan gibi aradığı elemanın niteliklerini anlatır.Şimdi bir web tasarımcısının bu ilana başvurması ne kadar doğrudur ? Ne kadar olumlu olarak sonuçlanır ? Hiç bir sonuca varılmaz değil mi ? Aslında iş ilanı bize şunu demektir.Bakın benim istediğim özellikler ve şartlar bunlar.Bunları kabul eden varsa başvursun.İnterface mantığı da aynı bu şekildedir.

Mantığını , neden ve ne amaçla kullanıldığını basit olarak anlattıktan sonra winamp ın bizden istediği sözleşmeyi yani interface i yani daha önceden bizim için hazırladığı şartları biz sözde olarak hazırlayalım ve daha sonra bu interface i kullanarak eklenti yazıp gönderelim .


  interface WinampSozlesme
   {
       void ArkaPlanDegistir(string renk);
       void MuzikEfecti();
       void ButtonRenkleriAyarla();
   }

Evet arkadaşlar winamp'ın bizim kendi üzerinde erişebileceğimiz ve eklenti olarak değişiklik yapabileceğimiz 3 adet method belirlediğini varsayalım.Çok güzel ben bu methodları değiştireceğim ve kendi class'ım olarak winamp'a geri göndereceğim.Peki bu nasıl oluyor? Öncelikle belirtilen interface i benim class ıma implemente etmem gerekmektedir.Bu işlem de inheritance ( kalıtım ) alırken ki işlemle aynısıdır.Tek yapmamız gereken class ismimizin yanına ":" iki nokta koyarak interface in adını vermek olacaktır.Bu işlemi yaptıktan sonra CTRL+. tuşlarına basarsanız aşağıdaki gibi görüntüyle karşılaşacaksınız.


İlk seçeneğe tıkladıktan sonra implemente edilen interface in içerisindeki tüm methodlar otomatik olarak eklenecektir . Daha sonra içerisindeki gerekli işlemleri yapmanız yeterli olacaktır.Bizim örneğimizde ise aşağıdaki gibi olacaktır.

   public class KorayinEklentisi:WinampSozlesme
   {

       public void ArkaPlanDegistir(string renk)
       {
           // Arka planı değiştirmek için gerekli kodlarım
       }

       public void MuzikEfecti()
       {
          // Müzik efekti için gerekli kodlarım
       }

       public void ButtonRenkleriAyarla()
       {
           // Buttonların renklerini değiştirmek için gerekli kodlarım
       }


   }


Gerekli kodlarımı yazdıktan sonra artık class'ımı winamp'a gönderebilirim :) 

Umarım faydalı olmuştur arkadaşlar ... Bir sonraki makalemde görüşmek dileğiyle ...




Hiç yorum yok:

Yorum Gönder