UML components: A simple process for specifying component-based software - John Cheesman (Addison-Wesley, 2001)