What is object-oriented programming?