2009-10-28 14 views
9

Leí que las conversaciones pequeñas están completamente orientadas a objetos ... ¿C++ también está completamente orientado a objetos? si no ... ¿entonces por qué?¿C++ es un lenguaje completamente orientado a objetos?

+0

'pequeña charla que está completamente orientada a objetos', ¿de dónde leíste esto? Sólo curioso. –

+0

¿Qué significa "completamente"? –

+0

¿Qué hay de Ruby? – ukanth

Respuesta

27

No, no lo es. Puede escribir un programa de C++ válido, bien codificado y de excelente diseño sin utilizar un objeto ni siquiera una vez.

C++ admite programación orientada a objetos, pero OO no es intrínseco al lenguaje. De hecho, la función principal no es un miembro de un objeto.

En smalltalk o Java, no puede atarse los zapatos (o escribir "Hola, mundo") sin al menos una clase.

(Por supuesto, se puede argumentar sobre Java es un lenguaje completamente orientado a objetos también, porque sus primitivas (por ejemplo, int) no son objetos.)

+0

Incluso tiene utilidades que lo convierten en un lenguaje de programación genérico , por ejemplo, Plantillas. Pero he visto muchos libros de texto a nivel escolar que asocia C++ como Lenguaje orientado a objetos. El problema es que cuando los autores lo hacen, los lectores (principalmente los estudiantes) olvidan convenientemente que C++ también se adapta a muchos tipos de lenguajes de programación. – sjsam

1

Define OOL. Si se refiere al uso de clases, etc., C++ admite el estilo de programación OO, entre otros. No hay nada que te impida no usar las clases. Java OTOH, no permite sino clases. (Sí, sé que Java admite FP.)

+1

"Sí, sé que Java admite FP". Eso es nuevo para mí ¿Tienes algún ejemplo de FP en Java? –

+0

Una búsqueda simple me da bastantes artículos. Uno de ellos: dirkgently

+0

dirk. Creo que puede querer decir que Java admite la programación ** procedural ** ¿Nordeste? –

3

C++ contiene un dialecto 'C' como subconjunto, lo que permite un estilo de código puramente de procedimiento.

0

C++ no es un lenguaje orientado a objetos puro, y como ya mencionado, nada te obliga a utilizar los conceptos de OOP en C++. C++ es lo que usted llama un lenguaje híbrido orientado a objetos, ya que está basado en C, que es puramente un lenguaje de procedimiento.

Ejemplos de lenguajes orientados a objetos puros son C# y JAVA.

+1

Ninguno de los cuales es primitivo ya que los tipos de datos no obedecen a la misma semántica que los tipos de datos definidos por el usuario. Las operaciones en ellos no se definen en términos de pasar mensajes y no se pueden sobrecargar o redefinir en una clase derivada. – Omnifarious

+0

Creo que ha comentado la publicación incorrecta. ;) –

+1

No, Omni dice que ni C# ni Java son OO puros, ya que tienen cosas como int y long que son * no * objetos. – paxdiablo

0

No, no es un lenguaje puramente orientado a objetos. En particular, los tipos de datos primitivos en C++ tienen reglas que con frecuencia son diferentes de los tipos de datos que no son primitivos. Además, es posible tener funciones que no estén asociadas a ningún tipo de datos. Hay una miríada de otras formas en que C++ no es un lenguaje orientado a objetos puro, pero esas son dos de las principales razones.

Ni Java ni C# son lenguajes orientados a objetos puros ya sea porque tienen tipos de datos primitivos que no obedecen a la misma semántica que los tipos de datos 'objeto'.

1

La respuesta corta es no - C++ no es del todo lenguaje OO. Puede escribir OOP "no exactamente" usando C++ incluso sin recurrir al uso del subconjunto C. Uno de esos ejemplos es su método principal, que no está incluido en ninguna clase.

La razón principal es el hecho de que C++ se originó a partir de C, cuando Stroustrup creó el lenguaje que pretendía crear una nueva versión de C (con clases). de hecho, ha intentado presentar su creación como el nuevo sabor de C (C84).

1

Los grandes argumentos que tiene la gente en contra de declarar C++ como "puro" OO es que todavía requiere al menos uno bits no OO, main(), y que no todo es un objeto (int, long et al).

También expone el estado de un objeto para su manipulación sin utilizar el paradigma de paso de mensajes (miembros públicos). Esto rompe la encapsulación de objetos.

Java, por otro lado, tiene main() como un método estático de una clase, por lo que está más cerca pero todavía tiene cosas que no son objetos.

Smalltalk es la lingua franca normalmente considerada como la más pura de las puras, pero no sé lo suficiente sobre ella como para comentar.

Me, Me tienden a dejar esa clase de argumentos para la intelectualidad, mientras que seguir con el desarrollo de código y entregar a mis clientes :-)

+0

Realmente no necesita principal. Es solo un punto de entrada bien conocido, por lo que la línea de comandos y (algunas) GUI no tienen a dónde pasar el control después de la carga. –

+0

* necesita * main, es obligatorio según el estándar. – paxdiablo

0

por supuesto que no !! Admite tipos de datos intrínsecos.

0

C++ no es más que "C con clases". Todavía puedo escribir un programa C y guardarlo como archivo .cpp. Por lo tanto, Prueba por implicación dice "C++ no es un lenguaje puramente orientado a objetos".

Cuestiones relacionadas