Languages are not so much a collection of features ...
If you want to define objects precisely, even just to have a language spec, they are absolutely made up of sums, products, recursive types, etc. Whatever useful metaphors one might have to work with objects doesn't change what they actually are. If you give the programmer access to these building blocks, you get ML. Calling them just domain specific ...
I meant that the particular way they're combined to get OOP is domain-specific.
> The notation g ∘ f is read as "g of f "...