13 Ocak 2015 Salı

Programlama Dillerinin Değerleme Ölçütleri


Kaynaklar şu an halen kullanımda olan yaklaşık 1000 - 1500 programlama dilinin varlığından

söz  ediyor.  Neden  bu  kadar  fazla  programlama  dili  var?  Bu  kadar  fazla  programlama  dili
olmasına  karşın  neden  halen  yeni  programlama  dilleri  tasarlanıyor?  Bir  programlama  dilini
diğerine ya da diğerlerine göre daha farklı kılan özellikler neler olabilir? Bir programlama dilini
tanımlamak  istesek  hangi  sıfatları  kullanabiliriz?  Programlama  dilleri  hakkındaki  bu  sorulara
yanıt  verebilmemiz  için  elimizde  değerlendirme  yapmamıza  olanak  sağlayacak  ölçütler
olmalıdır. Bu ölçütleri kısaca inceleyelim:

Verimlilik (efficiency)

Bu özelliğe programın hızlı çalışma özelliği diyebiliriz. Programın çalışma hızı pek çok faktöre
bağlıdır. Algoritmanın da hız üzerinde etkisi vardır. Çalışmanın yapıldığı bilgisayarın da doğal
olarak hız üzerinde etkisi vardır. Verimliliği bir programlama dilinde yazılmış bir programın hızlı
çalışması ile ilgili bir kavram olarak düşünebiliriz. Bu açıdan bakıldığında C verimli bir dildir.
Veri türleri ve yapıları (data types and structures)
Çeşitli  veri  türlerini  (tamsayı,  gerçek  sayı,  karakter...)  ve  veri  yapılarını  (diziler,  yapılar  vs.)
destekleme yeteneğidir. Veri yapıları, veri türlerinin oluşturduğu mantıksal birliklerdir. Örneğin
C ve Pascal dilleri veri yapıları bakımından zengin dillerdir.
Alt programlama yeteneği (Modularity)
Bir bütün olarak çözülmesi zor olan problemlerin parçalara ayrılması ve bu parçaların ayrı ayrı
çözümlenmesinden  sonra  parçalar  arasındaki  koordinasyonun  sağlanması  programada  sık
başvurulan bir  yöntemdir.  Bir  programlama  dili  buna  olanak sağlayacak araçlara  sahipse  alp
programlama  yeteneği  vardır  diyebilirriz.  Alt  programlama  yeteneği  bir  programlama  dilinin,
programı parçalar halinde yazmayı desteklemesi anlamına gelir. (C modülaritesi çok yüksek bir
dildir)
Alt  programlama  Yapısal  Programlama  tekniği'nin  de  ayrılmaz  bir  parçasıdır.  Alt
programlamanın   getirdiği  bazı  önemli  avantajlar  vardır.  Alt  programlar  kodu  küçültür.  Çok
tekrarlanan  işlemlerin  alt  programlar  kullanılarak  yazılması  çalışabilir  programın  kodunu
küçültür.  Çünkü  alt programlar  yalnızca  bir  kere  çalışabilir kod içine yazılırlar.  Ama program
kodu alt programın olduğu yere atlatılarak bu bölgenin defalarca çalıştırılması sağlanabilir.
Alt programlama algılamayı kolaylaştırır, okunabilirliği artırır. Alt programlama kaynak kodun
test edilebilirliğini artırır. Kaynak kodun daha kolay güncelleştirilmesi ve yeniden kullanılabilme
olanağını  artırır.  Alt  programlamanın  en  önemli  avantajlarından  biri  de   genel  amaçlı  kodlar
yazarak bu yazılan kodları birden fazla projede kullanabilmektir. (reusability)
C  alt  programlama  yeteneği  yüksek  bir  dildir.  C'de  alt  programlara  fonksiyon  denir.
Fonksiyonlar C Dili'nin yapıtaşlarıdır.
Yapısallık (structural programming support)
Yapısallık  bir  programlama  tekniğidir.  Bugün  artık  hemen  hemen  bütün  programlama  dilleri
yapısal  programlamayı  az  çok  destekleyecek  bir  şekilde  geliştirilmiştir.  Yapısal  Programlama
fikri  1960'lı  yıllarda  geliştirilmiştir.  Yapısal  programlama  tekniği  dört  ana  ilke  üzerine
kurulmuştur :

1. Böl ve üstesinden gel (divide and conquer)

Yapısal programlama tekniğinde, tek bir bütün olarak çözüm getirmek zor olan programlar,
daha  küçük  ve  üstesinden  daha  kolay  gelinebilecek  parçalara  bölünürler.  Bu  parçalar
fonksiyon, prosedür, subroutine, alt program vs. olarak isimlendiriler. Alt program yapısının
getirdiği avantajlar modularite konusunda yukarıda açıklanmıştır.

