Aunque C no es un lenguaje orientado a objetos, ¿puede hacer todo lo que Java o C ++ pueden hacer?

C está completa, así que sí, C puede hacer cualquier cosa que C ++ o Java puedan hacer.

La programación orientada a objetos es una mentalidad. Incluso podría hacer programación orientada a objetos (diablos, incluso programación estructurada) en ensamblador. Sin embargo, cuando lo haga, debe hacer todos los trámites de contabilidad necesarios (llame al despacho para OOP, etiquetas para bucles y ramas) por su cuenta.

Necesito agregar un par de pensamientos que olvidé. Primero, el kernel de Linux usa programación orientada a objetos de vez en cuando. Si recuerdo correctamente, el sistema para manejar diferentes sistemas está orientado a objetos, esto hace posible agregar nuevos tipos de sistemas de archivos sobre la marcha.

En segundo lugar, también es discutible si lo que C ++ y Java combinan realmente es programación orientada a objetos. De hecho, Alan Kay, la persona que acuñó el término “programación orientada a objetos”, dijo: “Cuando creé el término, C ++ no es lo que tenía en mente”. Después de haber aprendido varios sistemas OOP a lo largo de los años (que incluye Python, Common Lisp Object System, el sistema PHP y un smidgen de Smalltalk y un smidgen de los actores de Erlang), me inclino a estar de acuerdo con Alan Kay: C ++ y Java aren ‘ t todo eso orientado a objetos. Y considerando el poder que potencialmente puede provenir de un paradigma de transmisión de mensajes, considero una gran decepción que no hayamos usado este paradigma en la mayor medida posible.

Sí, cada lenguaje de programación ampliamente utilizado puede lograr casi cualquier cosa que se te ocurra.

De todos modos, todas estas cosas de alto nivel terminan siendo instrucciones de la CPU al final.

De hecho, podría escribir cualquier algoritmo utilizando solo unos y ceros.

¿Sería estúpido? ¡Sí! Y tomaría años hacer cosas más simples. Pero podrías y ese es el punto de la pregunta, supongo.

Vea esta charla entretenida donde el tío Bob (Robert C Martin) describe cómo se implementaron la encapsulación, la herencia y el polimorfismo en C antes de que existieran Java o C ++. La charla es amplia, pero hacer clic a continuación lo lleva a esa parte en particular. Si tienes tiempo, vale la pena ver toda la charla.

En cuanto a “qué problemas puede resolver”, todos esos programas están de gira completa para que puedan resolver exactamente los mismos problemas.

Eso es teoría.

En el mundo real, encontrará algunas diferencias en la velocidad, en qué plataformas se ejecutarán y cuántos recursos consumen.

Entonces, por ejemplo, puede encontrar compiladores de C para plataformas que no admiten Java. Algunas plataformas están orientadas a JVM y solo admiten Java (o con frecuencia un subconjunto de Java; estoy pensando en el iButton de Java aquí, estoy seguro de que existen otras cosas similares).

Volviendo a la teoría por un momento, los primeros “compiladores” de C ++ en realidad solo convirtieron su código C ++ en código C, por lo que las clases se convirtieron en estructuras, una llamada de método virtual se convirtió en una función indirecta Llame a través del miembro vtable de la estructura (que el “compilador” de C ++ agregó para ti), y así sucesivamente. Entonces, si quisieras hacer un programa OO en C, podrías usar una metodología similar … pero probablemente sería mejor usar un lenguaje OO existente.

Sí.

Todos los lenguajes de programación que son Turing Complete (eso es todo realmente) son, en principio, igualmente capaces.

Después de todo, no hay nada que te impida escribir una JVM completamente en C.

Realmente, sin embargo, C es capaz de todo lo que eres capaz de hacer.

Sí.

La orientación a objetos es un resumen y siempre que un lenguaje admita punteros y funciones, puede hacer POO. Eche un vistazo a esta publicación de blog para ver un ejemplo de Programación orientada a objetos (OOP) en C | Codementor

No, en realidad no C en sí mismo no admite conceptos OOPS que son compatibles con C ++ como abstracción, polimorfismo, herencia, ocultación de datos, clases, etc., pero puede hacerlo usando otros marcos en C como GTV y structs.

More Interesting

¿Qué puede proponer alguien sobre cómo construir un trabajo independiente o de negocio propio para un ingeniero de software?

¿Cuáles son las ventajas y desventajas de trabajar como ingeniero de software en la industria financiera?

Estoy creando una línea de tiempo de lo que necesito saber para convertirme en ingeniero de software. ¿Qué debo dominar antes de solicitar empleo?

¿Siento que otros ingenieros de software están ocultando cómo obtuvieron tanta información de mí?

¿Qué separa a los ingenieros exitosos de los ingenieros no exitosos?

¿Puede cualquier ingeniero convertirse en ingeniero de software?

¿Qué tan difícil es hacer una aplicación como Quora?

Como ingeniero de software con más de 5 años de experiencia, ¿es mejor enfocarse en alguna tecnología y convertirse en un maestro o mantenerse generalista?

¿Qué habilidades le daría cada uno de estos programas de posgrado a un ingeniero de software?

Cómo encontrar una oportunidad de formación como ingeniero de software, preferiblemente en Europa

¿Por qué exactamente Google contrató a un sorprendente 8% de los graduados de MS en ingeniería mecánica como ingenieros de software de Carnegie Mellon en 2016?

¿Qué se siente ser X ?: ¿Cómo es ser ingeniero de software indio en 2012?

¿Por qué no debería especializarme en informática?

¿Eran programadores o ingenieros de software de Zuckerberg, Page, Brin y Musk?

¿Qué tan importante es la calidad de los ingenieros de software para el éxito de una empresa?