"Se vuoi davvero zucchero OO - vai a usare C ++" - è stata la risposta immediata che ho ricevuto da uno dei miei amici quando ho chiesto questo. So che due cose sono completamente sbagliate qui. Il primo OO NON è "zucchero" e, in secondo luogo, il C ++ NON ha assorbito C.
Dobbiamo scrivere un server in C (il front-end al quale sarà in Python), e quindi sto esplorando modi migliori per gestire grandi programmi in C.
Modellare un grande sistema in termini di oggetti e interazioni tra oggetti lo rende più gestibile, gestibile ed estensibile. Ma quando provi a tradurre questo modello in C che non porta oggetti (e tutto il resto), sei sfidato con alcune decisioni importanti.
Crei una libreria personalizzata per fornire le astrazioni OO necessarie al tuo sistema? Cose come oggetti, incapsulamento, eredità, polimorfismo, eccezioni, pub / sub (eventi / segnali), spazi dei nomi, introspezione, ecc. (Ad esempio GObject o COS ).
Oppure, basta usare i costrutti C di base ( struct
e le funzioni) per approssimare tutte le classi di oggetti (e altre astrazioni) in modi ad hoc. (ad esempio, alcune delle risposte a questa domanda su SO )
Il primo approccio offre un modo strutturato per implementare l'intero modello in C. Ma aggiunge anche un livello di complessità che è necessario mantenere. (Ricorda, la complessità era ciò che volevamo ridurre usando gli oggetti in primo luogo).
Non conosco il secondo approccio e quanto sia efficace approssimare tutte le astrazioni che potresti richiedere.
Quindi, le mie semplici domande sono: quali sono le migliori pratiche per realizzare un design orientato agli oggetti in C. Ricorda che non sto chiedendo come farlo. Questa e questa domanda ne parlano, e c'è anche un libro su questo. Quello che mi interessa di più sono alcuni consigli / esempi realistici che affrontano i problemi reali che si presentano quando si dong.
Nota: per favore non consigliare perché C non dovrebbe essere usato a favore di C ++. Siamo passati ben oltre quel palcoscenico.
extern "C"
e possa essere usata da Python. Puoi farlo manualmente o puoi farti aiutare da SWIG . Quindi il desiderio di frontend Python non è un motivo per non usare C ++. Ciò non significa che non ci siano validi motivi per voler stare con C.