"Se você realmente quer açúcar OO - vá usar C ++" - foi a resposta imediata que recebi de um dos meus amigos quando perguntei isso. Eu sei que duas coisas estão completamente erradas aqui. Primeiro OO NÃO é 'açúcar', e segundo, C ++ NÃO absorveu C.
Precisamos escrever um servidor em C (o front-end para o qual será em Python) e, portanto, estou explorando maneiras melhores de gerenciar grandes programas em C.
Modelar um sistema grande em termos de objetos e interações com objetos o torna mais gerenciável, sustentável e extensível. Mas quando você tenta traduzir esse modelo em C, que não contém objetos (e tudo o mais), você é desafiado a tomar algumas decisões importantes.
Você cria uma biblioteca personalizada para fornecer as abstrações de OO necessárias ao seu sistema? Coisas como objetos, encapsulamento, herança, polimorfismo, exceções, pub / sub (eventos / sinais), namespaces, introspecção etc. (por exemplo, GObject ou COS ).
Ou, você apenas usa as construções ( struct
e funções) básicas de C para aproximar todas as suas classes de objetos (e outras abstrações) de maneiras ad-hoc. (por exemplo, algumas das respostas para esta pergunta no SO )
A primeira abordagem fornece uma maneira estruturada de implementar todo o modelo em C. Mas também adiciona uma camada de complexidade que você precisa manter. (Lembre-se de que a complexidade era o que queríamos reduzir usando objetos em primeiro lugar).
Não sei sobre a segunda abordagem e qual é a eficácia em aproximar todas as abstrações que você pode precisar.
Portanto, minhas perguntas simples são: Quais são as melhores práticas para realizar um design orientado a objetos no C. Lembre-se de que não estou perguntando COMO fazê-lo. Esta e esta pergunta falam sobre isso, e há até um livro sobre isso. O que mais me interessa são alguns conselhos / exemplos realistas que abordam os problemas reais que aparecem quando isso acontece.
Nota: por favor, não avise por que C não deve ser usado em favor de C ++. Passamos bem além desse estágio.
extern "C"
e possa ser usada no python. Você pode fazer isso manualmente ou o SWIG pode ajudá-lo com isso. Portanto, o desejo de frontend em python não é motivo para não usar C ++. Isso não é tão dizer que não existem razões válidas para querer ficar com C.