Component-based software engineering putting the pieces together (Addison-Wesley, 2001)