Yazan : Şadi Evren ŞEKER
Bilgisayar bilimlerinde, programlama dillerini sınıflandırmak ve bir programlama dilinin özelliklerini belirtmek için kullanılan bir terimdir. Genellikle literatürde prosedürel programlama (procedural programming) olarak da geçmektedir.
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 programlamanın anlamsal olarak tam zıddı ise tanımlamalı programlamadır (veya bildirimli programlamadır , declarative programming). Bu yaklaşıma göre bir programı oluşturan parçalar belirli bir amaca yönelik kodlanır. Örneğin yukarıdaki örneğe devam edecek olursak bir robot programlamada bir odadaki bir masanın üzerinde duran elmayı almak için:
- Kapıyı aç
- Kapıdan gir
- Masayı tespit et
- Masaya yaklaş
- Elmayı bul
- Elmayı al
Benzeri komutlar vermemiz gerecekti. Burada dikkat edilmesi gereken nokta, verdiğimiz komutların birer amaç için verilmiş olmasıdır. Yani tanımlamalı programlamada ne sorusuna, emirli programlamada ise nasıl sorusuna cevap olacak komutlar ön plana çıkar. Elbette kapıyı açmak veya masaya yaklaşmak eylemleri de bir dizi alt hareketlerden oluşmakta ve bu hareketler de sonuçta birer emir olmaktadır ancak tanımlamalı programlama yaklaşımında yazılan her fonksiyon birer amaca hizmet eder ve daha sonra bu fonksiyonlar birleştirilerek modüler bir problem çözümü elde edilir. Öte yandan emirli programlamada hedef emirlerin doğru şekilde ve dizilimde verilmesidir. Emirli programlamadaki her fonksiyon belirli bir başka emirin alt parçalarıdır ve sürekli olarak programcının emir vermesi gerekir.
Bu anlamda tanımlı programlama sanki robotumuzun daha çok şey bilmesini, emirli programlama ise sanki robotun her işleminin emre bağlanması olarak düşünülebilir.
C, C++ veya JAVA gibi diller tanımlamalı programlamanın (declarative programming) birer örneğiyken, lisp, prolog ve scheme gibi diller emirli programlamanın birer örneğidir. Ayrıca makine dili veya FORTRAN, Algol gibi ilkel diller yapı olarak emirli dillerdir.
Örneğin scheme dilinde 1′den verilen sayıya kadar olan sayıları toplayan bir kod aşağıdaki şekilde olacaktır:
(define (topla n) (
cond (
( = n 1) n)
(else (+ n ( topla (- n 1))))))
Bu yazı şadi evren şeker tarafından yazılmış ve bilgisayarkavramlari.com sitesinde yayınlanmıştır. Bu içeriğin kopyalanması veya farklı bir sitede yayınlanması hırsızlıktır ve telif hakları yasası gereği suçtur.
Ardından programcının bu fonksiyonu bir komut (emir) vererek çağırması gerekecektir:
(topla 5)
Yukarıdaki çağırma işlemi olmazsa, fonksiyon sadece tanımlanmış olarak kalacak ve hiçbir işe yaramayacaktır. Programcı yukarıdaki tanımı yaptıktan sonra istediği kadar emir vererek fonksiyonu çağırabilir. Ancak çalışma işlemi programcının vereceği emirlere bağlıdır.
Öte yandan C dilinde bir programın çalışması için:
#include <stdio.h>
int topla(int n){
if(n==1)
return n;
return n+topla(n-1);
}
int main(){
topla(5);
}
Şeklinde program yazılır ve derlenir (compile) sonuçta bu program sadece 5′e kadar olan sayıları toplar. Şayet bu sayı kullanıcıdan okunursa bile, programın yine de bir amacı vardır ve bu amaç 1′den, verilen sayıya kadar olan sayıların toplamıdır.
Görüldüğü üzere scheme, sürekli olarak bir emir beklemekte ve verilen emir doğrultusunda kendi kurallar tabanına (rule base) bakarak en doğru karşılığı vermeye çalışmaktadır. C ise bir programı derlemekte ve derlenen bu program bir amaca yönelik olmaktadır.
164 views
