The purpose of this paper is to build the foundation for software architecture.
We first develop an intuition for software architecture by appealing to several wellestablished architectural disciplines.
On the basis of this intuition, we present a model of software architecture that consists of three components: elements, form, and rationale. Elements are either processing, data, or connecting elements. Form is defined in terms of the
properties of, and the relationships among, the elements -- that is, the constraints on the elements. The rationale
provides the underlying basis for the architecture in terms of the system constraints, which most often derive
from the system :requirements. We discuss the components of the model in the context of both architectures
and architectural styles and present an extended example to illustrate some important architecture and style
considerations. We conclude by presenting some of the benefits of our approach to software architecture, summarizing
our contributions, and relating our approach to other current work.