C ile C++ Arasındaki Farklar Nedir?

Sponsorlu Bağlantılar

Eren Değerli

Eren Değerli

Moderator
    Konu Sahibi
C ile C++ Arasındaki Farklar Nedir?
C diline (veya) C++ diline yabancı olan fakat merakla izleyen çoğu kimsede ilgi uyandıran bir konu olacağı düşüncesiyle bu makalenin faydalı olacağını ümit ediyoruz.

Öncelikle şunu belirtelim; bu makalenin konusu bir takım teknik konuları veya kod parçalarını incelemekten ziyade bu dillerin temel farklılıkları üzerinde olacak.

Programlama dillerinde tasarım yönünden eksiklikler olabilmektedir. Şu ana kadar 1500 civarında programlama dilinin varlığından söz ediliyorsa bunun en önemli nedeni dillerin daha çok spesifik amaçlar için tasarlanmasıdır. C++ dilinin ortaya çıkışını bu bağlamda ele alabiliriz. C++ dili C dilinden türemiştir. Yani C++ dili; C'deki eksiklikler giderilerek ve C' de olmayan birçok ek özellik getirilerek ortaya çıkmıştır diyebiliriz.

C++' ın en başta gelen farklılığı ise Nesne Yönelimli (Object-Oriented) olmasıdır. Buna karşın C fonksiyonel bir dildir (procedural). Peki tam olarak nedir Nesnel Yönelimli Programlama? Kısaca değinecek olursak; C dilinde (veya fonksiyonel herhangi bir dilde) program yazarken programımızı fonksiyonlara parçalar ve tasarlardık. Yani programımızın temel parçası fonskyionlar idi. C++ da ise programlarımızın temel birimi nesnelerdir. Örneğin bir satranç oyununu simule eden programı yazdığımızı düşünelim. Programda bazı nesnelerin Satranç tahtası, Piyon, Vezir, vs olacagini düşünebiliriz. Bu şekilde program yazmak hepimizin farkedecegi gibi daha kolay ve en önemlisi de gerçeğe daha uygundur. Zaten nesne yönelimli programlamanın ortaya çıkışında yatan ilham kaynaği da diyebileceğimiz en önemli unsur gerçek dünyayı modelleyebilmektir.

Farklı bir örnekle konuyu açıklamaya çalışalım. Mesela programımızda "otomobil" diye bir nesnemizin olduğunu düşünelim. Bu nesnenin direksiyon, fren, kapı gibi elemanları oldugu gibi gitmek, hızlanmak gibi özellikleri de olmalıdır. Hatta bu alt elemanların da kendilerine ait elemanlari ve özellikleri olduğunu ve otobomil nesnesinin de üyesi olduğu daha kompleks bir nesne olduğunu düşünebiliriz. Işte C++ bize böyle karmaşık yapıyı kolayca tasarlayabileceğimiz bir araç sunuyor. Bu yapıyı program içinde C de olmayan yeni bir anahtar sözcük (keyword) olan class (sınıf) ile kuruyoruz. class yapılarının C deki struct veri yapısına benzediği kısmen doğrudur fakat artık class yapıları içinde fonksiyon tanımlayabiliyoruz.

Basit bir örnekle açıklayacak olursak; C de oluşturduğumuz iki tane farklı yapı düşünelim. X ve Y yapilari. X' i Y' ye kopyalamak için " Y = X; " gibi bir ifade kullanamazdık. C++ ile kopyalamanın ne şekilde olacağını belirterek bunu doğal olarak yapabiliyoruz.

Bu noktada sorabilecegimiz en önemli soru şudur : Bu işlemi biz C dilinde de farklı bir yolla yapabilirdik, o halde neden C++? Şunu belirtelim ki C++ ile yazabildigimiz tüm programları kesinlikle C diliyle de yazabiliriz. Fakat programımızın boyutu büyüdükçe, karmaşıklıgı arttıkça ve zamanın bizim için çok önemli oldugunu düsündüğümüzde artık yazabilmekten ziyade hızli, kolay ve efektif bir şekilde program yazmanın gerekliliği ortaya çıkıyor ve bu noktada Nesne Yönelimli Programlamanın ihtiyacını hissediyoruz.

Aslında burada belirtilmesi gereken diger bir husus daha vardır. C ile de şüphesiz nesnel programlama yapabiliriz. Fakat bunu yapabilmek oldukça zordur. C++ ise Nesne yönelimli programlamaya imkan vermekten öte zaten bu paradigmaya göre tasarlanmıştır ve yapısındaki araçlar sayesinde bunu kolaylaştırmıştır.
 
  • Beğen
Tepkiler: Jelly Beanci, gold_star, ByEmre221 ve 1 kişi daha


MAERKEK

MAERKEK

Moderator
Başını okumam yetti . Hangisi symbianda çalışır ?
 
  • Beğen
Tepkiler: ByEmre221
Jelly Beanci

Jelly Beanci

Üye
C ile Nesne yönelimli programlama yapılamaz!

Struct ile veri tipi oluşturulabilir ancak bir dilin OOP sayılabilmesi için
-Abstraction
-Polymorphism
-Inheritance
-Encapsulation
İlkelerini sağlıyor olmalı

Access modiferların olmayışı data saklamayı imkansız hale getiriyor her fonksiyon her değişkene ulabiliyor
Kalıtım yok. hiç bir class (ki class da yok) başka bir classın özelliklerin basit bir extend vs ile alamıyor
Sadece Abstraction OOP için yeterli bir özellik değil

C#, Java ve Visual C++ ı OOP olarak kullanan birisi olarak C ye OOP demek bende bu yanlışı düzeltme isteğini oluşturdu
 
  • Beğen
Tepkiler: gold_star ve MAERKEK

Benzer Konular

Eren Değerli
Cevap
6
Görüntüleme
629
Eren Değerli
    • Beğen
Cevap
1
Görüntüleme
360
MAERKEK
Eren Değerli
Cevap
0
Görüntüleme
454
Eren Değerli
Cevap
1
Görüntüleme
525
DarkredBlue61


Üst Alt