Sınıflar
Önceki
İçindekiler
İçindekiler
Metotları Yeniden Tanımlamak
Sonraki

 Ruby Kullanıcı KılavuzuMiras 

Gerçek hayatta yaptığımız sınıflandırmalar son derece hiyerarşiktir. Örneğin bütün kedilerin memeli olduğunu ve bütün memelilerin hayvan olduğunu biliriz. Küçük sınıflar mensup oldukları büyük sınıfların karakteristik özelliklerini miras alırlar. Eğer bütün memeliler nefes alabiliyorsa, bütün kediler de nefes alabiliyor demektir.

Bu durumu Ruby'de aşağıdaki gibi açıklayabiliriz:

ruby> class Memeli
    |   def nefes
    |     print "nefes al ve nefes ver\n"
    |   end
    | end
   nil
ruby> class Kedi<Memeli
    |   def konus
    |     print "Miyauvvvv\n"
    |   end
    | end
   nil

Örneğin bir Kedi'nin nasıl nefes alması gerektiğini belirtmediğimizi farz edelim. Bu durumda her kedi, Kedi sınıfı Memeli sınıfının bir alt sınıfı olarak tanımlanmışsa, bu davranışı Memeli sınıfından miras olarak alacaktır. (Nesneye yönelik terminolojide küçük sınıf alt sınıf (subclass), büyük sınıfsa süper sınıf (superclass) olarak isimlendirilir.) (Programcının bakış açısına göre, kediler nefes alma yeteneğini bağımsız olarak almıştır, eğer bir konuşma metodu da eklersek, artık kedilerimiz hem nefes alabilme hem de konuşabilme yeteneğine sahip olurlar.

ruby> pisi = Kedi.new
   #<Kedi:0xbd80e8>
ruby> pisi.nefes
nefes al ve nefes ver
   nil
ruby> pisi.konus
Miyauvvvv
   nil

Bazen süper sınıfta olması gereken ancak alt sınıf tarafından miras alınması istenmeyen bir özellik olabilir. Örneğin genel olarak kuşların uçmayı bildiğini ancak penguenlerin, kuşların uçamayan bir alt sınıfı olduğunu kabul edelim.

ruby> class Kus
    |   def gagala
    |     print "Tüylerimi temizliyorum."
    |   end
    |   def uc
    |     print "Uçuyorum."
    |   end
    | end
   nil
ruby> class Penguen<Kus
    |   def uc
    |     fail "Üzgünüm. Yüzmeyi tercih ederim."
    |   end
    | end
   nil

Her yeni sınıfın her özelliğini ayrı ayrı tanımlamak yerine, sadece her alt sınıfla onun süper sınıfı arasındaki farklılıkları eklemek ya da yaniden tanımlamak daha iyidir. Mirasın bu kullanımına bazen diferansiyel programlama (differantial programming) denir. Bu nesneye yönelik programlamanın en yararlı özelliklerinden biridir.


Sınıflar
Önceki
İçindekiler
İçindekiler
Metotları Yeniden Tanımlamak
Sonraki