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..
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 { get; set; }
string EPosta { get; set; }
string Telefon { get; set; }
}
interface ICalisanBilgileri
{
string Departman { get; set; }
string Gorev { get; set; }
}
string AdSoyad { get; set; }
string EPosta { get; set; }
string Telefon { get; set; }
}
interface ICalisanBilgileri
{
string Departman { get; set; }
string Gorev { get; set; }
}
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; }
}
}
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 : ICalisanBilgileri, IKisiBilgileri{
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; }
}
}
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; }
}
}
Hiç yorum yok:
Yorum Gönder