sencillos registradora proyectos programa ejemplos dev con cajero caja basico banco automatico archivos c oop

registradora - proyectos en c++ sencillos



¿Debo aprender a implementar OOP en C? ¿Hay proyectos que usen OOP en C? (6)

Recientemente, terminé de leer K&R con sus, casi todos, ejercicios y ejemplos. Estaba planeando mudarme a "Acelerated C ++" que encontré con el libro OOP de Axel Schreiner con ANSI-C.

Estoy intrigado y quiero aprenderlo. Pero antes de invertir tiempo, quiero saber el valor de implementar OOP en C. Para poder decidir cuánto tiempo debo dedicar a ello.

  1. Implementando OOP en C, ¿es realmente usado? ¿O es solo para ejercicio mental?
  2. ¿Hay algún proyecto de C existente que use OOP?
  3. ¿Cuándo es una buena idea usar OOP en C?
  4. ¿Debo invertir mi tiempo en ello?

Creo que es apropiado que mencione mis antecedentes aquí para que ustedes puedan guiarme de una mejor manera. Terminé las teorías C, C ++, Java y OOP hace aproximadamente un año, también tengo un trabajo. Pero luego Joel''s blog Joel''s y SO me hicieron darme cuenta de que me faltan muchas cosas. Así que volví a recoger los libros y comencé a estudiarlos correctamente.

K&R, Accelerated C ++, Algorithm in C ++ y algunos otros libros son mi intento de mejorar mis habilidades. No soy nuevo en OOP.
Entonces, que sugieres?

Gracias por tu tiempo.


Implementando OOP en C, ¿es realmente usado? ¿O es solo para ejercicio mental?

Sí, se usa realmente, pero como era de esperar, no es tan común como la POO en lenguajes que fueron diseñados para ello.

¿Hay algún proyecto de C existente que use OOP?

Recuerdo haber usado una pareja:

¿Cuándo es una buena idea usar OOP en C?

Algunos problemas están muy bien modelados por OOP. Las GUI, por ejemplo, a menudo se diseñan con herencia entre los tipos de ventanas, utilizando el polimorfismo para anular y especializar el comportamiento.

Debe usar OOP cuando su problema tenga una solución OOP hermosa. ¡Con la nota al pie de página de que no debe pegar 100 líneas de código OOP en un proyecto de 15000 líneas, solo porque es "kewl"! :)

¿Debo invertir mi tiempo en ello?

Eso realmente depende de lo que planeas hacer con eso. Nunca abogaría por no aprender nada; es genial exponerse a cómo, por qué y cuándo usarlo. Es genial ver un lenguaje que no fue diseñado para la POO compatible con OOP. Lees el libro, así que supongo que tienes cierta afinidad con C e interés en la POO. Dale una oportunidad, quizás reúna algunas aplicaciones GUI en GTK +. Por otro lado, si está buscando convertirse en el próximo desarrollador web maestro de patrones de diseño, probablemente no sea el mejor enfoque, puede considerar otros idiomas que estén más enfocados hacia esa área.

Entonces, que sugieres?

Le sugiero que use las mejores herramientas a su disposición que se ajusten a los problemas que está tratando de resolver. Decide qué problema vas a resolver. Una aplicación de escritorio GUI, un servidor web, un juego, una utilidad de línea cmd ... una vez que decida sobre su problema, podrá decidir mejor qué tecnología se adapta para desarrollar una solución. Descubrí que realmente no puedes dominar nada con los "juguetes", por lo que debes estar haciendo algo real.


Hay personas que dicen que puedes escribir código orientado a objetos en cualquier idioma, y ​​también hay personas que dicen que puedes escribir código terriblemente desestructurado en cualquier idioma.

El lenguaje real "OO" le proporciona un puñado de mecanismos para implementar el diseño de OO: los lenguajes tienen conceptos incorporados para objetos y / o clases, para encapsular código con datos, para herencia y así sucesivamente. B esencialmente no tiene nada de esto, pero no hay nada que le impida realizar la programación OO en C, dadas algunas técnicas y autodisciplina (como su libro seguramente lo dice).

Pero, ¿te gustaría?

Mi opinión es la siguiente: si solo estás aprendiendo a hacer programación OO, podría tener más sentido aprender esto mientras estás "en la mano" por un lenguaje que ya incorpora los conceptos profundamente. Un lenguaje bien estructurado, simple e interactivo sería bueno para esto: dada la libre elección, recomendaría Ruby, Python o Groovy. Dado un lenguaje con "magia" OO incorporada, se vuelve muy obvio cuando estás haciendo cosas OO y cuando estás siendo estructurado, disciplinado y bien organizado. También puede haber cosas que aprender cuando se pasa de C a otro idioma: los puntos en común, las diferencias.

