In computer science, object composition (not to be confused with function composition) is a way to combine simple objects or data types into more complex ones. Compositions are a critical building block of many basic data structures, including the tagged union, the linked list, and the binary tree, as well as the object used in object-oriented programming.
In a programming language, when objects are typed, types can often be divided into composite and noncomposite types, and composition can be regarded as a relationship between types: an object of a composite type (e.g. car) "has an" object of a simpler type (e.g. wheel).
Consider the relation of an automobile to its parts, specifically: the automobile has or is composed from objects including steering wheel, seat, gearbox and engine. This relation might be fixed in a computer program as a composition relation. However, the real world relation is softer and fuzzier. The engine in one automobile may be replaced by the engine from another automobile, meaning the relation is better described as an aggregation than a composition. Generally speaking, as time passes, what looks like compositions tend to turn into aggregations, and aggregations tend to turn into looser associations.
Composition must be distinguished from subtyping, which is the process of adding detail to a general data type to create a more specific data type. For instance, cars may be a specific type of vehicle: car is a vehicle. Subtyping doesn't describe a relationship between different objects, but instead, says that objects of a type are simultaneously objects of another type.