25 Aralık 2014 Perşembe

Nesne yönelimli programlamanin en önemli yapilarindan biri olan İnterface nedir?

 Uygulamalarimizda interface kullanmanin iki sebebi olabilir:
   1. Uygulamamiz için bir sinif olusturdugumuzu düsünelim. Bu sinif türünden bir yavru degisken olusturuldugunda sinifin içerisindeki elemanlara (fonksiyon, prosedür, property, degisken) bu degisken üzerinden erisilir. Fakat birden çok yerde sadece belirli bir grup elemani kullanmak istiyorum. Yani diger elemanlar isime yaramayacaktir. Baska bir yerde de diger elemanlari kullanmam gerekmektedir. O zaman isime yaramayan elemanlari almadan nasil bir yapi kullanacagim?
   2. Bir siniftan sadece bir sinifa kalitim verebiliriz. Fakat bir sinifa iki veya daha fazla siniftan kalitim veremeyiz. Bu durumda interface yapisini kullanmamiz dogru olacaktir. Bir sinifa birçok interface ile kalitim verebiliriz.
Interface'in tanimlamasini kisaca hatirlayalim:
   1. Interface içerisinde sadece fonksiyon, prosedür, indexer ve property tanimlamasi yapabiliriz.
   2. Interface içerisinde degisken tanimlamasi yapilmaz!!!
   
3. Interface isimleri tavsiye edildigi sekilde, 'I' harfi ile baslar..
Bir örnek ile konumuzu daha iyi kavramaya çalisalim:
Örnegimizde bir üniversitedeki ögretim görevlileri ve ögrencilerin bilgilerine ulasilmak isteniyor. Ögretim görevlileri için OgretimGorevlisi, ögrenci için ise Ogrenci siniflari olusturulmustur. Bunlarin kisisel bilgilerine ulasabilmek için IKisiBilgileri interface'i ve çalisan kisilerin çalisma bilgilerine ulasabilmek için ICalisanBilgileri interface'i olusturulmustur.
Dikkat edilmesi gereken nokta su: Ögrenci okul içerisinde bir kisidir. Ögretim görevlisi ise hem kisi hem de çalisandir.
Öncelikle interface'lerimizi inceleyelim:


interface IKisiBilgileri{
        string AdSoyad { getset; }
        string EPosta { getset; }
        string Telefon { getset; }
}
interface ICalisanBilgileri
{
        string Departman { getset; }
        string Gorev { getset; }
}
IKisiBilgileri interface'inde kisinin adi soyadi, e-posta adresi ve telefon numarasi bilgilerine ulasiliyor. ICalisanBilgileri interface'inde ise çalisan kisinin departmani ve görevi bilgilerine ulasiliyor.
Simdi Ogrenci ve OgretimGorevlisi siniflarinin kodlarini inceleyelim:
class Ogrenci :IKisiBilgileri{
        private string adSoyad, ePosta, telefon;
        private double not;

        public string AdSoyad
        {
                get { return adSoyad; }
                set this.adSoyad = value; }
        }
        public string EPosta
        {
                get return this.ePosta; }
                set this.ePosta = value; }
        }
        public string Telefon
        {
                get return this.telefon; }
                set this.telefon = value; }
        }
        public double Not
        {
            get { return this.not; }
            set { this.not = value; }
        }
}

Ögrenci bir kisi oldugu için sadece IKisiBilgileri interface'inin kalitimini aldi ve bu interface içerisindeki property'ler sinif içerisinde olusturuldu.


Ögretim görevlisi hem kisi hem de çalisan oldugu için ICalisanBilgileri ve IKisiBilgileri interface'lerinin kalitimini aldi ve içerisindeki property'ler sinif içerisinde olusturuldu.

class OgretimGorevlisi : ICalisanBilgileriIKisiBilgileri{
        private string adSoyad, ePosta, telefon, departman, gorev, unvan;
        public string Departman
        {
                get return this.departman; }
                set {this.departman = value; }
        }
        public string Gorev
        {
                get { return this.gorev; }
                set this.gorev = value; }
        }
        public string AdSoyad
        {
                get return adSoyad; }
                set { this.adSoyad = value; }
        }
        public string EPosta
        {
                get { return this.ePosta; }
                set { this.ePosta = value; }
        }
        public string Telefon
        {
                get { return this.telefon; }
                set { this.telefon = value; }
        }
        public string Unvan
        {
                get { return this.unvan; }
                set { this.unvan= value; }
        }
}

Class ve Interface'lerimizi olusturduk. 

Hiç yorum yok:

Yorum Gönder