12 Haziran 2009 Cuma

Programlamaya Giriş 2

Uzun bi aradan sonra kaldığım yerden devam etmek istiyorum :). Bi önceki yazıda en son NTP (Nesne Tabanlı Programlama) 'da nesnelerin Gerçek Dünya Modellemesi ile bilgisayar ortamına daha kolay aktarılmasından bahsetmiştik.

Peki Gerçek dünya modellemesi olarak neyi kastediyoruz? Gerçek dünya modellemesi ile amaç nesnenin bilgisayar ortalamına tüm özellikleri ile aktarabilmektir. Çünkü bunlar ne sadece veriye benzer nede fonksiyona ve bu yüzden fonsiyonel programlama ile bilgisayar dünyasına geçirmek imkansız değil ama oldukça güçtür. Çünkü fonsiyonel programlamada genel olarak her fonksiyonun sadece bir görevi vardır fakat günlük hayattaki karmaşık nesnelerin hem özellikleri(veriye karşılık gelir) hemde her özelliğe ayrı yetenekleri(fonksiyona karşılık gelir) vardır.

Örnek olarak; arabanın ağırlığı, rengi veya lastiğin markası bunlar arabanın özellikleridir fakat arabanın sürati,taşıyabildiği maksimum ağırlık vs bunlar ise arabanın yetenekleridir ve bu yetenekler özelliklerle bağlantılır. Mesela lastiğin markası değişirse buna göre taşıyabildiği yük miktarı değişebilir, arabanın ağırlığı azalırsa arabanın sürati artabilir. Böyle bir arabayı fonksiyonel programlama ile tanımlamak imkansıza yakın bişeydir.

Nesne Tabanlı Programlamanın(bundan sonra kısaca NTP diyecez.) altında yatan asıl düşünce bu veriyeleri ve bu verilere göre işlem yapan fonksiyonları bir birimde tutmaktır ve bu birime nesne(object) denir ve bu nesne içindeki verilere sadece bu nesneye ait fonksiyonlarla erişebilirsiniz.

Bunu gerçek dünya ile bağdaştırırsak; her araba ayrı bir nesne ise A arabasının ağırlığının değiştirmemin B arabasının hızında bir değişiklik yaratması gibi algılayabiliriz. Yada A arabası ile sürekli sürat yapılırsa yine A arabasının lastikleri aşınır B’ninki değil.

Artık NTP’nin kısmen de olsa ne olduğunu öğrendiğimize göre artık programcılık terimlerine giriş yapabilir ;)

NTP’de temel birimin nesneler ve bu nesnelerin de veri ve fonksiyonlarda oluştuğunu söyledik. Ayrıca nesnenin verilerine ulaşmanın yolunun aynı nesnenin fonksiyonlarından geçtiğini de söyledik. Bu özellik program çalıştığı esnada kazara verilerin bozulmasını engelleyen bir sistem. Bu sistem her nesnenin verilerini bir yerde paketler(encapsulation )diğer nesnelerden gizler(data hiding).

Not: NTP deki kodların büyük kısmı fonksiyonel programlamadaki ile aynıdır(Döngüler,Karar Yapıları vs).Burda şöyle bir soru aklınıza takılabilir."Madem kodların hemen hemen hepsi aynı, bu adamlar ne halt yemeye böyle bişey çıkartmışlar?" NTP programın çalışması ile değil genel organizasyonu ile ilgilenir. Yani genel olarak NTP fonksiyonların nasıl çalıştığı ile değil, fonksiyonların düzeni ile ilgilenir. Dolayısı ile bir kod blogunun ne tür programlama ait olduğu ancak programın genel yapısına bakılarak anlaşılabilir.

NTP’nin ilk göze çarpan özellikleri:
1. Nesne
2. Sınıflar
3. Kalıtım
4. Yeniden Kullanılabilirlik
5. Çok Biçimlilik ve Operatörlerin Aşırı Yüklenmesini sayabilir.

1.Nesne:
Bu kavramı daha önce açıkladık fakat bikez daha açıklamak gerekirse; NTP’nin temel birimi olan nesne veriler ve fonksiyonların tek bir birimde toplanmasıdır.

2.Sınıf:
Belli özelliklere sahip nesnelerin bir başlık altında toplanmasıdır. Örn: Samsung,Nokia,Sony-Ericsson Cep Telefonu sınıfına ait nesnelerdir.

3.Kaltım:
Sınıf kavramından doğan bu kavram şöyle açıklanabilir. Bir sınıf içersinde oluşturulan alt sınıfların ortak olan özellikleri kalıtımdır. Az önceki örnekten yola çıkarsak: Samsung,Nokia,Sony-Ericsson Cep Telefonu sınıfına ait nesneler demiştik. Bu sefer bunları nesne olarak değilde sınıf olarak düşünelim ve Nokia sınıfın Kızaklı ve Düz olmak üzere iki alt sınıfı olsun. Burda kalıtım olarak geçen özellik Cep telefonu olma özelliği ve Nokia olma özelliğidir. Cep telefonu olma özelliği ilk sınıftan başlayarak tüm sınıflara kalıtım olarak geçmiştir fakat Nokia olma özelliği sadece son iki sınıfa kalıtım olarak geçmiştir.

4.Yeniden Kullanılabilirlik:
NTP’da her nesne ve sınıf diğerlerinden bağımsız olduğu için bir kere tanımladığınız biz nesne yada sınıfı başka programlarda tekrar tekrar kullanabilirsiniz.


Not: Bir Sonraki Yazıda C++ Diline Giriş ile ilgili olacak ve konu takibi olarak "C++ ile Nesne Tabanlı Programlama" kitabını kullanacam. Kitabının yazarı "Robert Lafore", Yayın evi Alfa Yayıncılık. Çok güzel bir kitap kesinlikle tavsiye ederim.