2. Veri gizleme (Data hiding)

Yapısal programlama tekniğinde, programın diğer parçalarından ulaşılamayan, yalnızca belli
bir faaliyet alanı olan, yani kodun yalnızca belli bir kısmında faaliyet gösterecek değişkenler
tanımlanabilir. Bu tür değişkenler genel olarak "yerel değişkenler" (local variables) olarak
isimlendirilirler.  Değişkenlerin  faaliyet  alanlarının  kısıtlanabilmesi  hata  yapma  riskini
azalttığı gibi, programların daha kolay değiştirilebilmesini  ve program parçalarının  başka
programlarda  tekrar  kullanabilmesini  de  sağlar.  Alt  programların,  ve  daha  geniş  şekliyle
modüllerin,  bir  işi  nasıl  yaptığı  bilgisi,  o  alt  programın  ya  da  modülün  kullanıcısından
gizlenir.  Kullanıcı  için  (client)  alt  programın  ya  da  modülün  işi  nasıl  yaptığı  değil,  ne  iş
yaptığı önemlidir.
3. Tek giriş ve Tek çıkış (single entry single exit)
Yapısal programlama tekniğini destekleyen dillerde her bir altprogram parçasına girmek için
tek bir giriş ve tek bir çıkış mekanizması vardır. Bu mekanizma programın yukarıdan aşağı
olarak akışı ile uyum halindedir. Program parçalarına ancak tek bir noktadan girilebilir.
4. Döngüler ve diğer kontrol yapıları.
Artık  hemen  hemen  kullanımda  olan  bütün  programlama  dilleri  az  ya  da  çok  Yapısal
Programlama  tekniğini  desteklemektedir.  Zira  bu  teknik  60'lı  yıllar  için  devrim
niteliğindeydi.

Esneklik (flexibility)

Esneklik  programlama  dilinin  programcıyı  kısıtlamaması  anlamına  gelir.Esnek  dillerde  birçok
işlem, hata yapma riski artmasına karşın rağmen kullanıcı için serbest bırakılmıştır. Programcı
bu  serbestlikten  ancak  yetkin  bir  programcıysa  bir  fayda  sağlayabilir.  Fakat  programcı
deneyimsiz ise bu esneklikten zarar görebilir.
Öğrenme ve öğretme kolaylığı (pedagogy)
Her  programlama  dilini  öğrenmenin  ve  öğrenilen  programlama  dilinde  uygulama
geliştirebilmenin   zorluğu  aynı  değildir.  Genel  olarak  programlama  dillerinin  seviyesi
yükseldikçe, öğrenme ve bu programlama dilini başkalarına öğretme kolaylaşır, öğrenme için
harcanacak  çaba  ve  zaman  azalır.  Bugün  yaygın  olarak  kullanılan  yüksek  seviyeli  programlı
dillerinin  bu  derece  popüler  olmasının  önemli  bir  nedeni  de  bu  dillerin  çok  kolay
öğrenilebilmesidir. Ne yazık ki C öğrenimi zor ve zahmetli bir dildir.

Genellik (generality)

Programlama  dillerinin  çok  çeşitli  uygulamalarda  etkin  olarak  kullanılabilmesidir.  Örneğin
COBOL mühendislik uygulamalarında tercih edilmez zaten ticari uygulamalar için tasarlanmıştır,
Clipper ya da FOXPRO veri tabanı dilleridir. Oysa PASCAL, BASIC daha genel amaçlı dillerdir. C
dili de bir sistem programlama dili olarak doğmasına karşın, güçlü yapısından dolayı, kısa bir
süre içinde, genel amaçlı bir dil haline gelmiştir.
Giriş / Çıkış (input / output, I / O facility) kolaylığı
Sıralı, indeksli ve rasgele dosyalara erişme, veritabanı kayıtlarını geri alma, güncelleştirme ve
sorgulama  yeteneğidir.  Veritabanı  programlama  dillerinin  (DBASE,  PARADOX  vs.)  bu
yetenekleri diğerlerinden daha üstündür ve bu dillerin en tipik özelliklerini oluşturur. Fakat C
giriş  çıkış  kolaylığı  kuvvetli  olmayan  bir  dildir.  C'de  veri  tabanlarının  yönetimi  için  özel
kütüphanelerin kullanılması gerekir.
Okunabilirlik (readability)
Okunabilirlik,  kaynak  kodun  çabuk  ve  iyi  bir  biçimde  algılanabilmesi  anlamına  gelen  bir
terimdir.  Kaynak  kodun  okunabilirliğinde  sorumluluk  büyük  ölçüde  programı  yazan  kişidedir.
Fakat  yine  verimlilik  de  olduğu  gibi  dillerin  bir  kısmında  okunabilirliği  güçlendiren  yapı  ve
mekanizmalar bulunduğu için bu özellik bir ölçüde dilin tasarımına da bağlıdır. En iyi program
kodu, sanıldığı gibi "en zekice yazılmış fakat kimsenin anlayamayacağı" kod değildir.
Birçok  durumda  iyi  programcılar  okunabilirliği  hiçbirşeye  feda  etmek  istemezler.  Çünkü
okunabilir  bir  program  kolay  algılanabilme  özelliğinden  dolayı  seneler  sonra  bile güncelleştirmeye olanak  sağlar.  Birçok  kişinin  ortak  kodlar  üzerinde  çalıştığı  geniş  kapsamlı
projelerde okunabilirlik daha da önem kazanmaktadır.
C  de  okunabilirlik  en  fazla  vurgulanan  kavramlardan  biridir.  Biz  de  kursumuz  boyunca
okunabilirlik  konusuna  sık  sık  değineceğiz  ve  C  programlarının  okunabilirliği  konusunda  bazı
temel prensipleri benimseyeceğiz.

