Kalıtım nesne tabanlı programlama dünyasında kilit öneme sahip bir kavramdır. Nesne tabanlı programlamada gerçek dünya problemlerini bilgisayar uygulamaları yardımıyla çözmek için bu problemleri modellemek gerekir. Sınıflar, modellemenin yapı taşlarıdır. Bu noktada devreye kalıtım girmektedir.
Temel Sınıflar ve Türetilmiş Sınıflar
Nesne tabanlı programlama ile problemleri gerçek dünyadakine benzer tarzda nesneler şeklinde modelleyerek çözmeye çalışır. Önce sınıflar tasarlanır. Bir uygulama çok fazla sayıda sınıf yardımıyla modellenebilir.
Bu sınıflardan bazıları temel sınıf bazıları da türetilmiş sınıflardır.
Örnek:
class Insan
{
//temel sınıf üyeleri
}
class Ogrenci: Insan
{
//türetilmiş sınıf üyeleri
}
Bazı sınıf doğrudan en fazla bir sınıftan türetebilir. İki ya da daha fazla sınıftan türetilemez. Eğer böyle bir ihtiyaç olursa arayüzleri kullanmak gerekir. Ancak tüm sınıflar dolaylı olarak System.Object sınıfından türetilmektedir.
Türetilmiş bir sınıftan başka sınıflar da türetilebilir. Ancak bunun bir şartı vardır. “Sealed” olarak tanımlanmış bir sınıftan başka bir sınıf türetilemez.
Temel Sınıf Kurucularını Çağırma
Türetilmiş bir sınıf, temel sınıfın tüm alanlarına sahiptir. Bu alanların başlangıçta ilk değerlerinin belirlenmesi gerekir. Bu amaçla metotlar çağrılır. Türetilmiş bir sınıftan temel sınıfa ait kurucu metodu çağırmak için “base” anahtar sözcüğü kullanılır.
class Insan
{
//temel sınıf üyeleri
public Insan(string ad)//temel sınıf için kurucu metot
{
//...
}
//...
}
class Ogrenci : Insan
{
//türetilmiş sınıf üyeleri
public Ogrenci(string ad)
: base(ad)//Insan(ad) temel sınıf kurucu metodunu çağırır
{
//...
}
//...
}
Bu şekilde temel sınıf kurucusu çağırılmazsa derleyici varsayılan temel sınıf kurucusunu çağırmaya çalışır. Bu da başarılamazsa bir derleyici hatası oluşur.
New Metodu
Programcının çok zorlandığı durumlardan bir tanesi de sınıflara ve sınıfların üyelerine benzersiz ve anlamlı adlar bulmaktır.
class Insan {
//temel sınıf üyeleri
public double Boy, Kilo;
public string Ad;
public Insan(string ad)//temel sınıf için kurucu metot
{
this.Ad = ad;
this.Boy = 0.45;
this.Kilo = 3.5;
}
public void Buyu() {
Boy += 0.5;
Kilo += 0.5;
}
}
class Ogrenci : Insan {
//türetilmiş sınıf üyeleri
public Ogrenci(string ad)
: base(ad)//Insan(ad) temel sınıf kurucu metodunu çağırır
{
}
new public void Buyu() {
this.Boy += 1.5;
this.Kilo += 1.5;
}
public void Oku() {
//Oku metodu kodları
}
}
Virtual(Sanal) Metodu
Temel sınıfa ait bir metodun bazen türemiş sınıfta farklı bir şekilde kullanılması gerekebilir. Bu durumda temel sınıfın söz konusu metodu türemiş sınıfın değiştirip kullanabileceği yönünde izin vermesi gerekir. Bu izin metodun temel sınıfta “virtual” olarak tanımlanması sonucu verilmektedir. Diğer bir ifadeyle temel sınıfta “virtual” olarak tanımlanmış bir metodun türemiş sınıfta yeniden yazılabileceği belirtilmiş olunuyor.
Override (Geçersiz Kılma) Metodu
Temel sınıfta “virtual” tanımlanmış bir metodun türemiş sınıfta yeniden yazılması için “override” sözcüğü kullanılır. Temel sınıfta “virtual” tanımlanmamış ya da “static” tanımlanmış olan üyeler (metot,özellik,dinleyici ya da olay) türemiş sınıfta yeniden yazılamaz.
Protected (Korumalı) Erişim
“Protected” sözcüğü bir erişim belirtecidir. Yani bir sınıfın üyelerine kalıtım hiyerarşisi içinde o sınıftan türemiş diğer sınıfların erişebileceğini belirtir. Hiyerarşi dışından ise kimse “proctected” üyeleri erişemez.
ARAYÜZLER
Bir sınıftan kalıtımla almak güçlü bir mekanizmadır, asıl kalıtımın gücü bir arayüzden kalıtımla almasında yatar. Bir sınıf kalıtımla sadece bir sınıftan türetilebilir ancak bu bu kısıtlama kalıtımla arayüzden türetme söz konusu olduğunda ortadan kalkar.
Arayüz Tanımlama
Arayüz tanımlamak için “class” ya da “struct” sözcükleri yerine “interface” sözcüğü kullanılır. Arayüz içinde metotları bir class yada struct içerisinde olduğu gibi bildirilir. Farklı olarak herhangi bir erşim belirteci “public”,”private”,”protected” kullanılmaz ve metot gövdesi noktalı virgülle(;) ayrılır.
Örnek
interface IComparable
{
int CompareTo(object obj);
}
Arayüzlerin sahip olabileceği üyeler:
• Özellikler (properties)
• Metodlar (methods)
• Olaylar (events)
• İndeksleyiciler (indexers)
Arayüzlerin sahip olamayacağı üyeler:
• Yapıcılar (constructors)
• Yok ediciler (destructors)
• Alanlar (fields)
Arayüz Kısıtlamaları
1. Bir arayüz için herhangi bir alan tanımlanamaz.
2. Bir arayüz içinde kurucu tanımlamaya da izin verilmez.
3. Arayüz içinde bir yıkıcı da tanımlanamaz.
4. Metot çin bir erişim belirteci de belirtemez.
Bir Arayüz Uygulamak
Bir arayüzü uygulamak için arayüzden kalıtımla alan ve arayüzde belirtilen tüm yöntemleri sağlayan bir sınıf ya da yapı bildirir.
Bir Sınıfa Arayüz İle Ulaşma
Hiyerarşide üst sıralarda tanımlanmış bir sınıf değişkeni ile bir nesneye başvurulabildiği gibi sınıfın uyguladığı bir arayüz olarak tanımlanmış bir değişken kullanarak da nesneye ulaşılabilir.
Mühürlenmiş (Sealed) Sınıflar
Kalıtımı her zaman akıllıca kullanmak çok kolay olmamaktadır. Bir arayüz ya da soyut bir sınıf oluşturulursa gelecekte kalıtımla alınacak bir şeyler yazılıyor demektir.
Hiç yorum yok:
Yorum Gönder