Software Architecture and design is becoming the mainstream of software design systems for software development. Architecture embodies information about components and their interaction, but omits information about components that does not pertain to their interaction. Thus, an architecture is foremost an abstraction of a system that suppresses details of components that do not affect the use, the relations and interactions of components. Private details of components, details that have to do solely with internal implementation and are not externally visible, are not architectural. In short, architecture determines how components interact, not how they are implemented.