Algunas personas recomendarían aprender C ++ como la progresión natural de OO de C. No lo apoyo sin reservas, porque considero que C ++ es un desagradable despliegue de las capacidades de OO en un lenguaje que ya era más "práctico" que elegante. Al pasar de la programación en C "estándar" a la programación en OO, creo que un programador debería considerar alejarse de la manipulación directa de los punteros, por ejemplo, y ciertamente me parecería oneroso tener que administrar la memoria para mis datos. Los lenguajes OO modernos automatizan esto para que un programador tenga más células cerebrales para tareas de nivel superior. El atractivo de C ++, por supuesto, es la velocidad bruta. Debido a que puede caer al mismo nivel cercano al metal que C, por lo general es el "más rápido" de los idiomas OO.

Dicho todo esto: si tiene un gran proyecto en el que el lenguaje requerido es C y desea utilizar y practicar técnicas de OO, ¡adelante, adelante! De lo contrario, podría beneficiarse de aprender OO en un entorno que lo aliente y lo respalde, y tal vez luego vuelva a C con su conocimiento de OO. Las técnicas que se enseñan en el libro tendrán sentido para usted entonces, y estará en una mejor posición para decidir si realmente desea hacerlo en C o en un lenguaje "real" de OO.


He tenido experiencia con varios proyectos avanzados de C que hacen al menos algo de uso de OOP. El más conocido es el kernel de Linux.

El kernel es totalmente C (excepto las piezas específicas de la plataforma en ensamblaje para interfaces de hardware).

El núcleo hace un uso intensivo de estructuras con punteros de función en muchos lugares. Lo primero que viene a la mente es el sistema de archivos. Los controladores completan la estructura de file_operations (así como muchas otras) con devoluciones de llamada a sus implementaciones específicas.

El kernel también hace un gran uso de las declaraciones de goto , que en algunos contextos pueden considerarse como declaraciones de lanzamiento rudimentarias que llevan una etiqueta al final de la función para hacer una limpieza y salir. (Aunque también usan goto para mucho más que el manejo de errores, y también se usa solo para "excepciones" dentro de una función, no para pasarlas afuera).


OO se utiliza en C tan a menudo como sea necesario. En general, no estoy de acuerdo con la opinión de que no se puede hacer OOP en C, tan pronto como proporciona un conjunto de funciones que operan en un tipo dado, tiene OOP. Tomemos por ejemplo, usted decide crear una estructura de datos. Si proporciona funciones para crear, agregar, eliminar y encontrar elementos de la estructura de datos, es OO. En general, otros idiomas proporcionan azúcar sintáctica al implicar automáticamente una variable de instancia y el alcance en varias propiedades de esa instancia automáticamente.

  1. En cuanto a "es realmente usado", la respuesta es sí. No es para ejercicio mental, es un paradigma válido en C.
  2. El mejor ejemplo que se me ocurre es GObject , usado por GLib, GTK + y muchos proyectos no relacionados con GNOME. GObject proporciona una forma de construir objetos en C. Sin embargo, no es necesario usar el soporte de terceros para tener OO en C. Muchos proyectos existentes lo tienen, aunque puede que no esté presente en la interfaz (algo muy bueno en mi opinión), y utilizado internamente para diversos fines (limpieza, protección de datos, todas las justificaciones OO habituales).
  3. Es una buena idea usar OOP en C cuando encuentre la necesidad de agrupar comportamientos y / o datos. Cuando puede justificar el pequeño gasto sintáctico adicional en el uso de la interfaz de sus objetos y el tiempo empleado en no completar su solución. No te desvíes.
  4. No debería perder tiempo aprendiendo OO porque cree que es superior, sino que debería complementar sus soluciones futuras, y debería agregarlo a su kit de herramientas. Úsalo cuando parezca lo correcto. Familiarícese con la forma en que uno hace OO en C, la mejor manera sería hacer algo de C ++, o examinar cualquier buen proyecto que use un poco de OO estilo C. Te parecerá natural después de eso.

Puede ser, pero sin las llamadas a función de tiempo de destrucción proporcionadas por otros lenguajes OOP, no es tan útil. Además, si necesita OOP, siempre hay C ++, donde su código se transfiere virtualmente al instante.