C'nin limitlerini zorlamak 17 November 07, Saturday @ 00:19

Biraz önce C ödevi hakkında bana bir kaç soru soran arkadaşımla sohbet ederken uzun zamandır C ile programlama yapmadığımı farkettim ve bana yolladığı kodu okurken içimde bir ateş yandı ve C'yi özlediğimi farkettim. Ona ödevi yaparken C'nin sunduğu struct yapısını kullanabileceğini söyledim. Bunun üzerine bana struct yapısının nesneye yönelik dillerdeki nesne kavramından ne farkı olduğunu sordu.

Sorusunun kabaca ve akla ilk gelen cevabı, nesneye yönelik dillerde, nesnelerin haberleşmesini sağlayan metodların(prosedüral dillerdeki fonksiyon karşılığı) bir struct için mevcut olmaması. Yani siz gerçek dünyada modellemek istediğiniz bir şey seçin. Bu seçtiğiniz şeye ait özellikleri iki dil ailesinde de standart veri yapılarıyla tanımlayabilirsiniz(İnsan için : Yaş, isim, soyad, doğum tarihi, doğum yeri, vs. diyelim) ancak nesneye yönelik dillerde buna ek olarak insan sınıfından üreteceğiniz insan nesnelerinin gerçekleştirebileceği eylemleri birer metod olarak tanımlayabilirsiniz(İnsan için : Uyumak, temizlenmek, konuşmak, yemek yemek, vs..)

Ancak istediğiniz takdirde yukarıdaki paragrafta saydığım implementasyonu C ile de gerçekleştirebiliyor olmanız aslında düşük seviyeli bir dilin programcıya ne kadar esneklik sağladığının en çarpıcı örneği. Bir struct yapısının içine, daha sonra tanımlayacağınız metodları gösterecek fonksiyon göstericileri(function pointer) tanımlayabilirsiniz. Daha sonra işi ilerletip çeşitli meta bilgiler kullanarak bu göstericilerin gösterdiği fonksiyonların sadece o struct tipindeki değişkenler tarafından çağırılabilecek şekilde kısıtlayabilirsiniz. Hatta daha da ileri gidip yazacağınız makrolarla nesneye yönelik dillerdeki private, protected, public gibi access modifierların davranışlarını taklit edebilirsiniz. İşin sonu yok, zaten işin sonu Objective C denilen hadiseye geliyor :)

C ile programlarken insan kendisini huzurlu, rahat, dingin, sakin, sessiz bir kasabada hissediyor. Assembly ile kimsenin sana ulaşamadığı, telefonları kesik, ölsen sesini duyuramayacağın köhne bir evdesin ama burada yaşamak sana sadist bir zevk veriyor. C++ ile İçerenköy Carrefour'dasın, kimin eli kimin cebinde belli değil. Java ile Akmerkez ya da Kanyon'dasın her an çıldırabilirsin. Python mu? Python bildiğin yaz tatili :)

-



Tags: Pardus