Composition in object-oriented programming