Object-oriented programming: Themes and variations