Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Temas relacionados > Debates
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-03-2007
Avatar de PabloTech
PabloTech PabloTech is offline
Miembro
 
Registrado: ene 2007
Ubicación: Tucumán, Argentina
Posts: 82
Poder: 18
PabloTech Va por buen camino
Talking

Hola a todos.
Estoy de acuerdo con seoane y su profesor:
Cita:
Empezado por seoane
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.
Aunque no soy tan drástico al respecto. Yo también tengo bloques de programa un poco mas extensos que eso. Pero, por lo general, trato de resumir los algoritmos para aclarar mi panorama. A los módulos trato de darles nombres bien significativos. Siempre trato de usar parámetros, pero en poca cantidad. Y casi siempre reviso en forma rápida el código completo.
En conclusión ( y es mi modesta opinión):
Cita:
Cuanto mayor sea la complejidad del problema, mayor será la modularidad aplicada. De tal forma, que el cociente entre ambas, tienda a uno (1).
chau...
__________________
Cita:
Cuando respetes al ilustrado y al ignorante, al rico y al pobre, al bello y al feo, estarás muy cerca de la sabiduría, que trasciende lo aparente.

E. Rharo
Responder Con Cita
  #2  
Antiguo 22-03-2007
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Cita:
Empezado por Julio Caesar
Divide et vincere
Yo intento aplicar esta máxima en la programación porque, como dice seoane (más o menos) al dividir un problema grande en problemas más pequeños y fáciles de solucionar, el problema grande se hace más fácil de solucionar.

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".
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #3  
Antiguo 22-03-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Delphius
Disculpa roman si no me entiendes la pregunta... debí formularla de otra forma. No te enojes pero no coincido contigo en lo de modularización y reuso.
Antes que nada, aclaro que yo en ningún momento me enojé, ¿por qué había de hacerlo? Solo dije que no entendía la pregunta y expresé mi opinión.

Ahora, estoy completamente de acuerdo con este párrafo tuyo:

Cita:
Empezado por Delphius
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.
Yo opiné que eran dos cosas distintas, nunca dije que no estuvieran relacionadas.

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:
Empezado por Al González
donde un If se convierte en un IIf
Sin embargo, si tal modularización produce llamadas en cadena

Código:
A->B->C->D-> ... ->A'
donde A' hace lo mismo que A, creo que todos concordaremos en que es incorrecto.

¿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
Responder Con Cita
  #4  
Antiguo 22-03-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.561
Poder: 25
egostar Va camino a la fama
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:
y hasta pena me da ver algo de ese antiguo código
yo estoy convencido de que la modularización va de la mano con la experiencia y de las nuevas funciones que te permiten reducir código hasta lograr la optimización.

Cita:
Empezado por AL González
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.
Les pondré un ejemplo de lo que hacia con Delphi 16 bits y lo que hago ahora con Turbo Delphi y aún creo que no es lo óptmo.

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
Código Delphi [-]
Function TLector.CalculaDuracion(FI,FF:String10;HI,MI,SI,HF,MF,SF:String2):String8;
Begin
  FIDate := StrToDate(FI);
  FFDate := StrToDate(FF);
  If FFDate = FIDate Then
     begin
       val(HI,HT,Code);
       val(MI,MT,Code);
       val(SI,ST,Code);
       DurIni   := CalculaSegundos(HT,MT,ST);
       val(HF,HT,Code);
       val(MF,MT,Code);
       val(SF,ST,Code);
       DurFin   := CalculaSegundos(HT,MT,ST);
       DurTotal := DurFin - DurIni;
       ConvDuracion;
       CalculaDuracion := DurHrsS+':'+DurMinS+':'+DurSegS;
     end
  Else If (FFDate - FIDate) = 1 then
          begin
            val(HI,HT,Code);
            val(MI,MT,Code);
            val(SI,ST,Code);
            DurIni   := CalculaSegundos(HT,MT,ST);
            DurIni   := 86400 - DurIni;
            val(HF,HT,Code);
            val(MF,MT,Code);
            val(SF,ST,Code);
            DurFin   := CalculaSegundos(HT,MT,ST);
            DurTotal := DurFin + DurIni;
            ConvDuracion;
            CalculaDuracion := DurHrsS+':'+DurMinS+':'+DurSegS;
          end;
End;

con Turbo Delphi
Código Delphi [-]
function CalculaDuracion(FI,FF,HI,HF:String):String;
Var
   FechaHora : TDateTime;
begin
   if TryStrtoTime(TimetoStr(StrtoDateTime(FF+HF)-StrtoDateTime(FI+HI)),
              FechaHora) then Result := TimeToStr(FechaHora);
end;

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
Responder Con Cita
  #5  
Antiguo 23-03-2007
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
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;
Muy entendible no?
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||
Responder Con Cita
  #6  
Antiguo 23-03-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.561
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por AzidRain
Muy entendible no?
Asi es, ya lo veo claro, de hecho yo lo hago asi, genero funciones y procedimientos encapsulando codigo de la forma como lo planteas tu, pero esto mas por sentido practico que por conocimiento.

Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #7  
Antiguo 23-03-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Yo siempre uso el inglés (aunque mi lengua materna sea el castellano) lo encuentro mucho más compacto. Nunca recuerdo si he usado el infinitivo o un tiempo verbal (Busca / Buscarrr) en el nombre de un procedimiento. Lo mismo con el singular y plurar, o con los artículos y preposiciones, que son muy incómodos (De, Los, El, etc).

No mezclo jamás inglés con español en el nombre de una función solo con conceptos del propio Software, por ejemplo: IdToAlbaran o IdToFactura.

Por este lado del charco, Grilla es la hembra del Grillo [...] ¿las maquillas y las peinas ?. Yo, personalmente , prefiero algo así como "SetGridHeader"; en español sería "EstablecerCabecerasDelGrid". "Preparar" es abstracto, nunca identifico lo que hace y acabo mirando la función.

Por otro lado, uso propiedades (property) siempre que puedo [...] Pero creo que me estoy saliendo del hilo jejeje.

En cuanto a lo ocurrido con la función "CalculaDuracion" es muy normal. Yo usaba mi función "InsertBreakLine" para romper una cadena larga al llegar a XX caracteres, Ahora recién veo WrapText de la unidad SysUtils en BDS2006 que me hace sonrojar (muy posiblemente también esté en delphi 6... no sé).

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 23-03-2007 a las 12:01:26.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
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


La franja horaria es GMT +2. Ahora son las 19:01:10.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi