"Eğer gerçekten OO şeker istiyorsan - git C ++ kullan" - bunu sorduğumda bir arkadaşımdan aldığım acil yanıt oldu. Burada iki şeyin yanlış olduğunu biliyorum. Birincisi OO 'şeker' DEĞİL, ikincisi C ++ C'yi EMMEZ.
Biz C (Python olacak ön uç) bir sunucu yazmak gerekir, bu yüzden büyük C programları yönetmek için daha iyi yollar araştırıyorum.
Büyük bir sistemi nesneler ve nesne etkileşimleri açısından modellemek, sistemi daha yönetilebilir, bakımı ve genişletilebilir hale getirir. Ancak bu modeli, nesneleri (ve diğer her şeyi) taşımayan C'ye çevirmeye çalıştığınızda, bazı önemli kararlarla karşı karşıya kalırsınız.
Sisteminizin ihtiyaç duyduğu OO soyutlamalarını sağlamak için özel bir kitaplık oluşturuyor musunuz? Nesneler, kapsülleme, kalıtım, polimorfizm, istisnalar, pub / sub (olaylar / sinyaller), ad alanları, içgözlem vb. (Örneğin GObject veya COS ) gibi şeyler .
Veya struct
tüm nesne sınıflarınızı (ve diğer soyutlamalarınızı) geçici yollarla yaklaşık olarak belirlemek için temel C yapılarını ( ve işlevlerini) kullanırsınız. (örneğin, SO'da bu sorunun bazı cevapları )
İlk yaklaşım, tüm modelinizi C'de uygulamak için yapılandırılmış bir yol sağlar. Ancak aynı zamanda sürdürmeniz gereken bir karmaşıklık katmanı ekler. (Unutmayın, karmaşıklık ilk etapta nesneleri kullanarak azaltmak istedik.)
İkinci yaklaşımı ve ihtiyacınız olabilecek tüm soyutlamaları tahmin etmenin ne kadar etkili olduğunu bilmiyorum.
Yani, basit sorularım: C'de bir nesne yönelimli tasarımın gerçekleştirilmesinde en iyi uygulamalar nelerdir. Bu ve bu sorular bunun hakkında konuşuyor ve bu konuda bir kitap bile var . Daha fazla ilgilendiğim şey, dong olduğunda ortaya çıkan gerçek sorunları ele alan bazı gerçekçi tavsiyeler / örnekler.
Not: Lütfen C'nin neden C ++ lehine kullanılmaması gerektiğini önermeyin. O aşamayı geçtik.
extern "C"
ve python'dan kullanılabilmesi için C ++ sunucusu yazabilirsiniz . Manuel olarak yapabilir veya SWIG'nin size bu konuda yardımcı olmasını sağlayabilirsiniz. Python frontend için arzu C ++ kullanmamak için bir neden değildir. Bu, C ile kalmak istemek için geçerli bir neden olmadığını söylüyor