Rigorous development of component-based systems using component metadata and patterns. (November 2016)