In computer science, decomposition is the process of identifying and organising a complex system into smaller components or layers of abstraction. Decomposition is the opposite process of composition, and is often used in object-oriented programming (OOP), structured programming, and structured analysis.
A decomposition paradigm in software engineering is a strategy for organising a program as a number of parts, and usually implies a specific way to organise source code. Typically, the aim of using a decomposition paradigm is to optimise some metric related to program complexity, for example, modularity or maintainability. Most decomposition paradigms suggest breaking down a program into parts to minimise the static dependencies between those parts, and to maximise each part's cohesiveness. Popular decomposition paradigms include the procedural, modular, abstract data type, and object-oriented paradigms.
Generally, functional decomposition in computer science is a technique for describing the complexity of the function of a model, describing an overarching function model as the summation of the series of functional models of subsystems. Object-oriented decomposition breaks a large system down into progressively smaller classes or objects, and is often regarded as the first step in the OOP design process. Algorithmic decomposition breaks a process down into well-defined steps, and is used largely in structured programming. In structured analysis, decomposition breaks down a software system from the system context level to system functions and data entities.