28 Nisan 2010 Çarşamba

Kalıtım

Kalıtım(inheritence), elimizde var olan sınıflardan,onların tüm özelliklerine sahip olan ve ayrıca kendine has birtakım özelliklere de sahip olan "türetilmiş sınıf" (inherited) dediğimiz sınıfların oluşturulmasıdır.Yeni sınıflarımız ürettiğimiz ana sınıflarımıza "base class" denir ve bu türetme işleminden base class'lar(temel sınıflar) etkilenmez.

Kalıtım nesne yönelimli programlamanın yapı taşlarından birisidir.Yazılımcıların hep bahsettiği yazılan kodun tekrar tekrar kullanılabilmesi ise kalıtımın en büyük avantajlarından birisidir.Bir temel sınıf yazdıktan sonra ilerleyen çalışmalarda bu sınıfa veya bu sınıfın sahip olduğu özelliklerin yanında, ek birkaç özelliğe daha sahip sınıflara ihtiyacınız olduğu durumlarda, daha önceden yazmış olduğunuz temel sınıfı hiç değiştirmeden kullanabilirsiniz.Buda size zamandan tasarruf etmenizi dolayısı ile de maliyetten tasarruf etmenizi sağlar.

Temel Sınıf ve Türetilmiş Sınıf

Temel sınıf nedir,türetilmiş sınıf nedir yukarıda bahsetmiştim.Peki bir sınıf başka bir sınıftan nasıl türetilir c++ dilinde bir inceleyelim.

Öncelikle vereceğim örneğin açıklayıcı olması için bir senaryo üretelim.Senaryomuzda şöyle bir şey olsun:Bir oyun tasarlıyorum ve oyunumda evler,kaleler,benim karakterim,karakterimin elindeki silahlar ve kalkanlar bulunsun.Şimdi ben burada öyle bir yapılanmaya gitmeliyim ki,hem kod rahat okunsun hemde ileride yapmayı planladığım başka oyun projelerimdede bu sınıflarım kullanılabilsin.Şimdi burada düşünmem gereken ilk mesele tüm bu ev,kale,karakter,düşmanlar,silahlar ve kalkanlar gibi elemanları ortak bir noktada buluşturabilmek.Burda eğer ben şöyle bir varsayımda bulunursam: "oyunda gözüme çarpan herşey birer oyun objesidir!" dersem o zaman bu "objelere" ait ortak bir takım özellikler bulabilirim.Mesela bu her "objenin" ekranda bir konumunun olması dolayısıyla bu her objenin 2D bir oyun olduğunu farzedersek x-y koordinat düzleminde bir yerinin olması ve bu x ve y değerlerine karşılık gelecek sayıların olması gerekir.O zaman ben ilk sınıfımı bu varsayımı temel alarak bir oyunObjesi adında temel bir sınıf üretebilirim:

class oyunObjesi
{
  public:
      int apsis;
      int ordinat;
      oyunObjesi(int x,int y)
      {
        apsis=x;



        ordinat=y;
      }
};

Benim bütün objelerim bu oyunObjesi sınıfının sahip olduğu tüm özelliklere sahip olduğunu ve yeni özelliklerininde bulunabileceğini söylemiştim.O halde benim oyunumdaki bir ev için:

class oyunEv:public oyunObjesi
{


  public:
      char renk;
      int en;
      int boy;
      oyunEv(char r,int e,int b,int x,int y):oyunObjesi(x,y)
      {
          renk=r;
          en=e;
          boy=b;
      }
};

sınıfını yazabilirim.Burada temel sınıfım(base) oyunObjesi ve türetilmiş(inherited) sınıfım ise oyunEv sınıfımdır.Base sınıfıma dikkat edecek olursanız bir yapıcı metodu(constructor) var.Bu metod temel sınıfımdaki apsis ve ordinat değişkenlerine sınıfın bir nesnesi oluşturulurken gönderilen parametreleri atıyor.

Burada tabiki birde public,protected ve private ile etiketlenmiş değişkenlere,metodlara erişim izinleri nasıl ondan da bahsetmemiz lazım.


Resimde public,protected,private ile etiketlenen değişkenlere,alanlara erişim izinleri anlatılmıştır.

0 yorum: