Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-07-2005
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 dec
¿Puedes indicar algunas de ellas por ver si de una vez por todas puedo entenderlas? Estoy seguro de que son muchas las obviedades que se me escapan, pero no me parece mal que me las hagan saber.
Un par de ejemplos:

Problema: El usuario no puede entrar al sistema, le dice que los datos son incorrectos; su hijo- que sabe computación -dice que el sistema está mal hecho.

Razón: en el recuadro que dice:

Escriba se fecha de nacimiento (dd-mm-aaaa)

el usuario escribe 1983/05/31

(¿Qué no es obvio? ¡Le estoy indicando el formato de la fecha!)

Conclusión: (desafortunadamente) el hijo tiene razón

Solución: antes de mandar los datos al servidor, verificar el formato y mandar un mensaje pertinente en caso de que sea incorrecto.

Problema: El alumno no pudo inscribirse, el sistema nunca le presentó el comprobante.

Razón: El alumno cerró la ventana con el resumen de datos sin oprimir el botón que decía:

"Para terminar su inscripción imprima su comprobante"

Claro que estos errores no encajan directamente con las excepciones (de hecho el del combo tampoco), pero son verídicos y muestran el tipo de cosas que podemos dar por obvias y qe el usuario no las ve.

Y el que sea un formulario de 40x40 no es pretexto. ¿Te imaginas qué pasaría si en un código de apenas unas cuantas líneas, el compilador no tuviera a bien decirnos: "Missing operator or semicolon" ¿Es obvio que los parámetros de una función deben ir separados por comas!

Pero de cualquier forma, una construcción como

Código Delphi [-]
try
...
except
end;

jamás debe hacerse. Me parece que ya lo dijo mamcx; al hacer esto escondes todas las excepciones posibles, no sólo las que uno prevee o piensa que pueden suceder.

Cita:
Empezado por dec
El usuario vuelve a abrir el formulario, esto es, vuelve a abrir el menú, selecciona la opción oportuna y se le muestra el mismo formulario de antes. Entonces el usuario escribe un número de línea o elige una y zas, se cierra el formulario y se le muestra el número de línea elegido.
Esto me recuerda al experimento del perrito que tiene que abrir una reja con uno de dos botones. Un botón abre la rejay el otro le da un toque eléctrico. Así has-ta-que-se-e-du-que, ¡no faltaba más!



Cita:
Empezado por dec
En fin. Yo creo que aquí el tema no era este en absoluto, pues al cabo todo queda reducido a cómo me parece a mí esto y cómo me parece a mí lo otro.
Por el contrario, yo creo que este es precisamente el tema. Abriste el hilo comentando que el mencionado artículo te había hecho por fin entender cómo se usan las excepciones y has visto qe el tema no es tan inmediato y se presta a muchos estilos y circunstancias.

El mismo artículo, a mi no me queda claro.

Cita:
Empezado por dec
Yo lo único que he dicho es que he cometido el error que menciona Ian Marteens en no pocas ocasiones, y, efectivamente, reconozco que en muchas ocasiones que utilizé la instrucción try/except no contaba con ningún plan B y a veces terminaba levantando la excepción mediante un Raise ¡dentro de try/except!
Pero, ¿cuál es el error a que se refiere Marteens? Porque a juzgar por su descripción de la cláusula fault en Freya da la impresión de que justamente recomienda propagar la excepción. Para mi, hay excepciones que deen propagarse y otras no, depende de las circunstancias y objetivos.

// Saludos
Responder Con Cita
  #2  
Antiguo 15-07-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.114
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Los problemas que me has mostrado roman, aun con ser posibles y todo eso, no tienen nada que ver con lo que yo hago "para dirigir al usuario a una línea". De todos modos te agradezco los comentarios igual.

Por eso he recalcado arriba que estaba refiriéndome a un caso en concreto sobre el que había tomado una decisión, un caso concreto, que, claro está, no tiene porqué parecerse a otros casos concretos, por eso son concretos.

Cita:
Empezado por roman
Pero de cualquier forma, una construcción como
Código Delphi [-]
  try
    ...
  except
  end;
