"Se vuoi davvero lo 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 il secondo, il C ++ NON ha assorbito C.
Abbiamo bisogno di scrivere un server in C (il front-end al quale sarà in Python), quindi sto esplorando modi migliori per gestire programmi C di grandi dimensioni.
La modellazione di un sistema di grandi dimensioni in termini di oggetti e le interazioni degli oggetti lo rendono più gestibile, gestibile ed estensibile. Ma quando provi a tradurre questo modello in C che non sopporta oggetti (e tutto il resto), sei sfidato con alcune decisioni importanti.
Crei una libreria personalizzata per fornire le astrazioni OO di cui il tuo sistema ha bisogno? Cose come oggetti, incapsulamento, ereditarietà, polimorfismo, eccezioni, pub / sub (eventi / segnali), namespace, introspezione, ecc. (Ad esempio GObject o COS ).
Oppure, usi solo i costrutti di base C ( struct
e funzioni) per approssimare tutte le classi oggetto (e altre astrazioni) in modi ad-hoc. (ad esempio, alcune delle risposte a questa domanda su SO )
Il primo approccio ti offre un modo strutturato per implementare l'intero modello in C. Ma aggiunge anche un livello di complessità che devi mantenere. (Ricorda, la complessità era ciò che volevamo ridurre utilizzando 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. Questo e questa domande ne parlano, e c'è anche un prenota su questo. Quello che mi interessa di più sono alcuni consigli / esempi realistici che affrontano i problemi reali che si presentano quando questo dong.
Nota: per favore non consigliare perché C non dovrebbe essere usato a favore di C ++. Siamo andati oltre quella fase.