Taşınabilirlik (portability)

Bir  sistem  için  yazılmış  olan  kaynak  kodun  başka  bir  sisteme  götürüldüğünde,  hatasız  bir
biçimde derlenerek, doğru bir şekilde çalıştırılabilmesi demektir.
Taşınabilirlik  standardizasyon  anlamına  da  gelir.  Programlama  dilleri  (ISO  International
Standard Organization) ve ANSI (American National Standard Institute) tarafından standardize
edilirler. 1989 yılında standartlaştırma çalışmaları biten C Dili, diğer programlama dillerinden
daha taşınabilir bir programlama dilidir.

Nesne Yönelimlilik (object orientation)

Nesne yönelimlilik de bir programlama tekniğidir.
Yapısal  programlama  Tekniği  1960  yılarında  gündeme  gelmişken,  Nesne  Yönelimli
Programlama Tekniği 1980'li yıllarda popüler olmuştur.
Bu  teknik  kaynak  kodların  çok  büyümesi  sonucunda  ortaya  çıkan  gereksinim  yüzünden
geliştirilmiştir. C dilinin geliştirildiği yıllarda, akla gelebilecek en büyük programlar ancak onbin
satırlar mertebesindeydi, ancak kullanıcıların bilgisayar programlarından beklentilerinin artması
ve grafik  arayüzünün  artık  etkin olarak kullanılmasıyla, bilgisayar  programlarının  boyutu  çok
büyümüş, yüzbin satırlarla hatta milyon satırlarla ölçülebilir hale gelmiştir.
Nesne  yönelimli  programlama  Tekniği,  herşeyden  önce  büyük  programların  yazılması  için
tasarlanmış  bir  tekniktir.  C  dilinin  yaratıldığı  yıllarda  böyle  bir  tekniğin  ortaya  çıkması  söz
konusu değildi, çünkü zaten programlar bugünkü ölçülere göre çok küçüktü.
Nesne yönelimli programlama Tekniğinin yaygın olarak kullanılmaya başlanmasıyla birlikte bir
çok  programlama  dilinin  bünyesine  bu  tekniğin  uygulanmasını  kolaylaştırıcı  araçlar  eklenek,
yeni  versiyonları  oluşturulmuştur.  Örneğin  C'nin   nesne  yönelimli  programlama  tekniğini
uygulayabilmek  için  Bjarne  Stroustrup  tarafından  geliştirilmiş  haline  C++  denmektedir.  C++
dili C dili baz olarak alınıp, geliştirilmiş yeni bir programlama dilidir. C++ dilini iyi öğrenebilmek
için öncelikle C dilini çok iyi öğrenmek gerekir.
Pascal diline eklemeler yapılarak Delphi dili, Cobol dilinden yenilemesiyle OOCobol, Ada dilinin
yenilenmesiyle ise ADA 95 dilleri geliştirilmiştir.
Bazı  programlama  dilleri  ise  doğrudan  N.Y.P.T'ni  destekleyecek  şekilde  tasarlanarak
geliştirilmiştir.  Örneğin  JAVA  dili  C++  dilinin  basitleştirilmiş  biçimi  olup  daha  çok  Internet
uygulamalarında kullanılmaktadır. Başka bir örnek olarak da Eiffel dili verilebilir

0 Yorum:

Yorum Gönder