Software Architecture
1.1 run-time abstraction
A software architecture is an abstraction of the run-time elements of a software system during some phase of its operation. A system may be composed of many levels of abstraction and many phases of operation, each with its own software architecture.
At the heart of software architecture is the principle of abstraction: hiding some of the
details of a system through encapsulation in order to better identify and sustain its
properties.
The differences between software architecture and software structure: the former is an abstraction of the run-time behavior of a software system, whereas the latter is a property of the static software source code.
1.2 Elements
A software architecture is defined by a configuration of architectural elements — components, connectors, and data — constrained in their relationships in order to achieve a desired set of architectural properties.
Components are those that perform transformations on data, data elements are those that contain the information that is used and transformed, and connectors are the glue that holds the different pieces of the architecturetogether.
Software architecture includes architectural properties. Rationale explicates those properties, but the rationale itself is not part of the architecture.
Rather than defining the software’s architecture as existing within the software, it is defining a description of the software’s architecture as if that were the architecture.
1.2.1 Components
A component is an abstract unit of software instructions and internal state that provides a transformation of data via its interface.
1.2.2 Connectors
A connector is an abstract mechanism that mediates communication, coordination, or cooperation among components.
1.2.3 Data
A datum is an element of information that is transferred from a component, or received by a component, via a connector.
1.3 Configurations
A configuration is the structure of architectural relationships among components, connectors, and data during a period of system run-time.
1.4 Properties
1.5 Styles
An architectural style is a coordinated set of architectural constraints that restricts the roles/features of architectural elements and the allowed relationships among those elements within any architecture that conforms to that style.
1.6 Patterns and Pattern Languages
A design pattern is defined as an important and recurring system construct.
The pattern is, in short, at the same time a thing, which happens in the
world, and the rule which tells us how to create that thing, and when we must
create it. It is both a process and a thing; both a description of a thing which is
alive, and a description of the process which will generate that thing.
1.7 Views
three important views in software architecture: processing, data, and connection views. A process view emphasizes the data flow through the components and some aspects of the connections among the components with respect to the data. A data view emphasizes the processing flow, with less emphasis on the connectors. A connection view emphasizes the relationship between components and the state of communication.