Sınıflar

Gerçek dünya sınıflandırabileceğimiz nesnelerle doludur. Örneğin küçük bir çocuk bir köpek gördüğünde, cinsine bakmaksızın "hav hav" demesi gibi biz de dünyadaki nesneleri kategorize ederiz.

Nesneye yönelik terminolojide, "köpek" gibi nesnelerin kategorize edilmiş haline sınıf, sınıfın özelleştirilmiş nesnelerinde örnek (instance) denir.

Genelde Ruby'de ya da herhangi başka bir nesneye yönelik yazılım geliştirme dilinde nesne yapmak için önce sınıfın karakteristikleri tanımlanır sonra da bir örnek tanımlanır. Bu süreci görebilmek için Kopek adında ilk basit sınıfımızı tanımlıyoruz:

ruby>   class Kopek
    |    def speak
    |      print "Hav Hav\n"
    |    end
    |  end
   nil

Sınıf tanımlaması class ile end arasında yapılmaktadır. Bu alanda bulunan def, önceki bölümlerde açıkladığımız gibi sınıfa bazı özel davranışlar kazandıran yöntemleri tanımlamak için kullanılır.

Artık bir Kopek sınıfı tanımladık, öyleyse şimdi bir köpek yapabiliriz:

ruby>   kucu = Kopek.new
   #<Kopek:0xbcb90>

Kopek sınıfından yeni bir örnek yarattık ve kucu adını verdik. new yöntemi her sınıf için yeni bir örnek yapmaya yarar. kucu sınıf tanımımıza göre bir Kopek olduğu için, bir köpekte olmasına karar verdiğimiz tüm özellikleri taşır. Kopek sınıfımız çok basit olduğu için kucu'dan yapmasını istediğimiz küçük bir hile var.

ruby>   kucu.konus
Hav Hav
   nil

Bir sınıftan yeni bir örnek yaratmak bazen örnekleme olarak adlandırılır. Köpeğimizin havlamasını test etmek için öncelikle bir köpeğimizin olması lazım, Kopek sınıfından bizim için havlamasını isteyemeyiz.

ruby>   Kopek.konus
ERR: (eval):1: undefined method `konus' for Kopek:class

Diğer taraftan, duygusal olarak bağlanmamış bir köpeğin sesini duymak istersek, geçici bir köpek yaratabilir ve kaybolmadan önce bizim için küçük bir ses çıkarmasını isteyebiliriz.

ruby>   (Kopek.new).konus   # ya da daha genel olarak, Kopek.new.konus
Hav Hav
   nil

"Bekle" diyebilirsiniz, "bu kerata nereye kayboldu böyle?" Bu doğru: eğer ona bir isim vermezseniz (kucu'da yaptığımız gibi) Ruby'nin otomatik çöp toplama mekanizması devreye girer ve bunun istenmeyen aylak bir köpek olduğuna karar verir ve merhametsizce yok eder. Gerçekten, sorun yok; biliyorsunuz ki tüm köpekleri istediğimizi söyleyebiliriz.