Yes, these are all the same - they have to be, and it's not a problem, since there is only one line in every implementation, delegating to the `protected addOrderBy()` method, which contains the actual logic.

There is nothing wrong with that. People have been doing horizontal reuse this way since the dawn of classical inheritance, and it actually does have some advantages - suppose that orderBy() *wasn't* precisely the same in one of the implementations, or it had some other side-effect: now you have an obvious place to implement those differences.

With multiple inheritance (traits) your hope is that this situation will never happen - and when it does happen (such as in the case of `getBindValues()` which had many different implementations) the code paths gets even more obscure and difficult to follow...