The Principles and Concepts of Software Architectural Design