jamás debe hacerse. Me parece que ya lo dijo mamcx; al hacer esto escondes todas las excepciones posibles, no sólo las que uno prevee o piensa que pueden suceder.
Bueno, en este caso, me parece a mí que pocas excepciones podrían darse salvando el "EConvertError" presumible y ocultado al usuario porque personalmente lo creí mejor.

De todas maneras ya dije más arriba que había pasado a utilizar la función "TryStrToInt" y ese patrón de uso de try/except no es algo habitual en lo poco que escribo.

Cita:
Empezado por roman
Esto me recuerda al experimento del perrito que tiene que abrir una reja con uno de dos botones. Un botón abre la rejay el otro le da un toque eléctrico. Así has-ta-que-se-e-du-que, ¡no faltaba más!
¡Hombre, menuda comparación! Personalmente calculaba que el usuario se diera cuenta del "error" a la primera, de verdad lo digo: no estoy de acuerdo en absoluto de tratar al usuario como a tonto, porque yo soy usuario y a mí no me gusta que me traten como a tonto.

Así que no entiendo eso de "El usuario no es tonto, pero el programa debe estar diseñado para tontos." ¿En qué quedamos? ¿El usuario es tonto o no lo es? Porque si no lo es no podemos diseñar un progama para tonto: ¿en qué quedamos?

Cita:
Empezado por roman
El mismo artículo, a mi no me queda claro.
Pero es que me parece normal roman. Poniéndome un tanto en tu lugar prácticamente estoy por aseverar que haría lo mismo que tú en este caso. Creo que lo mismo no lo leen igual dos personas. Una saca unas conclusiones, otra otras.

Cita:
Empezado por roman
Pero, ¿cuál es el error a que se refiere Marteens?
¡Pues si es en lo que estamos de acuerdo! En que no deben emplearse patrones como la excepción try/except "vacía", para tapar errores, sin ir más lejos.

Y que tampoco se debe levantar una excepción dentro de una instrucción try/except, pues que sería levantar la misma excepción dos veces: para eso está raise.

Que si no se tiene un plan B, es decir, si no se sabe o no se puede o no se quiere tratar una excepción la instrucción try/except sobra, porque, precisamente, sirve justamente para cuando hay un plan B.

Con plan B se refiere Marteens a otra forma de hacer las cosas en caso de que de la primera forma que se pensó no salgan bien: puede que sea de perogrullo pero es que creo que no dirá el referido autor en vano que solamente para un 10% de las excepciones tenemos un plan B.

Cita:
Empezado por roman
Porque a juzgar por su descripción de la cláusula fault en Freya da la impresión de que justamente recomienda propagar la excepción
¡Claro! Precisamente porque la gente lo hace mal. Precisamente porque Ian Marteens presupone que lo van a seguir haciendo mal quiere él poner un granito de arena para que aún así las cosas puedan salir mejor. Pero te remito al comienzo del artículo, porque el autor lo explica mejor que yo.

Cita:
Empezado por roman
Para mi, hay excepciones que deen propagarse y otras no, depende de las circunstancias y objetivos.
Pues como en esto, salvando las distancias que puede haber entre tú y yo mirando lo que tú sabes y lo que yo no sé, también estamos de acuerdo, digo, que, al cabo al cabo la suma de acuerdos es mayor que la de desacuerdos.

Actualización:

Cita:
Empezado por Yo mismo
Personalmente calculaba que el usuario se diera cuenta del "error" a la primera (...)
¡Y que además no pensaba soltarle ninguna descarga! Es por esto que actualizo mi mensaje, para preguntar, ¿sabe alguien si, de la misma manera que puede hacerse sonar un ¡Beeep! es posible soltar una descarga al usuario de una aplicación hecha con Delphi? Es broma, a mí no se me ocurre pensar algo así.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 15-07-2005 a las 22:08:45. Razón: (actualización)
Responder Con Cita
  #3  
