A Process Algebraic Approach to Software Architecture