Nesne Yönelimli Programlama veya bilinen adıyla OOP, programlama dünyasında büyük bir projeyi daha yönetilebilir parçalara ayıran bir yaklaşımdır. Bu bölümde, Crystal dilinde OOP'nin nasıl işlediğini sade, anlaşılır ve açıklayıcı bir dille ele alacağız.
3.1 Sınıflar ve Nesneler
OOP'nin temel yapı taşı "sınıf" kavramıdır. Sınıflar, bir nesnenin özelliklerini (değişkenler) ve yeteneklerini (fonksiyonlar) tanımlayan şablonlardır. Bir sınıfın örneğini alarak bir "nesne" yaratabiliriz, bu da o sınıfın bir örneğini temsil eder.
classKisiproperty isim :Stringproperty yas :Int32definitialize(@isim, @yas)enddefselam_verputs"Merhaba, ben #{@isim}"endendahmet=Kisi.new("Ahmet",30)ahmet.selam_ver
3.2 Miras Alma
Miras alma, bir sınıfın başka bir sınıfın özelliklerini "miras" almasını sağlar. Bu, kodu yeniden kullanmamızı ve düzenli bir şekilde organize etmemizi sağlar.
classOgrenci < Kisiproperty not :Int32definitialize(@isim, @yas, @not)super(@isim,@yas)endendali=Ogrenci.new("Ali",20,90)ali.selam_ver
3.3 Polimorfizm (Polymorphism)
Polimorfizm, farklı sınıfların aynı arayüzü veya metodları kullanmasını sağlar. Bu, farklı sınıfların aynı metodu farklı bir şekilde uygulamasını mümkün kılar.
3.4 Kapsülleme (Encapsulation)
Kapsülleme, bir sınıfın iç detaylarını gizleyerek sadece belirli metod ve özelliklerin dış dünyaya açık olmasını sağlar. Bu, daha güvenli ve hata tolere edilebilir kodlar yazmamıza olanak tanır.
3.5 Sonuç
Bu bölümde, Nesne Yönelimli Programlama'nın temel prensiplerini — sınıflar, nesneler, miras alma, polimorfizm ve kapsülleme — Crystal dilinde nasıl kullanacağınızı öğrendiniz. Şimdi elde ettiğiniz bu bilgilerle daha organize, yeniden kullanılabilir ve etkili programlar yazabilirsiniz.
class Ogretmen < Kisi
def selam_ver
puts "Merhaba, ben öğretmen #{@isim}"
end
end
ayse = Ogretmen.new("Ayşe", 40)
ayse.selam_ver
class Muhasebeci < Kisi
@maas : Int32 = 0
def maas_ata(maas : Int32)
@maas = maas
end
def maas_goster
puts "#{@isim} adlı kişinin maaşı: #{@maas}"
end
end
mehmet = Muhasebeci.new("Mehmet", 50)
mehmet.maas_ata(5000)
mehmet.maas_goster