How are functions interpreted in the context of object-oriented programming? How are functions interpreted in the context of pure functional programming? What are higher-order functions? Why are higher-order functions useful?