Miras

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, 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 , büyük sınıfsa süper sınıf 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 yöntemi de 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, 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 farksal yazılım geliştirme denir. Bu nesneye yönelik yazılım geliştirmenin en yararlı özelliklerinden biridir.