/* C does encapsulation */ /* ************************** module.h */ typedef struct Module_Tag Module; /* module declaration */ Module *Module_create(); /* constructor */ void Module_delete( Module * ); /* destructor */ int Module_getIndex( const Module * ); /* accessor */ void Module_doIncrement( Module * ); /* manipulator */ /* ************************** module.c */ #include "module.h" #include typedef struct Module_Tag { /* module definition */ int index; } Module_Tag_placeholder; Module *Module_create() { return (Module *)calloc( 1, sizeof( Module ) ); } void Module_delete( Module * m ) { free( m ); } int Module_getIndex( const Module * m ) { return m->index; } void Module_doIncrement( Module * m ) { m->index++; } /* ************************** main.c */ int main() { Module *m = Module_create(); int i; Module_doIncrement( m ); i = Module_getIndex( m ); Module_delete( m ); return 0; }