As the size of software systems increases, the algorithms and data structures of the computation no longer constitute the major design problems. When systems are constructed from many components, the organization of the overall system-the software architecture-presents a new set of design problems. This level of design has been addressed in a number of ways including informal diagrams and descriptive terms, module interconnection languages, templates and frameworks for systems that serve the needs of specific domains, and formal models of component integration mechanisms.
Software Architecture Just as good programmers recognized useful data structures in the late 1960s, good software system designers now recognize useful system organizations. Garlan & Shaw: An Introduction to Software Architecture 5 One of these is based on the theory of abstract data types. But this is not the only way to organize a software system. Many other organizations have developed informally over time, and are now part of the vocabulary of software system designers. For example, typical descriptions of software architectures include synopses such as (italics ours):
• “Camelot is based on the client-server model and uses remote procedure calls both locally and remotely to provide communication among applications and servers.”
• “Abstraction layering and system decomposition provide the appearance of system uniformity to clients, yet allow Helix to accommodate a diversity of autonomous devices. The architecture encourages a client server model for the structuring of applications.”
• “We have chosen a distributed, object-oriented approach to managing information.”
• “The easiest way to make the canonical sequential compiler into a concurrent compiler is to pipeline the execution of the compiler phases over a number of processors…. A more effective way [is to] split the source code into many segments, which are concurrently processed through the various phases of compilation [by multiple compiler processes] before a final, merging pass recombines the object code into a single program.” Other software architectures are carefully documented and often widely disseminated. Examples include the International Standard Organization’s Open Systems Interconnection Reference Model (a layered network architecture), the NIST/ECMA Reference Model (a generic software engineering environment architecture based on layered communication substrates), and the X Window System (a distributed windowed user interface architecture based on event triggering and callbacks). We are still far from having a well-accepted taxonomy of such architectural paradigms, let alone a fully-developed theory of software architecture. But we can now clearly identify a number of architectural patterns, or styles, that currently form the basic repertoire of a software architect.
Article Source: http://EzineArticles.com/5885707