Pavel, I've found only one problem in your design. Why do we need 1) if every component "must have" 2) E.g. why not to implement get_address(int) method in C language too? AFAIU Pavel Afremov's design has no C-interface methods at all.
-- Mikhail Fursov