OOP tiene composición y sustitución.
C ++ tiene herencia múltiple, especialización de plantilla, incrustación y semántica de valor / movimiento / puntero.
Java tiene herencia única e interfaces, incrustación y semántica de referencia.
La manera común en que la escuela OOP usa estos idiomas es emplear la herencia para la sustitución de objetos y la inclusión para la composición. Pero también necesita un ancestro común y una forma de ejecutar en tiempo de ejecución (en C ++ se llama dynamic_cast
, en Java solo se le pide una interfaz a otra).
Java hace todo esto por su propia java.lang.Object
jerarquía enraizada. C ++ no tiene una raíz común predefinida, por lo que al menos debería definirla para llegar a una misma "imagen" (pero esto limita algunas posibilidades de C ++ ...).
Después de eso, la posibilidad de tener polimorfismo en tiempo de compilación (piense en CRTP) y valor semántico puede ofrecer también otras alternativas a la forma en que el concepto de "objeto OOP" se puede portar a un programa C ++.
Incluso puede imaginar la herejía de utilizar la conversión implícita y la incorporación para gestionar la sustitución y la herencia privada para gestionar la composición, de hecho invirtiendo el paradigma tradicional de la escuela. (Por supuesto, de esta manera es 20 años más joven que la otra, así que no esperes un amplio apoyo de la comunidad para hacerlo)
O puede imaginar una base común virtual para todas las clases, desde la interfaz de formulario (sin implementación) hasta las clases finales (completamente implementadas) pasando por interfaces parcialmente implementadas y grupos de interfaces uniformes, utilizando el "dominio" como envío de la interfaz a las implementaciones a través de un "multi apilado -parallelogram "esquema de herencia.
Comparar OOP con java y C ++ suponiendo que solo haya una y única forma de OOP es limitar las capacidades de ambos lenguajes.
Obligar a C ++ a adherirse estrictamente a los modismos de codificación de Java es desnaturalizar C ++ como forzar a Java a comportarse como un lenguaje similar a C ++ es desnaturalizar Java.
No es una cuestión de "sensibilidad" sino de diferentes "mecanismos de agregación" que los dos idiomas tienen y una forma diferente de combinarlos que hace que un idioma sea más rentable en un idioma que en el otro y viceversa.