Bilgisayar bilimlerine yeni giriş yapan veya uzmanlaşmak isteyen dostlarımın ilk karşılaşacağı ve genelde aşamayacağı sorun: Nesne tabanlı veya yönelimli (Object Oriented) kodlama “nedir”, “neden” sorularının cevaplarıdır.
Nesne tabanlı programlama, karmaşık ve kavramsal bilgilerin işlenme sürecini oldukça kolay hale getiren ve matematiği kavramsallaştıran yazılımlar ortaya çıkarabilir.
Nesne tabanlı programlamayı öğrenmek için öncelikle buna ihtiyacımız olduğunu bilmemiz gerekiyor. Amacımızı tam olarak deklare edersek ihtiyacımızı da tasarlayabiliriz.
Bilgisayar bilimleri için basit bir amaç: İnsanların öğrenerek yaptığı görevleri ve bilgiyi işleme süreçlerini bilgisayarlara yaptırmaktır.
İnsanların öğrenerek yaptığı görevler cümlesindeki “öğrenerek” kelimesi önemli bir anahtardır. Bir programcı bir bilgisayara öncelikle görevini öğretmelidir. İşte bu aşamada biz insanların kavramları öğrenme sürecinden yararlanabiliriz.
Peki biz nasıl öğreniriz ? Eğitim bilimlerinin sıkıcı tanımına göre “Öğrenme kalıcı izli davranış değişikliğidir”. Yani yeni bir yetiye veya bilgiye sahip olmak veya bunu kaydetmek diyebiliriz. Peki bu kaydetme işlemi neye göre yapılır ?
“Şablonlara göre”
Şablon veya küme “benzer nesnelerin ortak özelliklerini kullanarak ortaya çıkan bilgi deklarasyonlarıdır.” Benzer nesnelerin kümesine verilen isimdir.
Örneğin “otomobil” bir şablondur. Otomobil şablonundaki tüm nesnelerin ortak özelllikleri vardır. Örneğin: hepsinin dört tekerleği ve bir direksiyonu vardır.
Bu şablon sayesinde arkadaşımızın bahsettiği bir otomobili hiç görmeden 4 tane tekerleği ve yuvarlak bir direksiyonu olduğunu biliriz.
Şablonlar, bilgi topluluklarıdır. Bu bilgiler sabit ve değişken olabilir. “Otomobillerin tekerlekli olması” sabit bir bilgidir. Ama “plakası” değişken bilgidir. Her otomobil için farklıdır. Otomobilin rengi her otomobil için aynı değildir. Değişken bilgiler ise nesneleri ayırt etmemize yarar.
Biz insanlar günlük hayatta karşılaştığımız bilgilerin sınıflandırılmasında ve depolanmasında bu yöntemleri kullanırız. Bu bize her detayı kaydetmeksizin minimal bir bilgi ile nesneleri öğrenme yeteneği kazandırır.
Nesne Yönelimli Programlama: bilgisayara şablonları öğretmektir. Yani insan gibi öğrenmelerini hedeflemektir. Tabi sürekli bir öğrenmeden bahsetmiyoruz. Yapay zeka gibi bir projede çalışmıyorsanız bu öğrenme süreci yazılım süreci kadar sürecektir. Yani, yazılımcı bilgisayara öğretir ve yazılım bittiğinde bilgisayar öğreneceğini öğrenmiştir.
İnsan beynindeki şablonların yazılım dillerindeki karşılığı “Sınıf” (Class) dır.
Yazılımınızı yazarken “Otomobil” isimli bir Sınıf oluşturup tüm otomobilleri bir “Otomobil Nesnesi” olarak tanımlayabilirsiniz. Hyundai marka i20 model bir araç bu durumda bir nesne olur.
İkinci bir anahtar ise “Görev”
Otomobilin bir gaz pedalı var ve bir hızı var. Gaza bastığınızda hızı değişir. Otomobilin gaz pedalı bir değişken ve hızı başka bir değişken. Bunlar birbirini etkiliyor. Bu etkileşimi otomobil sınıfında kendi kendini etkileyen fonksiyonlar ile kodlayabiliriz. Daha sonra kaydedeceğimiz her araç bu fonksiyona sahip olacaktır.
Ülkemizdeki genç yazılımcılar “ileri düzey programlama” ve “yazılım mimarisi” konusunda kavramsal sorunlar yaşıyor ve neredeyse hiç birimiz “amatör” düzeyden kurtulamıyoruz. Özellikle “yazılım mimarisi” düzeyinde dünya çapında başarı elde edebilen yazılımcılar bulmak hiç kolay değil.
Bu durumun en büyük sebebi malum eğitim sistemimiz ve bilişim sektörümüze konu olan bilgisayar bilimleri soyut ve kavramsal yaklaşımlar ile gelişmiyor. Ekrana “merhaba dünya” yazmanın bir amaç değil araç olduğu, yapabileceklerimizin sınırı değil, “yapabildiğimizin keşfi” olduğunu öğrenemeden eğitimimiz bitiyor ve piyasa koşulları tarafından ara elemana dönüyoruz.
Tüm bunların sonucunda en pahalı ve talep gören yazılımlarımız bile oldukça kaba ve amatörce kodlamalarla çağın 20 yıl gerisinde kalıyor. Sürdürülebilir yazılımlar (bunu daha sonra açıklayacağım) üretemiyor, dünya standartlarından uzak ve sadece kodlamayı yapan kişilerin geliştirebileceği kalitesiz ürünler ortaya çıkıyoruz.