Позвольте мне сначала сказать, что у меня достаточно опыта как в C, так и в C ++. Тем не менее, я начинаю новый проект на C и работаю с объектно-ориентированными языками так долго (C # и C ++), что у меня возникают проблемы с эффективным способом инкапсуляции функциональности в процедурном языке. Моей первой мыслью было просто прибегнуть к своим ОО-знаниям и структурировать их примерно так:
struct Foo
{
int x;
char *y;
};
struct Foo *new_Foo()
{
return (struct Foo *)malloc(sizeof(struct Foo));
}
void Foo_member_function(struct Foo *foo, int z)
{
foo->x = z;
}
Но это только кажется утомительным и противоречит духу C. Не говоря уже о том, что это ОО бедняка.
Эта программа в конечном итоге получит довольно значительный объем, поэтому очень важно начинать с хорошей проектной организации. Я предполагаю, что с годами разработки на C были разработаны определенные шаблоны проектирования для того, чтобы наилучшим образом структурировать код для удобства сопровождения. Как и функциональное программирование, я надеюсь, что процедурное программирование имеет парадигму, которая является чистой и достаточно читаемой.
Указатели на соответствующие статьи и книги также допустимы.