Pamukkale Üniversitesi Mühendislik Fakültesi

CENG 104 Bilgisayar Mühendisliği Semineri Dersi
Pamukkale Üniversitesi Mühendislik Fakültesi
Pamukkale University Engineering Faculty
BİLGİSAYAR PROGRAMLAMA DİLLERİ
COMPUTER PROGRAMMİNG LANGUAGES
1Ömer
1Bilgisayar
YÜCEL, 13253072
Mühendisliği Bölümü, Pamukkale Üniversitesi, Denizli.
[email protected]
Abstract
Özet
Bilgisayarların gelişim sürecinde programlama dilleri pek çok aşama
ve evrim sonucunda bugünkü şekillerini almışlardır. Programlama
dilleri, genel olarak uygulama alanına göre ve seviyelerine göre
sınıflandırılabilir. Programlama ortamında editör, derleyici,
kütüphane, bağlayıcı, yükleyici, hata ayıklayıcı, yorumlayıcı bileşenleri
bulunmaktadır.
Anahtar kelimeler: Programlama dili, Derleyici, Yorumlayıcı
1 Giriş
Programlama dilleri teorisi, Bilgisayar Mühendisliğinin bir
koludur ve tasarım, uygulama, analiz ve programlama
dillerinin genel özelliklerini içerir. Matematik, yazılım
mühendisliği, dil bilimi ve hatta eğitim bilimleri arasında yer
alan disiplinler arası bir konu olan programlama dilleri teorisi,
bilgisayar mühendisliğinin en temel kollarından biridir.
2 Bilgisayar Programlama Dilleri
2.1
Program ve Programlama Dili
Program, bir hesaplamanın yapılabilmesini sağlayan ardışık
simgeler dizisidir [1]. Programlama dili ise, bir makinenin
-esas olarak da bir bilgisayarın- davranışını kontrol etmek için
kullanılabilen ve ardışık simgelerden oluşan yapay bir dildir
[1]. Başka bir kaynak da ise program ve programlama dili
şöyle tanımlanmaktadır. Bir program bilgisayara ne yapması
gerektiğini söyleyen bir dizi komuttur. Bilgisayarlarda
işlemlerin
bilgisayar
tarafından
kolayca
anlaşılıp
uygulanabileceği bir dilde (makine dili) açıkça yazılması
gerekir. Ancak bu işlemlerin makine dilinde bir programcı
tarafından yapılması yerine, programlamanın yapısal biçimde
bir dil aracılığıyla yapılmasını ve daha sonra çevrilerek
bilgisayara anlatılması işlemini programlama dilleri
üstlenirler [2].
2.2 Programlama Dillerinin Tarihçesi
Charles
Babbage'nin
1822'de
analitik
makinesini
keşfetmesinden bu yana bilgisayarların belirli bir görevi
yapmalarına yönelik talimatları anlamaları ihtiyacı doğmuştur.
Programlama dilleri ilk olarak belirli bir programa belli bir işi
yapmak için talimatların adım adım bilgisayara girilmesi
şeklinde ortaya çıkmıştır. Daha sonraki zamanlarda
programlama dilleri mantıksal dallanma, nesne yönelimi gibi
özellikler kazanarak gelişim göstermiştir. Halen kullanılmakta
olan programlama dilleri son 50 yıllık süreçte iki önemli evre
geçirmişlerdir. Bunlar erken dönem programlama dilleri ve
modern programlama dilleri olarak iki ana grupta
toplanabilirler. Charles Babbage'nin analitik makinesi, sadece
dişli çarkların ayarlanması yoluyla bazı aritmetik
hesaplamalar yapabilen mekanik sistem olmasına karşılık, bu
ayarlamalar ilk programlama dili olarak kabul edilmiştir.
Zamanla bu fiziksel hareket şekli, yerini elektrik işaretlere
bırakmıştır. Bu şekilde bir programlama dili ilk olarak ABD
Computer programming languages in the development process of
many stages and forms received today as a result of evolution.
Programming languages can be classified in general, according to
their application area and according to their level. In programming
environment editor, compiler, libraries, linker, loader, debugger,
interpreter components are available.
Keywords: Programming language, Compiler, Interpreter
hükümeti tarafından geliştirilen ENIAC bilgisayarında
kullanılmıştır (1942). 1945 yılında, John Von Neumann
bilgisayar programcılığının yönünü belirleyen iki önemli
kavram geliştirmiştir. Bunlardan ilki, basit bir donanımın,
karmaşık komutlar ile kontrol edilmesini öngören ve yeniden
programlamayı basitleştirerek, programa göre donanım
değişikliğini ortadan kaldıran paylaşımlı programlama
tekniğidir. İkinci kavram ise programlama dilleri açısından
oldukça önemli olan, koşullu denetim transferi kavramıdır. Bu
kavram bir program kodunun yazılış sırasına göre işletilmesi
yerine alt programların ve kısa kod parçalarının istenen
herhangi bir sıraya göre işletilmesini öngörmektedir. Bu fikir
program kodunun dallanabilmek için "if-then" gibi mantıksal
ifadelere veya
"for" gibi döngü deyimlerine
göre
oluşturulması gerektiğini ifade etmektedir. 1949'da Short
Code adı verilen programlama dili ortaya çıkmıştır. Bu
elektronik cihazları programlamaya yarayan ilk programlama
dilidir. Bu dil karmaşık programlama dillerinin ilk örneği
olarak kabul edilir. 1951'de Grace Hopper ilk derleyiciyi
yazmıştır. Bu gelişme daha hızlı programlamaya imkân
vermiştir. 1957 yılında ilk gelişmiş programlama dili olan
FORTRAN ortaya çıkmıştır. Bu dil IBM tarafından bilimsel
hesaplamalar için geliştirilmiştir. Dil içeriği oldukça basit olup
kullanıcıya bilgisayarın donanımına alt seviyeden erişim
imkânı sağlar. Günümüzde kullanılan basit veri türleri,
kaynağını FORTRAN dilinden almıştır. FORTRAN dili sayısal
işlemlerde avantajlı bir dil olmasına rağmen giriş-çıkış
işlemlerinin kontrolü açısından yeterli bir dil değildir. Bu
nedenle giriş-çıkış düzenlemelerinin oldukça önemli olduğu
ticari uygulamalar için 1959'da COBOL dili geliştirilmiştir.
COBOL özellikle iş dünyası için geliştirilmiş bir dil olup, sadece
sayı ve metin türünde veri türlerini içermektedir. Aynı
zamanda bu dil, yukarıdaki veri türlerinin diziler ve kayıtlar
gibi veri grupları halinde organize edilmesine olanak
sağlamıştır. 1958'de, MIT'de çalışan John McCarthy, yapay
zeka araştırmaları için LISP dilini geliştirmiştir. Üstün
uzmanlık isteyen bir alan için tasarlanması sebebiyle kendine
özgü söz dizimi yapısına sahiptir. Bu dilin diğer dillerden en
büyük farkı içerdiği tek veri türünün liste olmasıdır. Liste veri
türü parantezler ile sınırlandırılmış bir öğeler dizisini ifade
eder. LISP dilinin kendi kendini değiştirme ve hatta geliştirme
gibi kendine özgü özellikleri vardır. ALGOL dili 1958 yılında
bir araştırma grubu tarafından bilimsel amaçlı kullanım için
geliştirilmiştir. Bu dilin programlama açısından önemi;
PASCAL, C, C++, JAVA gibi dillerin gelişmesi için ilk adım
Ö. Yücel
Pamukkale Üniversitesi Mühendislik Bilimleri Dergisi, Cilt XX, Sayı X, 20XX, Sayfalar XX-XX
olması ve aynı zamanda BNF (Backus-Naar Form) olarak
bilinen bir formal dil bilgisine sahip ilk programlama dili
olmasıdır. ALGOL dili bir sonraki nesli olan ALGOL 68 ile
birlikte, kendi kendini çağıran fonksiyonlar gibi özellikler
kazanmasına rağmen, bu özellikler kullanım zorluklarını da
beraberinde getirmiş, bu nedenle PASCAL gibi daha kolay ve
küçük programlama dillerinin geliştirilmesine neden
olmuştur. PASCAL dili düzenli bir yaklaşım izlenerek, o dönem
kullanımda olan COBOL, FORTRAN ve ALGOL gibi dillerin en
iyi özellikleri birleştirilerek Niklaus Wirth tarafından 1968
yılında geliştirilmiştir. Diğer dillerdeki giriş-çıkış işlemleri,
matematiksel fonksiyonlar gibi özelliklerin en iyilerinin
seçilmesi ile oluşturulan PASCAL dili oldukça başarılı bir dil
olmuştur. Bunun yanı sıra PASCAL ile birlikte işaretçi veri türü
de geliştirilmiştir. Ayrıca PASCAL dili "case" kontrol yapısını
içeren ilk dil olma özelliğini taşımaktadır. PASCAL dili dinamik
değişkenlerin kullanılması konusunda da yenilikler
içermektedir. Dinamik değişkenler, program çalışırken "new"
ve "dispose" komutları ile oluşturulabilen ve silinebilen
değişkenlerdir. Ancak PASCAL dili dinamik dizileri veya
dinamik değişken gruplarını desteklememektedir. PASCAL bu
özellikleri, bir sonraki nesil sayılan PASCAL-MODULA2
sayesinde kazanmıştır. Ancak bu dönemlerde C dili kullanıcılar
arasında popülerlik kazanmaya başlamıştır. C programlama
dili New Jersey'deki Bell Laboratuvarları'nda Dennis Ritchie
tarafından 1972 yılında geliştirilmiştir. İlk gelişmiş dillerden
günümüzün modern dillerine geçiş PASCAL' dan C' ye geçiş ile
olmuştur. C dilinin ataları B ve BCPL dilleri olmasına rağmen,
C dili ile PASCAL dilleri arasındaki benzerlikler oldukça
belirgindir. PASCAL'ın içerdiği bütün özellikler hatta "case"
gibi yeni özellikler bile C dili içerisinde bulunmaktadır. C dili
hızlı ve güçlü olmak adına işaretçi yapısını oldukça kapsamlı
kullanmakta, ancak yine bu sebepten dolayı okunabilirliği zor
bir dildir. C dili PASCAL dilindeki hataların büyük bir kısmını
giderdiği için PASCAL kullanıcılarını kazanmayı başarmıştır.
Dennis Ritchie C dilini yine aynı dönemde üzerinde çalışılan
Unix sisteminde kullanılmak üzere geliştirmiştir. Bu nedenle, C
ve Unix verimlilik açısından en uyumlu platformları
oluşturmaktadır. C dili Unix, Windows, MacOS ve çeşitli Linux
sürümleri gibi işletim sistemlerinin geliştirilmesinde
kullanılmıştır. 80'li yıllara doğru yeni bir programlama
yaklaşımı olan nesneye yönelik programlama ortaya çıkmıştır.
Bu yöntemde verinin parçaları programcı tarafından
paketlenebilen ve yönlendirilebilen birer nesne olarak ele
alınmıştır. Bu yaklaşımdan etkilenen Bjarne Stroustroup sınıf
veri türü içeren bir C uyarlaması (C with Classes)
geliştirmiştir. Bu eklentiler grubu, yeni bir programlama dili
olan C++ dilinin gelişiminin yolunu açmıştır. Böylece C++ dili
1983 yılında kullanıma sunulmuştur. C++ dili, C dilinin gücünü
nesneye yönelik programlama kullanılarak organize etmek
için geliştirilmiştir. Ancak nesneye yönelik programlama
metodu kullanılırken C dilini üstün kılan hızı ve taşınabilir
olma özellikleri korunmuştur. 1990'ların öncesinde interaktif
TV geleceğin teknolojisi olarak görülüyordu. SUN
Microsystems, interaktif TV'nin bir özelliğe ihtiyacı olduğuna
karar verdi. Bu özellik, bütün makinelerde sorunsuz çalışma
veya taşınabilirlik idi. 1994'de Java bu ihtiyaç üzerine
geliştirilmiştir.
İnteraktif
TV'nin
başarısızlıkla
sonuçlanmasından sonra, Java proje takımı giderek kullanımı
artan ve popülerleşen web üzerine yoğunlaştı. Bir yıl sonra
Netscape kendi internet gezginini geliştirmek için Java'nın
lisansını aldı. Bu tarihlerden itibaren birçok firma Java ile
yazılmış programlarını duyurmaya başladılar ve Java birden
bire çok kullanılan bir programlama dili haline geldi. Yüksek
hedeflere sahip Java, ciddi optimizasyon sorunlarına sahip
olmasına rağmen, bir anlamda geleceğin dili olarak kabul
edilebilir. Modern programlama dilleri arasında 1964'de
geliştirilen BASIC de önemli bir yere sahiptir. Esas olarak
bilgisayarla doğrudan ilgili olmayan alt düzeyli kullanıcılar
için geliştirilmiş olan BASIC, program komutlarının ardışık
olarak icrası üzerine kurulmuş, değişken tanımlama, giriş-çıkış
özellikleri oldukça basit olarak gerçekleştirilebilen ancak
sınırlı bir programlama dilidir. BASIC dili üzerine inşa edilen
Visual BASIC (VB) görselliğin ön plana çıkarıldığı bir
programlama dilidir. En az sayıda kod yazılarak, menüler,
sürgü çubukları ve iletişim kutuları hazırlanarak, Windows
uygulamaları
hazırlanması
ve
mevcut
Windows
uygulamalarına arayüz hazırlanabilmesi VB'nin çok popüler
bir dil olmasına yol açmıştır. 1987'de Larry Wall tarafından
Unix işletim sistemindeki metin eşleştirme özelliklerinin
yetersizliğinin giderilmesi amacıyla geliştirilen Perl, çoğu
zaman internetin tamiri için bir yapışkan bant olarak
adlandırılır. Bu tabirin temel nedeni, sahip olduğu çok güçlü
eşleştirme fonksiyonları nedeniyle, Perl'in web arayüzlerinin
ve program parçacıklarının uygunlaştırılmasında sıkça
kullanılan bir motor olmasından kaynaklanmaktadır [3].
Tarihsel gelişimi, en bilinen programlama dilleri açısından
yukarıdaki şekilde verilen programlama dillerinin birbiriyle
olan etkileşimleri ve geliştirilme tarihlerine göre Şekil 1'de
zaman çizelgesi şeklinde verilmiştir.
Şekil 1: Programlama dillerinin zaman çizelgesi
Ö. Yücel
Pamukkale Üniversitesi Mühendislik Bilimleri Dergisi, Cilt XX, Sayı X, 20XX, Sayfalar XX-XX
2.3
Programlama Dillerinin Sınıflandırılması
Programlama dilleri zamanla işlevlerine göre farklı alanlarda
kullanılmışlardır. Programlama dillerini, uygulama alanlarına
ve seviyelerine göre sınıflandırmak mümkündür [4].
Ön Uç
Sözdizimi
Çözümleme
Kaynak
Anlam
Çözümleme
Arka Kod
2.3.1 Genel Sınıflandırma
Temel (Imperative) Programlama Dilleri
Fortran, C, Cobol, Basic, Pascal
Veriye Yönelik (Data Oriented) Programlama Dilleri
Lisp, Apl, Snobol, Icon
Nesneye Yönelik (Object Oriented) Programlama Dilleri
Simula, C++, Ada 95, Java, Visual Basic (VB)
2.3.2 Uygulama Alanlarına Göre Sınıflandırma
Bilimsel ve Mühendislik Dilleri
Fortran, C, Pascal
Sistem Programlama Dilleri
C, Assembler
Veri Tabanı Dilleri
Dbase, Clipper
Yapay Zeka Dilleri
Prolog, Lisp
Genel Amaçlı Programlama Dilleri
C, Pascal, Basic
2.3.3 Seviyelerine Göre Sınıflandırma
Makine Dilleri
Düşük Seviye
Assembler (ASM)
Orta Seviye
C, C++, C#
Yüksek Seviye
Fortran, Basic, Pascal, Cobol
Çok Yüksek Seviye
Fortran, Clipper, VB, Paradox, Access
2.4 Programlama Ortamı
Bir programlama ortamı, programlama dili ile birlikte birçok
bileşenden oluşur. Bu bileşenler, sembolik olarak kodlanmış
programın bilgisayar donanımı tarafından istenilen işlevleri
yerine getirmesi için gereken tüm unsurlardır. Bir
programlama ortamının temel unsurları aşağıda açıklanmıştır.
2.4.1 Editör
Kaynak kodu oluşturmak ve gerektiğinde değişiklik yapmak
için gerekli olan araçtır. Editörde yazılanlar, seçilen dilin
komutlarından oluşan metinlerdir.
2.4.2 Derleyici
Editör tarafından bir bilgisayar dilinde yazılmış olan kaynak
kodunu, makine koduna çeviren bir bilgisayar programıdır. Ön
uç kodun söz diziminin ve anlam yapısının kullanılan dile
uygunluğunu kontrol ederken; arka uç makine kodunu üretir.
Ön uç dile bağımlı iken; son uç makineye bağımlıdır. Şekil 2'de
bir derleyicinin genel yapısı verilmiştir.
Arka Uç
Makineden
Bağımsız
Eniyileme
Kod Üretimi
Makine
Bağımlı
Eniyileme
Makine Kodu
Şekil 2: Bir derleyicinin genel yapısı
2.4.3 Kütüphane
Nesne dosyalarının tutulduğu yerlerdir.
2.4.4 Bağlayıcı
Programın içerdiği tüm nesne dosyalarını birleştirerek tek bir
yürütülebilir dosya haline getirir.
2.4.5 Yükleyici
Yürütülebilir dosyayı, diskten belleğe kopyalar.
2.4.6 Hata Ayıklayıcı
Programın hatalarını
anlayabilmek
için
programın
yürütülmesini, adım adım kontrol edilebilmesini sağlar.
2.4.7 Yorumlayıcı
Bir programın kaynak kodunu doğrudan satır satır yürüten bir
programdır.
2.5 Emulatör
Emulatör yazılımları birer dönüştürücüdürler. Eski oyun
makinelerindeki yazılım ve donanımı, bilgisayara uyumlu hale
getirerek oyunları oynamamızı sağlarlar. Öykünme
(emulasyon) veya öykünüm, herhangi bir bilgisayar ortamında
kullanılan yazılımlar yoluyla başka bir bilgisayar sisteminin
taklit edilmesi anlamına gelmektedir. Öykünme işini
gerçekleştiren yazılıma emulatör veya öykünücü adı verilir.
Günümüzde kişisel bilgisayarlarda her türlü eski bilgisayar ve
oyun sisteminin taklit edilmesi olanaklı hale gelmiştir. Sadece
kişisel bilgisayarlar için değil, çeşitli oyun konsolları ve farklı
işletim sistemlerinin farklı ortamlarda çalıştırılması da
sağlanır [5].
2.6 UML
UML (Unified Modelling Language) yazılım sistemlerinin
olgularını tanımlamak, görselleştirmek, oluşturmak ve kayıt
altına almak (dokümante etmek) için kullanılan bir standartlar
dilidir. UML, büyük ve karmaşık sistemlerin modellenmesinde
başarısı ispatlanmış deneyimlerin bir araya gelmesiyle
oluşmuştur ve nesneye yönelik yazılım ve yazılım geliştirme
sürecinin önemli bir parçasıdır. UML, yazılım projelerinin
tasarımını daha çok grafiksel öğeler ile belirtir. UML kullanımı
takım içindeki iletişimi güçlendirir, potansiyel tasarımların
ortaya çıkmasını sağlar ve yazılımın mimari tasarımını ortaya
koyar [6].
Ö. Yücel
Pamukkale Üniversitesi Mühendislik Bilimleri Dergisi, Cilt XX, Sayı X, 20XX, Sayfalar XX-XX
Sorular
Soru 1)
Programlama dili ilk olarak hangi bilgisayarda kullanılmıştır ?
A) Analitik Makine
B) ENIAC
C) Mark 1
D) DEVAC
E) UNIVAC
Şekil 3: Java UML sınıf diyagramı örneği
3 Sonuçlar
Yapmış olduğum bu çalışmada, bilgisayar programlama
dillerinin tarihçesi hakkında bilgiler edindim. Programların
nasıl sınıflandırıldığı ve bir programlama ortamında hangi
bileşenlerin bulunduğu bilgisine ulaştım. Bilgisayar
programlama dillerinin bilgisayar mühendisliğinin en temel
kollarından birisi olduğu sonucuna ulaştım. Bilgisayar
programlama dilleri yıllardır geliştirilmekte olup, gelecekte de
bu gelişimi devam ettirilecektir. Her geliştirilen programlama
dili belirli eksikleri gidermekle birlikte yeni boşluklar da
oluşturacaktır.
4 Kaynaklar
[1] Dr. Rifat Çölkesen, Bilgisayar Mühendisliğine Giriş,
Papatya Yayıncılık Eğitim, İstanbul, 2010.
[2] http://www.bilgisayarogren.com/basic1.doc
(Erişim tarihi: 16.02.2014)
[3] Dr. Rifat Çölkesen, Bilgisayar Mühendisliğine Giriş,
Papatya Yayıncılık Eğitim, İstanbul, 2010.
[4] Dr. Rifat Çölkesen, Bilgisayar Mühendisliğine Giriş,
Papatya Yayıncılık Eğitim, İstanbul, 2010.
[5] http://emulator.nedir.com/#ixzz2uh3Tw5Vl
(Erişim tarihi: 01.03.2014)
[6] http://uml.nedir.com/#ixzz2tPu43wSI
(Erişim tarihi: 15.02.2014).
Soru 2)
Aşağıdaki programlama dillerinden hangisi kendi kendini
değiştirme ve hatta geliştirme gibi kendine özgü özellikleri
olan ve John McCarthy tarafından yapay zeka araştırmaları
için geliştirilen bir programlama dilidir ?
A) PROLOG
B) COBOL
C) LISP
D) FORTRAN
E) ALGOL
Soru 3)
Bir programlama ortamında aşağıdaki bileşenlerden hangileri
bulunur ?
I. Derleyici II. Editör III. Emulatör IV. Bağlayıcı
A) I, II
B) II, IV
C) I, II, III
D) I, II, IV
E) I, II, III, IV
Soru 4)
Aşağıda tanımları verilen kavramların, doğru eşleştirilmiş
şekli verilen kavramların sırasına göre aşağıdakilerden
hangisidir ?
-Emulatör, UML, Editör, Program, Programlama Dili,
YorumlayıcıI. Bir hesaplamanın yapılabilmesini sağlayan ardışık simgeler
dizisidir.
II. Bir makinenin davranışını kontrol etmek için kullanılabilen
ve ardışık simgelerden oluşan yapay bir dildir.
III.
Yazılım
sistemlerinin
olgularını
tanımlamak,
görselleştirmek, oluşturmak ve kayıt altına almak için
kullanılan bir standartlar dilidir.
IV. Bir programın kaynak kodunu doğrudan satır satır yürüten
bir programdır.
V. Kaynak kodu oluşturmak ve gerektiğinde değişiklik yapmak
için gerekli olan araçtır.
VI. Öykünme veya öykünüm, herhangi bir bilgisayar ortamında
kullanılan yazılımlar yoluyla başka bir bilgisayar sisteminin
taklit edilmesi anlamına gelmektedir. Öykünme işini
gerçekleştiren yazılımdır.
A) V, IV, VI, I, II, III
B) IV, V, III, II, I, VI
C) III, VI, V, I, II, IV
D) V, VI, IV, II, I, III
E) VI, III, V, I, II, IV