Antiguo 15-07-2005
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 24
ContraVeneno Va por buen camino
Cita:
Originalmente publicado por dec
Así que no entiendo eso de "El usuario no es tonto, pero el programa debe estar diseñado para tontos." ¿En qué quedamos? ¿El usuario es tonto o no lo es? Porque si no lo es no podemos diseñar un progama para tonto: ¿en qué quedamos?
El siguiente ejemplo ilustra de manera MUY CLARA la justificación para la frase: "El usuario no es tonto, pero el programa debe estar diseñado para tontos" y cito:
Cita:
Originalmente publicado por Roman
¿Te imaginas qué pasaría si en un código de apenas unas cuantas líneas, el compilador no tuviera a bien decirnos: "Missing operator or semicolon" ¿Es obvio que los parámetros de una función deben ir separados por comas!
Estoy totalmente seguro que un compilador no es apto para tontos, sin embargo, debe estar preparado por si ocurre una tontería.
__________________


Última edición por ContraVeneno fecha: 15-07-2005 a las 22:49:11.
Responder Con Cita
  #4  
Antiguo 16-07-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.114
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Aunque entendiendo por dónde quieres ir, si no estoy equivocado, no puedo estar de acuerdo contigo en que el cierre de una instrucción, esto es, el punto y coma sea una tontería.

Prueba de ello es el aviso del compilador, más allá, prueba de ello es que el compilador no continuará adelante hasta que no se solucione "esa tontería".

¿Alguien puede explicarme qué es un programa diseñado para tontos? ¡No conozco ninguno! Si no es un programa "malicioso", que busca la ingenuidad del usuario o su carencia de conocimientos, para vete a saber qué.

Cualquier programa está pensado para alguien y aun alguienes. Y se presupone a ese alguien la capacidad de entender lo que quiere hacer. Porque un programa puede ser al mismo tiempo una herramienta: el usuario habrá de saber qué quiere hacer con ella.

Si PhotoShop, por poner un caso, fuera un programa hecho para tontos hasta yo podría hacer lindas imágenes, pero esto no es así: prueba de que PhotoShop no es un programa para tontos.

Vale. Podría hacer cualquier cosa que pareciera una imagen, pero todos sabemos lo que da de sí un programa como PhotoShop y ni por pienso sabría yo hacer algo como lo que por ejemplo estoy recordando ahora.

Delphi no es un programa para tontos. ¿O sí? Yo diría que no. Pero es un programa. Yo tengo entre manos un programa ahora y no lo estoy haciendo para tontos, puedo prometerlo. Porque no sabría cómo hacerlo, aunque quisiera.

Los asistentes para Windows (cualquiera de ellos) no están hechos para tontos. Simplifican, esconden, "hacen cosas". Si el usuario no quiere ir más allá yo no creo que sea tonto, es que simplemente no necesita más. ¿Para qué darle lo que no necesita? No es tonto: sabe lo que quiere.

Es verdad que no siempre. lamentablemente.

En todo caso creo que esto sería para debatirse, en el sentido de que seguramente aún no tenemos claro lo que el uno piensa que piensa el otro (por lo menos yo me incluyo en esa cuenta) y así será cuestión de dejar claro que, pase lo que pase, esto no pasaría nunca a mayores.

¡Pero yo no hago programas para tontos, que conste!
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 18-07-2005
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.918
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Me parece que el asunto se aclara muy facil. En parte, estoy de acuerdo que las personas tienen mucho potencial, y tratarlas de forma despectiva no es lo mejor. Por otro lado, el que una persona tenga un PHd en Ingenieria quantica-nuclear de plataformas intelesterales biologicamente interconexas, no lo hace *necesariamente* capacitado para usar DOS y darle dir *.* Si esta persona no conoce el programa/sistema se vera tan tonto como nosotros tratando de definir que es la fisica quantica....

Me parece que podriamos extractar varias lecciones:

1- Ocultar complejidad: Bueno. Si voy al medico necesito que me responda : "Nene, tenes como una fiebre altisima, ve!. Por si te preguntan tenes una bacteria amorfa, llamada niMeAcuerdoComoSeLlama piluris bla bla, pero en fin, a la camita y mucha naranja!". Es mejor "El archivo Tata.tutu no se encuentra" a lo que sea que diga el compilador/OS.

2- Evitar/Corregir el problema: Bueno. Como dice DEC, que saque un mensaje de error por SIMPLEMENTE seleccionar un item en una lista, no solo es (ahi si) tonto, sino que deberia tomarse como una ofensa capital! Es responsabilidad de la persona con la mejor informacion y mas cercana a la solucion (o sea nosotros) manejar el asunto.

