Предпочтительная терминология обычно сильно зависит от языка, но я считаю, что большинство разработчиков ОО понимают друг друга независимо от терминов. (При этом я определенно согласен с тем, что выбор слова важен для максимизации эффективности общения.)
Моя предпочтительная терминология - «подклассы» или «расширяет» для классов и «реализует» для интерфейсов. (В Objective-C каждый «принимает» или «соответствует» протоколу, вдохновляющему интерфейсы Java.) Часто я использую «parent» и «child» для описания самих отношений.
Я считаю, что «это» работает лучше всего, если сравнивать с «имеет» (композицию), но это не имеет смысла для всех форм наследования - иногда сужение специфичности имеет смысл, но не всегда. Точно так же бывают случаи, когда «происхождение» просто кажется неправильным - многие люди поймут это как специализацию, но не все поймут. (Например, можно получить доказательство, химические вещества путем реакции и т. Д. Изучите словарную статью о слове, чтобы увидеть множество возможных значений, многие из которых связаны с набором шагов, который звучит больше как алгоритм, а не наследование.) Кстати, я обнаружил, что «базовый класс» и «производный класс» предпочитают многие ученые, но, возможно, не так часто в промышленности.