Large systems are decomposed into subsystems Sub-systems provide related services Initial design process includes Identifying sub-systems Establishing a framework for sub-system control and communication Why to document the Architecture? Stakeholder Communication: High-level presentation of system System Analysis: Big effect on performance, reliability, maintainability and other -ilities Large-scale Reuse: Similar requirements similar architecture Architectural Styles Data-centered architecture style Data-flow architectures Call and return architecture Object-oriented architecture Layered architecture Data-centered architecture style A data store (Ex., a file or database) resides at the center of this architecture and is accessed frequently by other components. Client software accesses a central repository. In some cases the data repository is passive. That is, client software accesses the data independent of any changes to the data or the actions of other client software. Data-flow architectures This architecture is applied when input data are to be transformed. A set of components (called filters) connected by pipes that transmit data from one component to the next. Each filter works independently of those components upstream and downstream, is designed to expect data input of a certain form, and produces data output (to the next filter) of a specified form. Call and return architecture This architectural style enables a software designer (system architect) to achieve a program structure that is relatively easy to modify and scale. A number of sub styles exist within this category as below. Main program/subprogram architectures This classic program structure decomposes function into a control hierarchy where a “main” program invokes a number of program components, which in turn may invoke still other components. Remote procedure call architectures The components of a main program/subprogram architecture are distributed across multiple computers on a network. Object-oriented architecture A number of different layers are defined, each accomplishing operations that progressively become closer to the machine instruction set. At the outer layer, components service user interface operations. At the inner layer, components perform operating system interfacing. Intermediate layers provide utility services and application software functions.