3- Ignorar/Ocultar informacion: MALO. El asunto es que hay NIVELES a la hora de dar informacion... Debe saber el usuario FINAL TODO el mensaje de error, con call stack, version del compilador, mensaje de excepcion, direccion del servidor, etc??? (gracias, dira el hacker!!!) Normalmente, no. Debe saber todos y cada uno de los errores que saca el programa? Indiscutiblemente NO.

Pero lo que le puede interesar al ADMINISTRADOR del sistema/red, es muy diferente. Y lo que necesita saber el PROGRAMADOR es mucho mas. Es por eso que unas cosas deben sacar mensaje de error, escandalosamente (= TODO LO QUE NO ESPERABAMOS) otras debe ser mensajes agradables (= LO QUE EL USUARIO ESPERARIA QUE SE LE INFORMARA, ie: Que el archivo no se encontro donde se le dijo) otras deben quedar en un log (para el personal tecnico) y tal vez el resto solo se debe ver en una version del ejecutable/exe ESPECIAL para depuracion, con los assert activados, con una estrategia AGRESIVA de logeo de mensaje y sin nada que enmascare el problema (desactivando los mensajes lindos, por ejemplo). Esto si que le salva la vida cuando se requiere...

4- Dar una respuesta general a una pregunta especifica: MALO. Si ya sabemos que va a sacar un mensaje a la hora de convertir el numero de caracteres a integer, porque poner un un manejo general de la excepcion? SI YA SABEMOS QUE VA A PASAR, pues digamoselo al compilador! Y de esa manera, el codigo queda explicito: Si pones EConvertError el proximo programador vera la intencion de la excepcion de forma clara.
__________________
El malabarista.
Responder Con Cita
  #6  
Antiguo 01-08-2005
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 mamcx
En parte, estoy de acuerdo que las personas tienen mucho potencial, y tratarlas de forma despectiva no es lo mejor
Pero, ¿quién habló de tratarlas de forma despectiva? Lo dicho. Cuando el compilador me saca a mí un mensaje diciéndome que falta un punto y coma no me siento tratado despectivamente. Por el contrario, si el compilador, o cualquier otro programa me avisa rápida y oportunamente de un dato mal ingresado, por tonto que sea, más bien me siento agradecido.

// Saludos
Responder Con Cita
  #7  
Antiguo 01-08-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Cita:
Empezado por roman
Cuando el compilador me saca a mí un mensaje diciéndome que falta un punto y coma no me siento tratado despectivamente
Yo si.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #8  
Antiguo 01-08-2005
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.918
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
No me referia a sacar los mensajes (o no), sino a la actitud que uno tiene hacia los demas (en este caso los usuarios o clientes).



Cuando uno considera que estos son "tontos", la imagen que se tiene afecta de una u otra manera la forma en como hacemos las cosas. Otra cosa es reconocer que las personas, incluso las que en teoria son inteligentes, puedan hacer cosas tontas de vez en cuando.

Y a veces, realmente hacemos que nuestros usarios actuen de forma muy tonta. Un concepto que lei, y es que una manera de hacer que la gente (=usuarios) sean un poco menos miserables (osea mas felices!) es darle una sensacion de control...

Cita:

Cuánto más sientes que puedes controlar tu entorno y que las cosas que haces funcionan, más feliz eres. Si estás frustrado, enfadado y contrariado, es porque probablemente te ha ocurrido algo que no puedes controlar: aunque sea algo pequeño. La barra espaciadora de tu teclado no va bien. Cuando tecleas, algunas palabras se quedan pegadas. Esto es frustrante, porque le has dado al espacio y no ha pasado nada. La llave de tu casa no funciona bien. Cuando intentas girarla, se atasca. Otra pequeña frustración. Estas cosas se acumulan; estas son las cosas que nos hacen infelices día a día. Incluso aunque parezcan demasiado insignificantes para explayarse con ellas (quiero decir, hay gente en África muriéndose de hambre, por el amor de Dios, no me puedo enfadar con la barra del espacio), no obstante, afectan a nuestro humor.
Este articulo de Joel (español) me gusto mucho:

