In this section, we discuss some concepts that are central to arriving at good software architecture. The notion of architecture, of course, is broader than the items discussed, but we focus on these because of their growing role in the development of large-scale software.
Decomposition refers to the partitioning of a system into smaller, logical pieces to make it easier to manage the complexity. Modules, subsystems, and components are all examples of decomposition.
Decomposition helps define and clarify interfaces between different pieces of a system. It can also be helpful in situations where you must integrate legacy or externally purchased applications.
Decomposition can also ...