personnellement, je ne vois pas pourquoi C ne serait pas un langage oriente objet alors que C++ en est un. On passe facilement de l'ecriture des classes a une ecriture de struct avec pointeur de fonction. C'est un peu plus moche mais ca se fait tres bien si on en a besoin.
Si tu n'as qu'un seul M, un seul V et un seul C, tu peux juste partitionner tes fonctions dans des fichiers differents qui utilisent des donnees propres et tu as regle ton problemes.
Si tu as plusieurs type de l'un des composants, il faut alors faire de l'heritage proprement en C, c'est a dire faire des struct et des pointeurs de fonction qui prennent ces struct en argument.
je te donne un exemple en C++ et son equivalent en C pour que tu vois de quoi je parle:
struct Base
{
int foo;
virtual void bar()=0;
};
struct Fils1 : public Base
{
int fofo;
virtual void bar(){foo=12;}
};
struct Fils2 : public Base
{
double fofo;
virtual void bar(){foo=13;}
};
En C:
struct Base
{
int foo;
void (*bar)();
};
struct Fils1
{
struct Base b;
int fofo;
};
struct Fils2
{
struct Base b;
double fofo;
};
void bar_de_fils1(void* p)
{
struct Fils1* = p;
p->b.foo=12;
}
struct Fils1 build_fils1()
{
struct Fils1 f;
f.b.foo=bar_de_fils1;
}
void bar_de_fils2(void* p)
{
struct Fils2* = p;
p->b.foo=13;
}
struct Fils2 build_fils2()
{
struct Fils2 f;
f.b.foo=bar_de_fils2;
}