Bu yazıda programlama yaparken kullanılan yöntemlere göz atacağız. Temel olarak 4 paradigmayı inceleyeceğiz.
1. Emirli Programlama (Imperative Programming)
Emirli programlama ile kastedilen, bir programlama dilindeki komutların satır satır emirlerden oluşmasıdır. Örneğin bir robota komut verecek olsaydık:
Kolu 10 derece sağa döndür
2 metre yürü
Kolu 20 derece sola döndür
Benzeri emirleri sıralamamız gerekecekti. Bu emirlere bazı kaynaklarda prosedür ismi verilmektedir. Buradaki prosedür ile anlatılmak istenen örneğin kolu döndürme işleminin alt emirlerden oluşmasıdır. Örneğin robotun nasıl bir açıyla vücudunu tutacağı, kolun hangi mafsalının kaç derecelik açı yapacağı ve kolun nasıl hareket edeceği gibi emirler bu alt prosedürlerde belirtilir.
Emirli programlamada hesaplamanın “nasıl?” yapılacağı önemlidir. Bu paradigma bilgisayarın donanımına en uygun olandır. Hemen hemen tüm bilgisayarların donanımı makine kodunu (zorunlu stildedir) çalıştıran tarzda dizayn edilmiştir. Hafızaya konulan veriler kullanılarak işlemler yapılır ve sonuçlar yine hafızanın bir bölgesine konulur. Bu nedenle programının hangi adıma ulaştığı hafızanın içeriğinden anlaşılabilmektedir.
2. Mantıksal Programlama (Logic Programming)
Mantıksal programlama; matematikteki mantığı temel alır. Programdaki ifadeler mantıksal ifadeler şeklinde yazılır. Bu praradigmanın diğerlerinden farkı yorumlama da yapabilmesidir.
Bir mantık programı axiom kümeleri ve bir hedef cümlesinden oluşur. Hedef cümlesinin doğruluğu için axiomların yeterli olup olmadığının tespiti için çıkarım kuralları vardır. Mantık programının çalışması axiomlardan hedef cümlesinin ispatının kurulmasına denktir. Bu dillerin diğer bir adı da kural tabanlı dilleridir. Bu isim belirli durumların sağlanması ve sağlandığı zaman buna uygun bir tepkinin verilmesinden verilmiştir. Bu dala giren en çok bilinen dil Prolog dilidir. Mantık programlama sayesinde programlar hakkında muhakemeler yapmamız, çıkarımlar yapmamız sağlanır.
Bir örnekle açıklamaya çalışalım:
Kardeş(X,Y) :- Ebeveyn(Z,X), Ebeveyn(Z,Y).
Ebeveyn(X,Y) :- Baba(X,Y).
Ebeveyn(X,Y) :- Anne(X,Y).
Anne(Fatma,Ayşe).
Baba(Ahmet,Ayşe).
Baba(Ahmet,Gizem).
Baba(Hasan,Ahmet).
Bu ifadeleri yazdıktan sonra Ahmet ve Ayşe'nin kardeş olup olmadığını sorgulayabiliriz.
3. Fonksiyonel Programlama (Functional Programming)
Programlama yaklaşımlarından birisi olan fonksiyonel programlama günümüz dillerinin neredeyse tamamında kullanılmaktadır. Bu yaklaşımda matematik fonksiyonlarında olduğuna benzer bir şekilde alt programlar tanımlanmakta ve bu alt programların değişik argümanlar ile çalışması sağlanmaktadır. Bu yaklaşım basitçe:
Bir dilin fonksiyonel olması dilde fonksiyon veya prosedüre benzeri özellikler bulundurması ile sağlanır. Bu özellikleri tanımlamak gerekirse:
Yukarıdaki bu maddeleri bir kara kutu (blackbox) yaklaşımı olarak da düşünebiliriz. Yani alt programların, dış dünya ile (programın geri kalanı ile) olan tek bağlantıları almış oldukları ve geri döndürmüş oldukları argümanlardır (paramatrelerdir).
Aşağıda bir fonksiyon örneği verilmiştir: (JAVA, C , C++, C# dillerinde kabul edilir koddur):
int topla ( int a, int b){
return a + b;
}
Yukarıdaki kod incelendiğinde, a ve b, fonksiyona verilen argümanlardır (parametrelerdir). Dönüş değeri olarak tam sayı (integer) tipi kullanılmış ve bu durum return komudu ile belirtilmiştir. a+b eylemi ise bir alt programdır. Yani bu fonksiyon çağrıldığında icra edilen program parçasıdır.
4. Nesneye Dayalı Programlama (Object-oriented Programming)
Nesneye dayalı paradigma her bilgisayar programının etkileşim içerisinde bulunduğu birimler ve nesneler kümesinden oluştuğunu varsayan bir oluşumdur. 1960lı yıllarda donanım ve yazılımın karmaşıklaşmaya başlamasıyla birlikte, yazılım kalitesinin korunabilmesi ve yeniden kullanılabilirliği artırmak için düşünülmüştür. Bu paradigmada esas olan şey eylemler ve bu eylemlerin mantığından çok nesneler ve verilerdir. Bu paradigmada asıl umursadığımız şey değiştirmek istediğimiz nesnelerdir ve bu nesneleri değiştiren şeyin mantığı o kadar da önemli değildir. Üzerinde değişiklik yapmak istediğimiz tüm nesneleri ve bu nesnelerin birbirleriyle olan ilişkilerini belli bir model haline getiririz. Nesneler metodlar (methods) ve nitelikler'den (attributes) oluşur. Nitelikler, nesnelerin sahip oldukları verilere, metodlar ise bunlar üzerinde yapılabilecek işlemlere karşılık gelir. Bir başka deyişle nesne, kendisini işleyecek kod kesimini kendisi ile birlikte tanımlayan ve taşıyan ve kendi tanımladığı biçimden daha farklı amaçlarla kullanılamayan veri türü olarak yorumlanabilir.