Incorporating component-based design in the category-theoretic framework for composition of fault-tolerant software