http://spanish.joelonsoftware.com/ui...hapters/1.html

Es sobre como hacer interfaces de usuario, por ejemplo, si estoy haciendo algo tonto, pero no recibo, de alguna manera, indicacion de ello, entonces me voy a sentir infeliz.

Para un usuario (generalmente), los programas deberian de ser como la experiencia de un buen carro: Excelente suspencion, frena cuando se le dice, pita si se le va a acabar la gasonlina, etc... Para un programador, debe ser como manejar un avion: Lucecitas y pitidos por todos lados, porque el grado de posibles errores es mayor...



Los mensajes de error y la manera como se manejan las excepciones pueden ayudar o desfavorecer el grado de control de un usuario sobre el programa. Para un programador, se necesita los mensajes mas constantemente, mas visiblemente y mas informativamente. Realmente me frustra que me saque el Delphi un Exeption at addres 0x8.... que no me dice nada, pero es peor que no lo haga...



Los mensajes de error pueden dar mas control, bien usados.





"El archivo tutu.tata no existe" Ok, esta bien, eso lo puedo manejar, si algo, le pregunto al que sabe de sistemas: Estoy en control.



El programa se cierra sin avisar! Eso si es frustrante, no se que hacer (hice algo mal? Que?) El windows tiene un virus! A correr el antivirus. Listo. Nada. Desfragmentar? Ok. Vuelvo al programa, hago lo mismo. Se cierra. Formateo? Pregunto, no me dicen nada... arrghhhh!!!!!



"El formato de la fecha es incorrecto" Ok, no sabia que las fechas tenian formato: Llamo a soporte tecnico y me dicen que hago. Estoy en control.



La fecha se ingreso, sin verificar. Los saldos contables NO CUADRAN!. Me equivoque? Reviso todas mis transacciones. ESTAN BIEN! Reviso otra vez?? El jefe me hecha la culpa! LLamo a soporte tecnico (sinceramente no sabran todavia)...


En fin. Es la idea... Volviendo a la actitud: Muy estupido pensar que el defragmentar CORRIGE un problema-En serio hay usuarios que luego de hablar con tantos tecnicos piensan que la ruta a la solucion es: Antivirus, Degramentar, reinstalar- Pero que se le va a hacer: Como puede saber que paso? Sin un mensaje de error, asi sea un Exception address at 0x8000 que saque DENTRO del programa, todo se puede pensar... Es por eso que volviendo al temas: Los errores no se pueden ocultar. Solo se debe filtrar la cantidad, frequencia y alarma de los mismos, es nuestra responsabilidad. Y si no hay tiempo para hacer eso: No enmascarar los errores. Al menos los errores escandalosos permiten tener un grado, aunque pequeño, de control, un camino mas probable de solucion...
__________________
El malabarista.
Responder Con Cita
  #9  
Antiguo 18-07-2005
Avatar de marceloalegre
[marceloalegre] marceloalegre is offline
Miembro Premium
 
Registrado: abr 2005
Ubicación: Mar del Plata - Argentina
Posts: 448
Poder: 20
marceloalegre Va por buen camino
Thumbs up try except

Lo que dice roman es correcto, sin seguir hablando de lo mismo, eso tiene que ser asi: LOS PROGRAMAS TIENEN QUE SER HECHOS PARA TONTOS...
es increible, las malas intepretaciones que puede tener la gente de las cosas!
yo basicamente utilizo mucho los try/except y siempre tenes q usar plan b,, muchas veces un aviso,, SIEMPRE, siempre los uso..

Saludos!
Responder Con Cita
  #10  
Antiguo 05-03-2008
sevilla19742 sevilla19742 is offline
Registrado
 
Registrado: mar 2008
Posts: 3
Poder: 0
sevilla19742 Va por buen camino
sevilla19742

¿Te imaginas qué pasaría si en un código de apenas unas cuantas líneas, el compilador no tuviera a bien decirnos: "Missing operator or semicolon" ¿Es obvio que los parámetros de una función deben ir separados por comas!
sevilla19742
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


La franja horaria es GMT +2. Ahora son las 01:04:21.


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