C'nin nesne olarak kabul edilebilecek 'yapılar' gibi kendi yarı-nesnelerine sahip olduğu görülüyor.
Siz ve ben bir araya gelip , Wikipedia sayfasını nesne yönelimli programlama hakkında okuduk ve geleneksel olarak nesne yönelimli stil olarak kabul edilen C-tarzı yapıların özelliklerini gözden geçirelim :
(OOP) "nesneler" kullanan bir programlama paradigmasıdır - etkileşimlerle birlikte veri alanlarından ve yöntemlerden oluşan veri yapıları.
C yapıları etkileşimleriyle birlikte alanlardan ve yöntemlerden oluşuyor mu? Hayır.
Programlama teknikleri, veri soyutlama, kapsülleme, mesajlaşma, modülerlik, polimorfizm ve kalıtım gibi özellikleri içerebilir.
C yapıları bunlardan herhangi birini "birinci sınıf" şekilde yapıyor mu? Hayır. Dil, yolun her adımında size karşı çalışır.
Nesne yönelimli yaklaşım, programcının veriyi programın geri kalanı tarafından doğrudan erişilemeyen yerlere yerleştirmesini teşvik eder.
C yapıları bunu yapar mı? Hayır.
Bir nesneye yönelik program genellikle farklı nesneler içerecektir; her biri, yönetilmesi gereken belirli bir karmaşık verilere veya belki de gerçek dünyadaki bir nesneye veya konsepte karşılık gelen
C yapıları bunu yapar mı? Evet.
Nesneler, verilerin uygun şekilde kullanılmasını sağlamak için tasarlanmış bir dizi fonksiyonun içine verileri sardığı şeklinde düşünülebilir.
Hayır.
her nesne mesaj alma, veri işleme ve diğer nesnelere mesaj gönderme yeteneğine sahiptir.
Bir yapının kendisi mesaj gönderip alabilir mi? Hayır. Verileri işleyebilir mi? Hayır.
OOP veri yapıları "kendi operatörlerini yanlarında taşıma" eğilimindedir
Bu C de olur mu? Hayır.
Dinamik gönderi ... Kapsülleme ... Türü polimorfizmi ... Nesne mirası ... Açık özyineleme ... Nesne sınıfları ... Sınıf örnekleri ... Ekli nesneler üzerinde etki eden yöntemler ... Mesaj iletme .. Soyutlama
C yapılarının bu özelliklerinden herhangi biri var mı? Hayır.
Yapıların tam olarak hangi özelliklerinin "nesne yönelimli" olduğunu düşünüyorsunuz? Bulamıyorum Çünkü herhangi yapılar tanımlamak olması dışında türleri .
Şimdi, elbette fonksiyonlara işaret eden alanları olan yapılar yapabilirsiniz. Yapıların, sanal yöntem tablolarına karşılık gelen, işlev işaretçilerinin dizileri için işaretçiler olan alanları oluşturabilirsiniz. Ve bunun gibi. Tabii ki C ++ 'ı C cinsinden taklit edebilirsiniz. Ancak bu, C de programlamanın çok aptalca bir yolu değildir; Sadece C ++ kullanarak daha iyi olurdun.
Ve ayrıca, C dosyaları kendileri temelde ayrı "modüller" dir, değil mi? Öyleyse modüller de 'nesneler' gibi değil mi?
Yine, modüllerin hangi özelliklerinin nesneler gibi hareket etmelerini sağladığını düşünüyorsunuz? Modüller soyutlamayı, kapsülleme, mesajlaşmayı, modülerliği, polimorfizmi ve mirası destekliyor mu?
Soyutlama ve kapsülleme oldukça zayıf. Açıkçası modüller modüler; Bu yüzden onlara modül denir. Mesajlaşma? Sadece bir yöntem çağrısının bir mesaj olduğu ve modüller anlamında yöntemler içerebilir. Polimorfizm? Hayır! Kalıtım? Hayır! Modüller "nesneler" için oldukça zayıf adaylardır.