"Si realmente quieres azúcar OO, ve a usar C ++" , fue la respuesta inmediata que recibí de uno de mis amigos cuando le pregunté esto. Sé que dos cosas están muy mal aquí. Primero OO NO es 'azúcar', y segundo, C ++ NO ha absorbido C.
Necesitamos escribir un servidor en C (el front-end que estará en Python), por lo que estoy explorando mejores formas de administrar grandes programas en C.
El modelado de un sistema grande en términos de objetos e interacciones de objetos lo hace más manejable, mantenible y extensible. Pero cuando intenta traducir este modelo a C que no contiene objetos (y todo lo demás), se enfrenta a algunas decisiones importantes.
¿Crea una biblioteca personalizada para proporcionar las abstracciones OO que necesita su sistema? Cosas como objetos, encapsulación, herencia, polimorfismo, excepciones, pub / sub (eventos / señales), espacios de nombres, introspección, etc. (por ejemplo, GObject o COS ).
O simplemente use las construcciones básicas de C ( struct
y funciones) para aproximar todas sus clases de objetos (y otras abstracciones) de manera ad-hoc. (por ejemplo, algunas de las respuestas a esta pregunta sobre SO )
El primer enfoque le brinda una forma estructurada de implementar todo su modelo en C. Pero también agrega una capa de complejidad que debe mantener. (Recuerde, la complejidad era lo que queríamos reducir mediante el uso de objetos en primer lugar).
No sé sobre el segundo enfoque, y qué tan efectivo es para aproximar todas las abstracciones que pueda necesitar.
Entonces, mis preguntas simples son: ¿Cuáles son las mejores prácticas para realizar un diseño orientado a objetos en C. Recuerde que no estoy preguntando CÓMO hacerlo. Esta y esta pregunta hablan de ello, e incluso hay un libro sobre esto. Lo que más me interesa son algunos consejos / ejemplos realistas que aborden los problemas reales que aparecen cuando dong esto.
Nota: por favor no aconseje por qué C no debe usarse a favor de C ++. Ya pasamos esa etapa.
extern "C"
y pueda usarse desde python. Puede hacerlo manualmente o puede hacer que SWIG lo ayude con eso. Por lo tanto, el deseo de la interfaz de Python no es motivo para no usar C ++. Eso no quiere decir que no haya razones válidas para querer quedarse con C.