A Formal Component-Based Software Engineering Approach For Developing Trustworty Systems