OOP tem composição e substituição.
O C ++ possui herança múltipla, especialização de modelo, incorporação e semântica de valor / movimentação / ponteiro.
Java possui herança e interfaces únicas, semântica de incorporação e referência.
A maneira comum de a escola OOP usar esses idiomas é empregar herança para substituição de objetos e incorporação para composição. Mas você também precisa de um ancestral comum e de uma maneira de converter o tempo de execução (em C ++ é chamado dynamic_cast
, em Java é apenas pedir uma interface a outra).
Java faz tudo isso por sua própria java.lang.Object
hierarquia enraizada. O C ++ não possui uma raiz comum predefinida, portanto, você deve pelo menos defini-la, para obter a mesma "imagem" (mas isso está limitando algumas possibilidades do C ++ ...).
Depois disso, a possibilidade de ter polimorfismo em tempo de compilação (pense no CRTP) e semântica de valor também pode oferecer outras alternativas à maneira como o conceito de "objeto OOP" pode ser portado para um programa C ++.
Você pode até imaginar a heresia de usar a incorporação e a conversão implícita para gerenciar a substituição e a herança privada para gerenciar a composição, de fato invertendo o paradigma tradicional da escola. (É claro que, dessa maneira, é 20 anos mais novo que o outro, por isso não espere um amplo apoio da comunidade para fazer isso)
Ou você pode imaginar uma base comum virtual para todas as classes, interface de formulário (sem implementação) para classes finais (totalmente implementada) passando por interfaces parcialmente implementadas e até clusters de interface, usando "dominância" como despacho da interface para implementações através de um "multi-stacked" -parallelogram "esquema de herança.
Comparar OOP com java e C ++, assumindo que há apenas uma e única maneira de OOP está limitando os recursos de ambos os idiomas.
Forçar o C ++ a aderir estritamente aos idiomas de codificação Java está desnaturando o C ++, como forçar o Java a se comportar como uma linguagem semelhante ao C ++ está desnaturando o Java.
Não é uma questão de "sensibilidade", mas de diferentes "mecanismos de agregação" que as duas línguas têm e uma maneira diferente de combiná-las, o que torna um idioma mais lucrativo em um idioma que o outro e vice-versa.