object is responsible for assuring that methods of those interfaces inherited from actually invoke the corresponding methods of the owner. This is to guarantee that the reference count of the owner is correct and all interfaces of the owner are accessible through the exported interface, while no other (private) interfaces of the owned object are accessible. Special forms Containment Composition that is used to store several instances of the composited data type is referred to as containment. Examples of such containers are arrays, associative arrays, binary trees, and linked lists. In UML, containment is depicted with a multiplicity of 0..* or 1..*, indicating that the composite object is composed of an unknown number of instances of the composed class. Recursive composition Objects can be composed recursively, and their type is then called recursive type. Examples includes various kinds of trees, DAGs, and graphs. Each node in a tree may be a branch or leaf; in other words, each node is a tree at the same time when it belongs to another tree. In UML, recursive composition is depicted with an association, aggregation or composition of a class with itself. Composite pattern The composite design pattern is an object oriented design based on composite types, that combines recursive composition and containment to implement complex part-whole hierarchies. Composite types in C This is an example of composition in C. struct Person { int age; char name[20]; enum {job_seeking, professional, non_professional, retired, student} employment; }; In this example, the primitive (noncomposite) types , } and the composite array type are combined to form the composite structure . Each structure then "has an" age, name, and an employment type. Timeline of composition in various languages C calls a record a struct or structure; object-oriented languages such as Java, Smalltalk, and C++ often keep their records hidden inside objects (class instances); languages in the ML family simply call them records. COBOL was the first widespread programming language to support records directly; ALGOL 68 got it from COBOL and Pascal got it, more or less indirectly, from ALGOL 68. Common Lisp provides structures and classes (the latter via the Common Lisp Object System). 1959 – COBOL 01 customer-record. 03 customer-number pic 9(8) comp. 03 customer-name. 05 given-names pic x(15). 05 initial-2 pic x. 05 surname pic x(15). 03 customer-address. 05 street. 07 street-name pic x(15). 09 house-number pic 999 comp. 05 city pic x(10). 05 country-code