Şimdiye kadarki tüm cevaplar, “c ve c ++ arasındaki fark nedir” derken sorunuzun konusuna odaklandı. Gerçekte, farkın ne olduğunu biliyor gibisiniz, sadece neden bu farka ihtiyacınız olduğunu anlamıyorsunuz. O zaman, diğer cevaplar OO ve kapsülleme açıklamaya çalıştı.
Başka bir cevap ile cevap vermek istedim, çünkü sorunuzun ayrıntılarına dayanarak, birkaç adım geri gitmeniz gerektiğine inanıyorum.
C ++ veya OO'nun amacını anlamıyorsunuz, çünkü sizin için uygulamanızın yalnızca veri depolaması gerektiği görünüyor. Bu veri değişkenlerde saklanır. “Neden erişilmez bir değişken yapmak isteyeyim? Şimdi artık erişemiyorum! Her şeyi halka açık ya da daha iyi hale getirerek, her yerden veri okuyabilirim ve hiçbir sorun yaşamadım.” - Şu anda yazmakta olduğunuz projelerin ölçeğine dayanarak haklısınız, muhtemelen çok fazla sorun yoktur (ya da vardır, ancak henüz farkında değilsiniz).
Bence gerçekten yanıtlamanız gereken temel soru şudur: "Neden veri gizlemek isteyeyim? Bunu yaparsam, onunla çalışamam!" Ve bu yüzden:
Diyelim ki yeni bir proje başlattınız, metin editörünüzü açtınız ve fonksiyon yazmaya başladınız. Bir şeyi saklamak istediğiniz her zaman (daha sonra hatırlamak için), bir değişken yaratırsınız. İşleri kolaylaştırmak için değişkenlerinizi global hale getirirsiniz. Uygulamanızın ilk sürümü harika çalışıyor. Şimdi daha fazla özellik eklemeye başladınız. Daha fazla fonksiyona sahipsiniz, önceden sakladığınız bazı veriler yeni kodunuzdan okunmalıdır. Diğer değişkenlerin değiştirilmesi gerekiyor. Daha fazla fonksiyon yazmaya devam ediyorsun. Fark etmiş olabileceğiniz (ya da değilse bile gelecekte kesinlikle farkedeceğiniz), kodunuz büyüdükçe, bir sonraki özelliği eklemek daha uzun ve daha uzun sürer. Kodunuz büyüdükçe, işe yarayan bir şeyi bozmadan özellik eklemek daha da zorlaşıyor. Neden? Çünkü hepsini hatırlamalısın.Genel değişkenleriniz saklanıyor ve hepsinin nerede değiştirildiğini hatırlamanız gerekiyor . Ve hangi fonksiyonun hangi sırayla çağırılmasının uygun olduğunu hatırlamanız gerekir ve onları farklı bir sırayla çağırırsanız , hatalarınızı alabilirsiniz çünkü global değişkenleriniz henüz tam olarak geçerli değildir. Buna hiç rastladınız mı?
Tipik projeleriniz (kod satırları) ne kadar büyük? Şimdi sizinkinin 5000 ila 50000 katı büyüklüğünde bir projeyi görüntülüyorum. Ayrıca, içinde çalışan birden fazla insan var. Ekipteki herkes bu değişkenlerin ne yaptığını nasıl hatırlayabilir (veya farkında bile olabilir)?
Yukarıda tarif ettiğim şey mükemmel bir şekilde birleştirilmiş kod örneğidir. Ve zamanın başlangıcından beri (zamanın 1 Ocak 1970’te başladığı varsayılarak) insan türü bu sorunlardan kaçınmanın yollarını arıyordu. Onlardan kaçınmanın yolu, kodunuzu sistemler, alt sistemler ve bileşenlere ayırmak ve kaç işlevin herhangi bir veri parçasına erişebilmesini sağlamaktır. 5 tamsayı ve bir tür durumu temsil eden bir dizgem varsa, sadece 5 işlev değerleri belirler / alırsa bu durumla çalışmak benim için daha kolay olur mu? veya eğer 100 işlev aynı değerleri ayarladıysa / alıyorsa? OO dilleri olmasa bile (örneğin C) insanlar, verileri diğer verilerden izole etmek ve kodun farklı bölümleri arasında temiz ayırma sınırları oluşturmak için çok çalışıyorlar. Proje belirli bir boyuta ulaştığında, programlama kolaylığı “Y değişkeninden X değişkenine erişebilir miyim” olmaz,
Bu yüzden OO kavramları tanıtıldı ve bu yüzden bu kadar güçlüler. Verilerinizi kendinizden gizlemenizi sağlar ve bunu bilerek yapmak istersiniz , çünkü o verileri ne kadar az kodlar görürseniz, o kadar az şansı vardır ki, bir sonraki özelliği eklediğinizde bir şeyleri kıracaksınız. Bu, kapsülleme ve OO programlama kavramlarının temel amacıdır. Sistemlerimizi / alt sistemlerimizi daha da ayrıntılı kutulara bölmenize izin veriyorlar, genel projenin büyüklüğü ne olursa olsun, belirli bir değişkenler kümesine yalnızca 50-200 kod satırıyla erişilebilecek bir noktaya kadar! Açıkçası OO programlamanın çok daha fazlası var, fakat özünde, C ++ size verileri / işlevleri özel, korumalı veya genel olarak bildirme seçenekleri sunar.
OO'daki en büyük ikinci fikir soyutlama katmanları kavramıdır. Prosedürel dillerin de soyutlamalar yapabilmesine rağmen, C'de, bir programcının bu katmanları oluşturmak için bilinçli bir çaba sarf etmesi gerekir, ancak C ++ 'da bir sınıf ilan ederken, otomatik olarak bir soyutlama katmanı oluşturursunuz (hala bu soyutlamanın size kalmış olup olmadığına bağlıdır) değer katacak veya kaldıracak). Soyutlama katmanları hakkında daha fazla okumalısınız / araştırmalısınız ve daha fazla sorunuz varsa, bu forumun bu soruları cevaplamaktan daha mutlu olacağından eminim.