Autor Tema: ¿Como no perderse entre el código?  (Leído 4770 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Yoshua

  • PIC16
  • ***
  • Mensajes: 213
¿Como no perderse entre el código?
« en: 30 de Enero de 2016, 23:59:32 »
Buenas, la pregunta es simplemente como hacen para no perderse entre las lineas de codigo de un proyecto.
¿se diagrama en un boceto una especie de mapa o algo parecido?
 :(  :oops:  :(  :oops:
« Última modificación: 31 de Enero de 2016, 19:37:16 por Yoshua »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:¿Como no perderse entre en el código?
« Respuesta #1 en: 31 de Enero de 2016, 00:56:40 »
Va a depender bastante del tamaño del codigo.

Creo que la ayuda mas basica es:

- tratar de no crear funciones extremadamente largas, absolutamente NO
- usar la identacion correcta,
- usar nombres bien descriptivos de variables/funciones por mas que te tome 10 seg mas por cada variable, nada de esos nombres: i , ii, iii, iiii o por ejemplo el valor de un sensor de iluminacion: vseil, en el que podrias haber puesto SensorIluminacionValor y saber claramente de que se trata incluso para alguien de afuera,
- usar mas archivos cuando se necesario, no es nada lindo un solo archivo con 90381098139081903829031209 lineas.
- Tener una "norma" de donde ubicar las cosas, ejemplo primero todos los includes, luego las variables, luego prototipos de ser necesario, luego funciones. Las definiciones en las cabeceras, etc
- aprender a separar las funciones creando "capas" o "niveles" en el que estos no se modifiquen continuamente.

Un ejemplo sencillo, imaginate un LCD 2x16 y queres hacer una libreria. Algo correcto seria tener como minimo 2 archivos de funciones.

1 archivo de port, en este archivo se modifican los puertos etc, supongamos que tenes que poner el pin CS a 0 y esta en en el RA0, aca harias tu funcion que haga: PORTAbits.RA0 = 0; o output_low(PIN_A0); como sea el compilador.

1 archivo con las funciones del LCD, en este caso cuando alguna funcion por ejemplo de escribir un puerto necesite activar el CS, va a llamar a la funcion anterior. Pero JAMAS vas a encontrar una modificacion de un bit aca.

De esta forma si tenes que cambiar de micro, solo modificas el archivo de port para ese micro y funciona como antes, y sin tocar tu archivo con las funciones del LCD las cuales son "independientes" del micro que uses. Obviamente luego puede haber mas archivos, etc.

- La Documentacion (comentarios) es SUPER importante, hay muchas funciones que creo que el encabezado con la explicacion + ejemplo de la funcion es mas grande que la funcion misma.

Y si, debe haber un diseño / boceto / idea de como va a ser el programa/funcion a realizar, de que va a tener que hacer, cada parte que funcion debe cumplir, que parametros deberia aceptar, etc y luego tratar de integrar todo, pero pienso que cada parte deberia ser "independiente" de la otra, es decir podes probar una parte sin necesidad que la otra este en funcionamiento.

PD: Esto es lo que me parece a mi. Alguien con experiencia en informatica y programacion seguro que tendra mas idea que yo al haber realizado infinidad de lineas de codigo.

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re:¿Como no perderse entre en el código?
« Respuesta #2 en: 31 de Enero de 2016, 02:10:31 »
desde mi punto de vista (no me considero experto en programación), y no sé cómo se llevará la metodología en POO, pero en lenguaje procedural, he visto que por más que uno intente llevar un código bien ordenado por nombres legibles y archivos de encabezados, cuando el código se va haciendo extenso, llega un momento en que uno siente que se encuentra perdido en medio de la jungla sin saber el camino andado :D

Entonces hay que rascarse la frente, respirar profundo y empezar a trazar de nuevo línea a línea y estar pendiente de la secuencia y las condiciones que se van generando en cada instante.



La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:¿Como no perderse entre en el código?
« Respuesta #3 en: 31 de Enero de 2016, 07:33:43 »
Comienza definiendo por escrito los datos que vas a utilizar y las operaciones que se deben realizar sobre ellos.
El tema de los datos es el que se suele descuidar más.
Si defines interfaces estandar, puedes dividir el programa en varios módulos y modificar cada uno sin afectar a los demás.

Yo tengo la costumbre de nombrar las funciones por módulos:

modulo_nombrefuncion(argumentos)

así es más sencillo poner nombre a muchas funciones. El nombre de función puede repetirse en módulos distintos. Es lo que se puede hacer en C++ con las clases, pero aplicado al C.


Estudia la programación top-down y la bottom-up, que te dará ideas.
https://es.wikipedia.org/wiki/Top-down_y_bottom-up

Saludos.

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2980
Re:¿Como no perderse entre en el código?
« Respuesta #4 en: 31 de Enero de 2016, 11:14:28 »
Hola yosua, en gran parte esto se aprende con la experiencia y estudiando otros. Códigos, por otra parte existen gran cantidad de estrategias de programación, por ejemplo en mis programas de software para PC utilizo el modelo_vista_controlador

https://es.m.wikipedia.org/wiki/Modelo%E2%80%93vista%E2%80%93controlador

Te permite una reutilización de código cambiando alguno de los módulos dependiendo de la aplicación yo lo he usado con programas de 30.000-50000 líneas.

A parte de todos los consejos que te han dado, puedes ver como,están realizados muchos programas GPL  que desarrollan las comunidades de Linux en código abierto, ten en cuenta que en esos codigos meten mano cientos de personas, imagina lo bien estructurado que debe estar para no sembrar el caos.
Cuando yo he colaborado con algunos, te dan unas normas que todos los desarrolladores deben seguir, y suelen ser técnicas muy buenas para la estructuración de código, se aprende mucho, son programas con millones de líneas y mucha gente que trabaja de forma paralela en ellos, y todos deben entenderse.

Un saludo.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:¿Como no perderse entre en el código?
« Respuesta #5 en: 31 de Enero de 2016, 17:59:09 »
Otro paradigma: La programación por capas.
El ejemplo más difundido es el modelo OSI:
https://es.wikipedia.org/wiki/Modelo_OSI

Cada módulo se encarga de una capa. Si tienes que modificar algo, sólo afecta a su capa.

Un saludo.

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re:¿Como no perderse entre el código?
« Respuesta #6 en: 31 de Enero de 2016, 23:47:45 »
teóricamente hablando la programación POO resuelve gran parte del problema mediante la encapsulación, que sería encerrar porciones de código en lo que se denomina objeto, y suponiendo que un objeto ha sido probado y depurado hasta demostrar su efectividad , el programador podría obviarlo dentro del análisis y dedicarle tiempo a los otros segmentos del código principal.

pero igual yo me imagino para los grandes softwares, deben trabajar equipos de programadores y cada uno dedicado a una porción del código.
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:¿Como no perderse entre el código?
« Respuesta #7 en: 01 de Febrero de 2016, 01:03:22 »
teóricamente hablando la programación POO resuelve gran parte del problema mediante la encapsulación, que sería encerrar porciones de código en lo que se denomina objeto, y suponiendo que un objeto ha sido probado y depurado hasta demostrar su efectividad , el programador podría obviarlo dentro del análisis y dedicarle tiempo a los otros segmentos del código principal.

pero igual yo me imagino para los grandes softwares, deben trabajar equipos de programadores y cada uno dedicado a una porción del código.

Es que con el modelo de capas es justamente eso. Vos lo unico que tenes es una "interfaz" y no te importa absolutamente nada mas de las capas inferiores, comenzas por lo de menos nivel y vas subiendo. Por ahi la complejidad pasa por tratar de crear capas que puedan ser usados por multiples codigos sin necesidad de tener que modificarlas. Como decia en el ejemplo del LCD teniendo unas 3 capas

Tu Programa
Funciones del LCD
Manejo de los port para el LCD

Y esto es lo que terminas viendo en CCS, cuando solamente ponen #include lcd.h y luego usan putc() o printf(putc,"....") no les importa que hay por debajo, solo que funciona..
Entonces tenes, facil portabilidad por que solo necesitas cambiar una sola capa, facil de modificar el programa sin necesidad de entrar en detalles sobre el LCD.

A mi personalmente es la mejor forma de programar. Es lo que veo normalmente en codigos como por ejemplo de FreeRTOS, UTFT, entre otros.

Sobre la documentacion que habia nombrado antes, aca un ejemplo de un archivo de la API de TI.


Código: C
  1. // Copyright (c) 2005-2014 Texas Instruments Incorporated.  All rights reserved.
  2. // Software License Agreement
  3.  
  4. //*****************************************************************************
  5. //
  6. //! Sets the type of parity.
  7. //!
  8. //! \param ui32Base is the base address of the UART port.
  9. //! \param ui32Parity specifies the type of parity to use.
  10. //!
  11. //! This function configures the type of parity to use for transmitting and
  12. //! expect when receiving.  The \e ui32Parity parameter must be one of
  13. //! \b UART_CONFIG_PAR_NONE, \b UART_CONFIG_PAR_EVEN, \b UART_CONFIG_PAR_ODD,
  14. //! \b UART_CONFIG_PAR_ONE, or \b UART_CONFIG_PAR_ZERO.  The last two
  15. //! parameters allow direct control of the parity bit; it is always either one
  16. //! or zero based on the mode.
  17. //!
  18. //! \return None.
  19. //
  20. //*****************************************************************************
  21. void
  22. UARTParityModeSet(uint32_t ui32Base, uint32_t ui32Parity)
  23. {
  24.     //
  25.     // Check the arguments.
  26.     //
  27.     ASSERT(_UARTBaseValid(ui32Base));
  28.     ASSERT((ui32Parity == UART_CONFIG_PAR_NONE) ||
  29.            (ui32Parity == UART_CONFIG_PAR_EVEN) ||
  30.            (ui32Parity == UART_CONFIG_PAR_ODD) ||
  31.            (ui32Parity == UART_CONFIG_PAR_ONE) ||
  32.            (ui32Parity == UART_CONFIG_PAR_ZERO));
  33.  
  34.     //
  35.     // Set the parity mode.
  36.     //
  37.     HWREG(ui32Base + UART_O_LCRH) = ((HWREG(ui32Base + UART_O_LCRH) &
  38.                                       ~(UART_LCRH_SPS | UART_LCRH_EPS |
  39.                                         UART_LCRH_PEN)) | ui32Parity);
  40. }

Lo unico que hace es setear un registro... nada mas pero tiene un terrible encabezado diciendote que hace cada parametro + como se usa, no quise copiar uno mas grande para no complicarla pero que se note a lo que me referia. Y luego tener un papel/documento con las funciones y lo que acepta ( Cuando se extiende )

PD: Alguien trabajo con doxygen ?

Desconectado Geo

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 922
    • Mexchip
Re:¿Como no perderse entre el código?
« Respuesta #8 en: 02 de Febrero de 2016, 12:21:38 »
PD: Alguien trabajo con doxygen ?
Yo lo uso en todos mis proyectos, embebidos o no, personales y del trabajo.
La imaginación es el límite.
Visita mi blog, en inglés o en español :).
Mini curso de introducción a VHDL en MEXCHIP :-/

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:¿Como no perderse entre el código?
« Respuesta #9 en: 02 de Febrero de 2016, 13:42:51 »
Yo lo uso en todos mis proyectos, embebidos o no, personales y del trabajo.

Algun consejo para instalarlo, yo compile la fuente pero sin la GUI por que no lo hacia por si solo. Fue algo complicado y nada simple de hacerlo, por eso queria preguntar si es que ademas de la pagina hay algun tutorial el cual tengas conocimiento y sea una buena guia, tanto para instalarlo como para utilizarlo.

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
Re:¿Como no perderse entre el código?
« Respuesta #10 en: 02 de Febrero de 2016, 13:53:58 »
PD: Alguien trabajo con doxygen ?

Amigo Killer, hace tiempo, 7 u 8 años, abrí este hilo en Proyectos :: Documentar los Proyectos : Doxygen  :mrgreen:
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:¿Como no perderse entre el código?
« Respuesta #11 en: 02 de Febrero de 2016, 13:56:59 »
No lo habia visto!, Gracias RedPic!

Queria un software automatizado para distintos lenguajes como el Doxygen, pero en mi intento frustrado de hacerlo funcionar ya estaba pensando en crearme algo parecido yo, aunque no fuera lo mismo. Pero si ya se invento la rueda para que la voy a volver a inventar :P.

EDIT: Acabo de darme cuenta que no era necesario compilar los fuentes ya que tenia el doxygen a mi alcance a traves del apt ... Soy unico... Todo este tiempo al frente de mi nariz
EDIT2: Acabo de encontrar Eclox para el eclipse, lo cual es fantastico y me permite generar comments para Doxygen y generar el documento automaticamente. GENIAL
« Última modificación: 02 de Febrero de 2016, 15:35:05 por KILLERJC »