ООП имеет состав и замену.
C ++ имеет множественное наследование, специализацию шаблонов, встраивание и семантику значения / перемещения / указателя.
Java имеет единственное наследование и интерфейсы, семантику встраивания и ссылки.
Обычный способ, которым школа ООП использует эти языки, - это использование наследования для замены объекта и встраивания для композиции. Но вам также нужен общий предок и способ приведения во время выполнения (в C ++ называется dynamic_cast
, в Java просто запрашивает интерфейс у другого).
Ява делает все это своими собственными java.lang.Object
корнями. C ++ не имеет предопределенного общего корня, поэтому вы должны по крайней мере определить его, чтобы прийти к одной и той же «картинке» (но это ограничивает некоторые возможности C ++ ...).
После этого возможность иметь полиморфизм во время компиляции (например, CRTP) и семантическое значение может предложить и другие альтернативы тому, как концепция «объекта ООП» может быть перенесена в программу C ++.
Вы даже можете представить себе ересь, использующую вложение и неявное преобразование для управления заменой и частным наследованием для управления композицией, фактически инвертируя традиционную школьную парадигму. (Конечно, этот путь на 20 лет моложе другого, поэтому не ожидайте широкой поддержки сообщества в этом)
Или вы можете представить себе виртуальную общую базу для всех классов: интерфейс формы (без реализации) и конечные классы (полностью реализованные), проходящие через частично реализованные интерфейсы и четные интерфейсные кластеры, используя «доминирование» как диспетчеризацию от интерфейса до реализаций через «многоуровневую структуру». -параллелограмм "Схема наследования.
Сравнение ООП с java с С ++ при условии, что существует только один и единственный способ ООП, ограничивает возможности обоих языков.
Принуждение C ++ к строгому соблюдению идиом кодирования Java денатурирует C ++, так как принуждение Java вести себя как C ++ -подобный язык денатурирует Java.
Дело не в «чувствительности», а в разных «механизмах агрегации», которыми обладают два языка, и по-разному объединяют их, что делает некоторые идиомы более выгодными в одном языке, чем в другом, и наоборот.