> That is, after all, what sets "object-oriented" apart from having objects alone.
I wouldn't say so, most object-oriented languages don't work like Objective-C/Smalltalk. Today, I think most programmers would agree that inheritance is the defining feature of object-orientation.
Okay, that's what sets what was classically known as "object-oriented" apart.
Understandably, language evolves. If OO means something different today, what do most programmers call what used to be known as OO? I honestly have never heard anyone use anything else. But I am always up for refreshing my lexicon. What did most programmers settle on for this in order to free up OO for other uses?
Then what does it mean if "composition over inheritance" is also taught as a good practice in OO?
That's a rule-of-thumb to help beginners in making judgement calls. It doesn't mean inheritance should never be used.
True, but if the defining feature of something is a feature you should use sparingly, doesn't that mean other features are more definitive?