C ile C++ Arasındaki Farklar Nedir?


Eren Değerli

Eren Değerli

Moderator
    Konu Sahibi
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





MaxiCep.com internet sitesi 5651 Sayılı Kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında BTK kurumu tarafından onaylı Yer Sağlayıcı olarak faaliyet göstermektedir. İçerikler, ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır.

MaxiCep.com; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir.

MaxiCep.com’un yer sağladığı içeriğin 5651 Sayılı Kanun’un 8 ila 9. maddelerine aykırı şekilde; kişilik haklarınızı ihlal ettiğini ya da hukuka aykırı olduğunu düşünüyorsanız Buradan yada [email protected] mail adresine e-mail göndererek iletişime geçerek bildirebilirsiniz.

Bildirimleriniz dikkatle ve özenle incelenmekte olup kişilik haklarınızın ihlali ya da hukuka aykırılığın tespiti halinde mevzuat kapsamında en kısa sürede işlem yaparak bilgi vereceğiz.
Üst Alt