12. 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 Köpek adında ilk basit sınıfımızı tanımlıyoruz:

ruby>class Köpek
    |    def konuş
    |       print "Hav Hav\n"
    |    end
    | end
   :konuş

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 Köpek sınıfı tanımladık, öyleyse şimdi bir köpek yapabiliriz:

ruby> kuçu = Köpek.new
   #<Kopek:0x00005587446da620>

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

ruby> kuçu.konuş
Hav Hav
   nil

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

ruby> Köpek.konuş
ERR: undefined method `konuş' for Köpek: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> (Köpek.new).konuş   # ya da daha genel olarak, Köpek.new.konuş
Hav Hav
   nil

"Bekle" diyebilirsiniz, "bu kerata nereye kayboldu böyle?" Bu doğru: eğer ona bir isim vermezseniz (kuçu'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.