C++ Diline Giriş ve C++ Dilinin Tarihi

Bilgisayarların, işletim sistemlerinin ve daha birçok şeyin evrimleşmesini sağlayan dil şüphesiz ki C dilidir. C dili zamanında programcıları makineye yakınlıktan kurtararak bilgisayar dünyasına çok büyük katkılarda bulunmuştur. Yıllar geçtikçe programlama dilleri de artmış ve programlamaya olan yaklaşımlara yenileri eklenmiştir. Bu yaklaşımlardan birisi de günümüzde hala yaygınlığını koruyan nesneye yönelik programlama yaklaşımıdır. Peki nedir bu nesneye yönelik yaklaşım? İleride bunu güzel bir analoji ile açıklayacak olsak da burada kısaca bahsedelim.

Nesneye yönelik prrogramlama yaklaşımı, programlamanın fonksiyonlardan çıkıp nesneler üzerinde gerçekleşmesini sağlayan yaklaşımdır. C dili yapısal bir programlama dilidir. Yapısal programlama dillerinde kodun çeşitli kısımlarına istenildiği gibi atlama olayı engellenmiş ve problemi çeşitli parçalara bölerek programlama mantığı getirilmiştir. Ayrıca yapısal programlamada genelde fonksiyonlar üzerinden işlem yapılır. Yani en basit çay demleme algoritmasına şu şekilde bakarsak:

  • BAŞLA
  • Çaydanlığın kapağını aç
  • Çaydanlığa su koy
  • Demliğin kapağını aç
  • Demliğe çay koy
  • Demliği çaydanlığın üzerine koy
  • Ocağı yak
  • Çaydanlığı ocağın üzerine koy
  • Bekle
  • Suyun kaynayıp kaynamadığını kontrol et (if)
  • Su kaynamadıysa bir süre daha bekle, kaynadıysa ocağı kapat
  • BİTİR

Gördüğünüz gibi her şey bir eyleme dayanıyor. Bazı adımlarda ise karar yapılarını görüyorsunuz. Fakat nesne yönelimli yaklaşımda çaydanlık bir nesne, demlik bir nesne, ocak da bir nesnedir. Nesnelerin belli özellikleri ve yapabilecekleri davranışları vardır. Örneğin çaydanlık nesnesinin renk, şekil, boyut gibi özellikleri ve kapağının açılabilmesi, kapağının kapatılabilmesi gibi eylemleri vardır. Nesneye yönelik programlamada işte bu şekilde bir çaydanlık nesnesi ve diğer nesneler oluşturularak birbiriyle etkileşime sokulur. Günümüzde nesneye yönelik programlamanın çok popüler olmasının sebebi gerçek hayattaki uygulamalara yatkın olmasıdır. Fakat her koşulda da kullanıma uygun olmayabilir.

C dili işte bu yaklaşımı desteklemez ve günümüz uygulamalarından C dili ile işin altından kalkmak zorlaşır. Elbette yapılamaz değildir. Fakat sizi epeyce zorlayacaktır. İşte C dilinin de sözdizimini koruyarak artık kendini evrimleştirmesinin vakti gelmiştir. Bu ve benzeri nedenlerle çalışmalar yapan Bjarne Stroustrup, 1979 yılında Bell Laboratuvar’larında C++ dilini geliştirmeyi tamamlamıştır. İlk başlarda Sınıflarla C (C with Classes) olarak adlandırılan bu dil 1980’lerin başlarında C++ ismini almıştır.

Figür 1: Bjarne Stroustrup[1]

C++ dili C dilinin yeteneklerini içermekteydi. Fakat daha da önemlisi bu dil, nesne yönelimli programlama yaklaşımını da desteklemekteydi. Nesne yönelimli yaklaşım ilk başta Simula I ve Simula 67 programlama dillerinde ortaya çıkmıştı. Bu diller 1960’larda geliştirilmiş ve birçok nesneye yönelik programlama ile ilgili kavramları ortaya çıkarmıştır. Yani C++ dili nesneye yönelimli programlamayı ilk kullanan dil değildir. Bjarne Stroustrup da Simula 67 dilinden esinlenerek bu dilin standartlarını oluşturmuştur.

Daha C++ dilinin ismi Sınıflarla C iken Cfront adı verilen derleyici ile C++ programlarının derlenmesi yapılıyordu. Fakat bu derleyicinin yaptığı şey C++ kodlarını C diline çevirerek derlenmesini sağlamaktı. C++ diline yeni özellikler eklendikçe ve özellikle oldukça karmaşık bir implementasyona sahip olan hata yakalama (exception handling) mekanizması da eklenmeye çalışılınca ortaya bir kaos çıktı. Bu nedenle 1993 yılında bu derleyici üzerinde çalışmaya son verildi. Buna rağmen bu derleyici birçok derleyiciye ve Unix işletim sistemi üzerindeki geliştirmelere katkı sağladı.

