Composition is a design principle in OOP where objects are built by combining other objects, rather than inheriting from a base class. It represents a “has-a” relationship instead of an “is-a” relationship. Composition promotes modularity and code reuse, allowing complex functionality to be assembled from simpler, interchangeable parts. It is often favored over inheritance to achieve greater flexibility and reduce tight coupling between components.