¿Existen principios de diseño conocidos, mejores prácticas y patrones de diseño que se puedan seguir al diseñar un proyecto en C? ¿O principios de diseño útiles para la programación procedimental (imperativa) en general?
(Soy hijo de la 'generación orientada a objetos' y tengo que diseñar un gran proyecto en C por primera vez)
c
design-patterns
principles
Dimi
fuente
fuente
Respuestas:
Ocultación de información: como lo propugna Parnas ( Software Fundamentals ).
Gestión cuidadosa de encabezados y visibilidad:
El encabezado está autoprotegido, por lo que no importa si se incluye varias veces.
Diseñe conjuntos de funciones para trabajar en 'objetos' (generalmente estructuras) y use esas funciones en lugar de hurgar en las entrañas de la estructura en el código que lo está usando. Piense en ello como una encapsulación autoimpuesta.
fuente
Mis tres consejos:
He aquí un ejemplo:
fuente
malloc
.Existe un buen libro en línea gratuito, titulado Programación orientada a objetos con ANSI-C , que trata el tema de la escritura de código orientado a objetos en C. Una búsqueda en Google de "C orientada a objetos" también arroja una serie de otras buenas ejemplos y recursos.
Si su proyecto es crítico para la seguridad, MISRA-C es un buen conjunto de reglas. Está pensado principalmente para c incrustado, pero también puede ser útil en otras áreas.
Me considero un codificador OO y trabajo mucho con embedded-C. El mejor consejo que puedo dar, especialmente para proyectos grandes, es no exagerar. La creación de un marco OO completo sobre ANSI C puede ser muy tentador, pero requiere mucho tiempo y esfuerzo hacerlo bien. Cuanto más sofisticado sea, más tiempo dedicará a depurar su marco en lugar de trabajar en el proyecto real . Aborde la tarea con la cabeza despejada y una buena y sólida comprensión de YAGNI . ¡La mejor de las suertes!
fuente
{ }
bloque). Ese siempre me muerde una o dos veces:)
OOP es una metodología, no una tecnología. Así que mi primer consejo es dejar de pensar en ello como programación procedimental.
Para el punto de e.James, usted no quiere intentar recrear un lenguaje orientado a objetos o pretender que tiene las capacidades del mismo. Aún puede hacer todo lo correcto si se aferra a algunos principios simples:
fuente