C++ dilinin ismi C++ olduğunda, C’nin sonuna eklenen “++“, C dilinde bir artırma operatörü olarak kullanıldığı için C’nin bir üstü gibi bir anlam ortaya çıkarılmaya çalışılmıştır. 1985 yılında Stroustrup The C++ Programming Language isimli referans dokümanı yayınladı. Aynı yıllarda dil artık ticari olarak implement edilmeye başlanmıştı. Fakat bu yıllarda dil resmi olarak standardize edilmemişti. 1990 yılında The Annotated C++ Reference Manual isimli doküman yayınlandı ve aynı yılda Borland firması Turbo C++ derleyicisini ticari olarak yayınladı.

1998 yılında ise ISO, C++ dilini uluslararası standart olarak C++ ISO/IEC 14882:1998 kod adıyla yayınladı. Bu standart kısaca C++98 olarak adlandırıldı (resmi olmayarak). Bu arada C++’ın esas güç kaynağı olan Standart Şablon Kütüphanesi (Standard Template Library, STL) 1979 yılından beri geliştirilmekteydi. Bu kütüphanede birçok programlama dilinde kullanılan standart veri yapıları ve algoritmalar bulunmaktaydı. Bu kütüphane programcılar için çok fazla kolaylık sağladı. Her sene geliştirilmeye ve yeni veri yapıları ile algoritmalar eklenmeye devam etti.

İşte C++ dilinin tarihi gelişimi bu şekilde özetlenebilir. C++ standartlarını ve günümüzde ne gibi çalışmalar yürütüldüğünü bir sonraki bölümde açıklayacağım. Çünkü standartlar bir dil için önemli bir yere sahiptir. Bir standartta yazılmış bir program başka bir standartta çalışmayabilir. Bu da dil içinde çeşitliliğe neden olmaktadır. Bunun tıpkı bir dilde farklı yörelerde konuşulan lehçelere benzetebiliriz. Mesela Türkçe dili her yörede aynı konuşulmaz. Farklı yörelerde farklı şekilde kelimeler kullanılır. Fakat buradaki standart kavramı biraz bundan farklıdır. Standardın yılı arttıkça dildeki yenilikler artmaktadır. Buradaki standart kavramı biraz da gelişim göstergesidir. Bir sonraki bölümde bunu ayrıntılı olarak açıklayacağım.

Son olarak C dilinde anlattığım ve burada tekrar anlatmayacağım konulardan bahsedeceğim. C++ dili içerisinde C dilinin birçok özelliği kullanılmaktadır ve zaten C++ dili C dili üzerine kurulmuştur. C++ dilindeki derleme aşamaları da tıpkı C diline benzemektedir. Bir programın metin halinden çalıştırılabilir dosya haline gelene kadar ne gibi aşamalardan geçeceğini C dili eğitiminde anlattım. Bunu tekrarlamayacağım. Ayrıca C++ dili birçok uzantı kullanır. C dilinin dosya uzantıları “.c” ve “.h” iken, C++ dilinde “.C“, “.cc“, “.cpp“, “.cxx“, “.c++“, “.h“, “.hh“, “.hpp“, “.hxx” ve “.h++” gibi birçok dosya uzantısı bulunur. Bu uzantıların yine kullanım alanlarına göre farklılıkları bulunabilmektedir. Bunları da yine yeri geldiğinde açıklayacağım.

C programlama dilinde bulunan anahtar kelime (keyword), tanımlayıcı (identifier), değişken (variable), sabit (constant), operatör, operatör önceliği, sağ taraf değeri (rvalue), sol taraf değeri (lvalue), temel veri tipleri gibi kavramlar C++’ta da bulunmaktadır. Ayrıca bu kavramlar çok büyük değişiklikler içermemekte olup, zaten yeri geldiğinde bu değişikliklerden bahsedeceğim için bu kavramlara ayrı konu olarak değinmeyeceğim. Bunun yanında C eğitiminde bahsetmiş olduğum (veya olacağım) koşul ve döngü yapıları gibi konulara da burada girmeyeceğim. C dili eğitimini en azından göstericiler (pointers) konusuna kadar bitirip anladıktan sonra bu eğitime başlamanızı tavsiye ediyorum.

REFERANSLAR

  1. https://www.chu.cam.ac.uk/media/assets/c5/e1a07c7e25d7f42aa8312a852d1af34b25222e.jpg
5 1 vote
Article Rating
Subscribe
Bildir
guest

0 Yorum
Eskiler
En Yeniler Beğenilenler
Inline Feedbacks
View all comments