Object-oriented programming: Themes and variations | Synapse