![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Cita:
![]() Por otro lado, ya que me meto, dejo mi opinion. Yo tenia un profesor que decia que si no puedes ver todas las lineas de una funcion sin usar el scroll es hora de partila en funciones mas pequeñas ![]() Yo personalmente cuando estoy desarrollando un algoritmo complicado encuentro muy útil usar funciones para dividirlo en problemas mas sencillos y poder resolver cada uno por separado. |
#2
|
||||
|
||||
Hola
Yo ni opino. Nada mas veo y aprendo. ![]() Si no digo algo no me llega por correo. ![]() Cuando los maestros se reunen hay que estar presente. ![]() Saludos |
#3
|
||||
|
||||
Estoy de acuerdo con seoane, el maestro de seoane y también con Al González; pero, como dije antes, no hay tampoco que caer en la pulverización del código y separar en una función cada simple paso de la función original.
// Saludos |
#4
|
||||
|
||||
Cita:
![]() Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#5
|
|||||
|
|||||
Cita:
Un iniciado, por conseguir una buena modularidad empieza a repartir las funciones en módulos... y llega a cosas como: A -> B -> C -> D -> E ->.... Es correcto lo que hace... pero uno llega a preguntarse: ¿Hasta que punto sería fiable? Hay métricas que determinan un valor en base al juicio del desarrollador, pero también existe un "grado de duda" al momento de estar diseñando. No discuto de que sean fiables... de seguro que si. Creo en que lo que realizó Borland es un producto espectacular. Pero... me abruma un poco el hecho de los círculos viciosos que puede formarse por los encadenamiento de las funciones. Totalmente de acuerdo que estos encadenamiento pueden añadir complejidad... pero también reconozco que tiene sus ventajas. Cita:
Si bien son dos palabras diferentes... son dos palabras que vienen mucho de la mano. Si yo he entendido bien el concepto para lograr una gran reusabilidad es necesario contar con un buen grado de modularización. Y a la inversa: una buena modularización permite un mejor uso. No se puede separar ambos conceptos totalmente, hay una línea delgada que los mantiene unido. Y creo que encontrar esa línea delgada es lo más complicado de hallar. Si estoy equivocado, avisenme... porque llevaría años equivocado. Como tu comentas... es cierto que se consigue una modularización innecesaria por hacer uso de las funciones "incorrectas". Pero... volvamos al caso del novato (por ejemplo... yo). Un novato... declara y declara funciones... que ya vienen incorporadas... No se da cuenta de que puede evitar este comportamiento (no por ser ignorante... las buscó pero no bien). Le funciona... Por lo tanto sigue con su trabajo. Obedeciendo su instinto de que desea hacer un buen trabajo separa bien los módulos... y sigue haciendo su trabajo... al estilo del problema del año bisiesto. ¿Lo está haciendo mal? Si y No. Podría hacerlo mejor... si. No es una persona cerrada y empieza a armar un diseño rápido de todos los módulos... saca una cuantas hojas sábanas y arma una linda carta de estructura (por poner un ejemplo) y nota un gran despliegue de módulos. Se pregunta: ¿Hasta que punto conviene llegar? Y vamos.. que esto no sólo se consigue con las funciones "innecesarias", aún con las correctas se puede armar un buen lío. Cita:
Pero también existen herramientas que la ingeniería del software han venido aportando. Hay métricas que permiten ofrecer una medida de lo bien que se tiene modularizado... se sabe que no es un valor rígido y que hay que obedecer pero es buen estimativo. A ver... la pregunta que debí haber formulado sería algo así: De acuerdo a tu experiencia, ¿Cuál sería la relación Modularidad/Complejidad que se estaría dispuesto a tolerar? ¿Qué criterios usas para determinar que tu trabajo está altamente integrado? Al, yo también soy partidario a particionar el código. Yo dentro de mi esquema de trabajo impongo esa actividad... pero tal como dicen otros... tampoco hay que decaer en el extremo (que ya me pasado) de partir una función en muchos pedazos que poco o nada hacían por si mismo. Cita:
Cita:
Bueno para finalizar... repito: De acuerdo a tu experiencia, ¿Cuál sería la relación Modularidad/Complejidad que se estaría dispuesto a tolerar? ¿Qué criterios usas para determinar que tu trabajo está altamente integrado? Disculpen si el debate no tiene sentido... pero me pareció una buena idea, ver los aportes de grandes de estos foros. Yo lo hacía con el fin de aprender y comparar mi modo de entedimiento de lo que es este mundillo de la ingeniería del software. Saludos, |
#6
|
||||
|
||||
![]() ¡Hola a todos!
Cita:
Insisto en que pongamos un ejemplo de función Delphi de más de 20 líneas de código nativo y hagamos el ejercicio de atomizarla. Nos permitiría acercar criterios en esta materia y establecer una norma teórica. Un largo abrazo. Al González. ![]() |
#7
|
||||
|
||||
Cita:
Saludos insistentes ![]()
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#8
|
|||||
|
|||||
![]() Una pregunta:
¿Todo este debate es por los iniciados? o ¿me perdí de algo? Cita:
Decir: Cita:
Cita:
Cita:
El debate si tiene sentido... Gracias Delphius y saludos a todos.
__________________
Cita:
|
#9
|
||||
|
||||
Eso me recuerda:
Cita:
- El lenguaje + - El framework basico + - Componentes de terceros + - Funciones externas del SO + - Nuestro propio framework + - El codigo especifico Se vuelve muy enruedado. Adicionalmente, en los lenguajes imperativos y compilados no hay mucha flexibilidad y ha veces hay mas codigo del que es realmente necesario. No ayuda el que existan constantemente nuevos paradigmas en pugna que luchan por acaparar nuestro tiempo y atencion (como los zillones de frameworks de acceso a datos). Actualmente, trato de : - Si esta en el lenguaje o el framework basico, OK. A veces intento de escribir lineas mas largas - usando solo el lenguaje - que crear nuevas funciones, pero como alguien mas arriba, tambien caigo en tentaciones, como armar mi propio IIF ![]() - Limitar al minimo el # de componentes de terceros, lo que obliga a buscar y buscar el mejor - Si un componente de terceros no me soluciona ampliamente una necesidad - y es open source - mejor muevo el codigo necesario a mi propio codigo - Si es un desarrollo de prueba, hago lo que quiera. Si es algo serio, lo pienso mucho - Hago un esfuerzo por reducir al maximo el numero de clases y funciones, en vez de aumentarlas. Para ello, es muy util las pruebas de unidad. Otro concepto es ver que tareas hay repetitivas, pero mucho, para reducirlas - De cuando en cuando suplico que le metan cosas mas potentes al lenguaje de Delphi ![]()
__________________
El malabarista. |
#10
|
||||
|
||||
Cita:
Creo que más o menos todos tenemos en la cabeza las mismas ideas sobre Modularización, pero ¿cómo cuantificarlo?
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#11
|
||||
|
||||
Cita:
A -> B -> C -> D ->.... ...y fue Delphius quien la comentó... ![]() (raise TIncorrectQuote.Create('Se equivoicó de persona') ![]()
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#12
|
||||
|
||||
![]() ![]() Estoy de acuerdo con seoane y su profesor: Cita:
En conclusión ( ![]() Cita:
__________________
Cita:
|
#13
|
||||
|
||||
Cita:
Aun así, cuando programo en C suelo unir esas rutinas pequeñas en una única más grande que después optimizo, pero antes he escrito y comprobado el sistema "atomizado". |
#14
|
||||
|
||||
Cita:
Ahora, estoy completamente de acuerdo con este párrafo tuyo: Cita:
Pero sigo sin entender el sentido de tu duda. Creo que todos tenemos más o menos claro y estamos de acuerdo en ello, en que la modularización promueve el reuso y sólo hay que tener cuidado de no caer en la pulverización de código, tal como sintetiza Al: Cita:
Código:
A->B->C->D-> ... ->A' ¿Es esto culpa de la modularización? ¿Tu duda va en ese sentido? Quizá en algunos caso lo sea, pero eso no es óbice para modularizar, es sólo algo que debe revisarse y evitarse. // Saludos |
#15
|
|||
|
|||
Coincido con todos en general, pero si hablamos como ya lo mencione de los estilos de programar y haciendo uso de lo dicho por Al
Cita:
Cita:
En uno de mis sistemas y que desarrolle su primera versión hace ya algunos años, requiero de calcular la duración desde dos variables de tipo string de fecha y dos variables de tipo string conteniendo la hora. con Delphi 16 bits
con Turbo Delphi
Que pasó, bueno, resulta que mi inexperiencia me dictó en ese momento que así lo tenía que hacer y me bastaba, ahora con TD encontré que todo ese rollo lo podía resolver en una sola línea, yo me imagino que hay algo mejor que eso, pero siendo sinceros me falta mucho para poder optimizarlo. Yo me declaro inconpetente en hablar o discutir eso de atomización, ni siquiera entiendo el concepto aún, pero vamos, la idea principal que quiero expresar es como determinar lo que Delphius inicia como debate. De acuerdo a tu experiencia, ¿Cuál sería la relación Modularidad/Complejidad que se estaría dispuesto a tolerar? ¿Qué criterios usas para determinar que tu trabajo está altamente integrado? Mi sentido común me dice Tolerancia CERO entre Modularidad y Complejidad, mi experiencia (o mi inexperiencia) no puedo medirla, eso es lo que hoy se, el día de mañana y sobre todo aqui en el club me dira otra cosa. Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney |
#16
|
||||
|
||||
Yo creo que la atomizacion del código simplifica en mucho el mantenimiento poterior ya que a todos nos pasa que despues de cierto tiempo se nos olvida un poco como iba el algoritmo sobre el que trabajamos para hacer x cosa. >Con código atomizado podemos llegar a tener cosas como esta:
Código:
Procedure TMiVentana.EjecutaTarea; Begin AbreTablas; PreparaGrillas; If ShowModal=mrOK Then GuardaDatos; CierraTablas; end; Claro que tambien depende del estilo o "convenciones" que usemos en el código ya que si nombramos las funciones con nombres que no vienen al caso pues se pierde la utilidad de la atomización y se complica la cosa. En mis inicios en Pascal acostumbraba usar sintaxis en inglés para casi todo, posteriormente empece a revolver inglés con español y ahora solo uso español. A veces ponia nombres como "SeekFileNombres" o "BuscarFiles"...ahora me dan risa. Otra práctica que de repente uso es la de hacer todo sucio y rápido y luego irlo partiendo, asi pues llego a tener funciones muy grandes que luego voy dividiendo y optimizando, asi por lo menos mis aplicaciones funcionan a a primera y las voy mejorando..
__________________
AKA "El animalito" ||Cordobés a mucha honra|| |
#17
|
|||
|
|||
Cita:
Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Programas que calculan la complejidad operacional | Delphius | Varios | 5 | 19-01-2007 10:34:34 |
cual seria el componente correcto? | DM2005 | Varios | 0 | 04-07-2006 21:55:39 |
Cual seria lo ideal? | Coco_jac | Gráficos | 1 | 10-06-2005 01:38:42 |
Cual seria el equivalente de AllTrim (clipper) | Alfredo | OOP | 2 | 04-03-2005 15:58:44 |
cual seria la mas adecuado base de datos... | ronimaxh | Firebird e Interbase | 8 | 23-04-2004 17:47:15 |
![]() |
|