"Jika Anda benar-benar ingin gula OO - gunakan C ++" - adalah tanggapan langsung yang saya dapatkan dari salah satu teman saya ketika saya menanyakan hal ini. Saya tahu ada dua hal yang salah di sini. OO pertama BUKAN 'gula', dan kedua, C ++ TIDAK menyerap C.
Kita perlu menulis server dalam C (front-end yang akan menggunakan Python), dan jadi saya mencari cara yang lebih baik untuk mengelola program C besar.
Pemodelan sistem besar dalam hal objek, dan interaksi objek membuatnya lebih mudah dikelola, dipelihara, dan diperluas. Tetapi ketika Anda mencoba menerjemahkan model ini ke dalam C yang tidak mengandung objek (dan yang lainnya), Anda ditantang dengan beberapa keputusan penting.
Apakah Anda membuat perpustakaan khusus untuk memberikan abstraksi OO yang dibutuhkan sistem Anda? Hal-hal seperti objek, enkapsulasi, pewarisan, polimorfisme, pengecualian, pub / sub (peristiwa / sinyal), ruang nama, introspeksi, dll. (Misalnya GObject atau COS ).
Atau, Anda cukup menggunakan konstruksi C dasar ( struct
dan fungsi) untuk memperkirakan semua kelas objek Anda (dan abstraksi lainnya) dengan cara ad-hoc. (misalnya, beberapa jawaban untuk pertanyaan ini di SO )
Pendekatan pertama memberi Anda cara terstruktur untuk mengimplementasikan seluruh model Anda dalam C. Tetapi juga menambahkan lapisan kompleksitas yang harus Anda pertahankan. (Ingat, kompleksitas adalah apa yang ingin kita kurangi dengan menggunakan objek sejak awal).
Saya tidak tahu tentang pendekatan kedua, dan seberapa efektif pendekatan ini untuk mendekati semua abstraksi yang mungkin Anda butuhkan.
Jadi, pertanyaan sederhana saya adalah: Apa praktik terbaik dalam mewujudkan desain berorientasi objek di C. Ingat saya tidak meminta BAGAIMANA melakukannya. Ini dan pertanyaan ini membicarakannya, dan bahkan ada buku tentang ini. Yang saya lebih tertarik adalah beberapa saran / contoh realistis yang membahas masalah nyata yang muncul ketika dong ini.
Catatan: tolong jangan menyarankan mengapa C tidak boleh digunakan untuk C ++. Kami telah melewati tahap itu.
extern "C"
dan dapat digunakan dari python. Anda dapat melakukannya secara manual atau Anda dapat meminta SWIG membantu Anda. Jadi keinginan untuk python frontend bukan alasan untuk tidak menggunakan C ++. Itu tidak mengatakan bahwa tidak ada alasan yang sah untuk tetap tinggal dengan C.