Hola Gallego GRacias , esta muy bueno el artículo . Vos en que casos usas #error: ?
saludos --- El mar 3-ago-10, GallegO <[email protected]> escribió: De: GallegO <[email protected]> Asunto: Re: [clubSmalltalk] StdioFileStream dolphin Para: [email protected] Fecha: martes, 3 de agosto de 2010, 20:02 KiKoTe: (fijate que ya te invente un nick camel case): Tenés que leer este articulo: Exceptions by Design: ANSI Standard Exception Handling http://www.cincomsmalltalk.com/userblogs/cincom/digest?content=2001-files-exceptions No se si ya no te lo pase alguna vez. Bueno, a mí me gusta mucho y lo recomiendo a todo el mundo ja, espero no causar tanto daño. Saludos GallegO El 3 de agosto de 2010 15:08, Jose Gregoris <[email protected]> escribió: Hola Carlos , lista Contesto algunas cosas y otras las dejo para espues de masticar un poco. Me voy a quedar sin dientes ajajajja . En líneas generales estoy de acuerdo. Y no soy muy partidario de las excepciones dentro del código de la aplicación. Para una posición más extrema (y bien fundamentada) sobre el uso de excepciones dentro del dominio de aplicación, podés preguntarle a Hernán Wilkinson (que sí está en esta lista). La discución esta habierta, me encantaría conocer mas opiniones y claro la de Hernan tambien. Si tiene algun material de lectura y lo puede pasar, sería genial. Yo pregunto, la mayoria de las veces pocos contestan :( y casi siempre son los mismos y se los agradezco Entiendo que todos tiene trabajo, ocupaciones y muy poco tiempo o capas nada para decir jajaja. Como en el caso de la pregunta sobre: "Como usan ST" Hay otros temas, como, por ejemplo: x.- el mecanismo de excepciones se complica cuando se disparan procesos paralelos y debe heredarse manejadores de excepciones, etc. Seguro, sería una complicación adicional. pero más para la VM y el administrador de procesos que para el programador. Acá no entendí. x.- el manejo de errores, a veces, quedan en lugares insólitos y no pueden ser rehusados fácilmente (sino que debe ser planificado). Totalmente en desacuerdo. El manejo de errores tiene que quedar donde hay información para hacerlo, donde se conoce cuál era la intención de la operación y hay una lógica posible para la recuperación. Y si está en el lugar correcto, es parte del comportamiento del objeto y puede ser reusado (rehusar es negarse) tan fácilmente como el resto. A que te referís con (rehusar es negarse) ? No lo sé. A mí me molesta un poco, pero me molestaría más discutirlo en la lista de Smalltalking. Saludos Entiendo que hay diferencias entre Ale y personas que participan de la lista y es una pena (tan pocos y tanto quilombo :( ). No me hago el dolobu por eso aclaré antes. La verdad es que no me interesa saber los porque, es algo que no puedo manejar ni resolver saludos y gracias de nuevo --- El mar 3-ago-10, Carlos E. Ferro <[email protected]> escribió: De: Carlos E. Ferro <[email protected]> Asunto: Re: [clubSmalltalk] StdioFileStream dolphin Para: [email protected] Fecha: martes, 3 de agosto de 2010, 13:55 On 02/08/2010 11:50, Jose Gregoris wrote: Hola Carlos Perdón por la demora, pero estaba tratando de masticar un poco tu respuesta y mi concepto anterior. No hay problema, los emails permiten recuperar los contextos :-) No me gusta citar a alguien que no participa de la lista ya que no puede aclarar sus comentarios,pero en este caso deberé hacerlo para tratar de aclarar mis dudas. Esto es lo que encontré en los históricos de smalltalking. Esto decía Ale reimondo en un mail , y hay otro comentario despues: Si, me refería a usar excepciones o usar #error: (o alguna alternativa similar). Cual es la diferencia? En el caso de self error: 'Ouch! que me paso?' o algo similar (el mensaje puede no ser #error: sino alguno más específico, lo cual permite SUBCLASIFICACION) quien tiene la responsabilidad de resolver el error es el objeto receptor en el contexto donde este ocurre y con el grado de abstracción donde se gesta el error. En cambio en el mecanismo de excepciones, quien maneja la excepcion NO es necesariamente el objeto responsable del error. Incluso esta excepcion se debe tratar de resolveren un contexto que (es muy provable) no tiene información específica ni el mismo grado de abstracción que el contexto donde el error/excepcion se genero. En líneas generales estoy de acuerdo. Y no soy muy partidario de las excepciones dentro del código de la aplicación. Para una posición más extrema (y bien fundamentada) sobre el uso de excepciones dentro del dominio de aplicación, podés preguntarle a Hernán Wilkinson (que sí está en esta lista). Pero en este caso, estamos hablando de artefactos que de por sí ya son de bajo nivel: un stdioFileStream y la librería de base que se conecta al SO. ¿Qué chances tienen esos artefactos de resolver la excepción, aunque se genera en su contexto? NINGUNA. No hay nada interesante que puedan hacer, aunque sí muchas cosas molestas y peligrosas. Si implementara #error: o inclusive fileNotFoundError: en StdioFileStream, lo único que podría hacer es... generar una excepción. Esto es algo que pasa muchas veces: uno puede pensar que el mejor contexto para resolver el problema, es el más cercano. Porque ahí todavía estamos cerca, sabemos exactamente qué pasó y estaríamos en mejores condiciones para resolver las cosas. Todavía no le respondimos nada feo o equivocado a nadie. Pero en realidad, la semántica de la operación suele estar indicada mucho más arriba. En estos casos, claramente es mejor que la excepción la maneje el que pidió las cosas, no el que las está haciendo (que es un "tonto" de bajo nivel). Otro ejemplo clásico del manejo de excepciones: un Float recibe / con cero como argumento. ¿Cómo va a manejar eso? No hay chance. El manejo de errores por el mecanismo de excepciones me parece adecuado cuando uno trabaja con lenguajes de programación, donde el objeto no puede hacer mucho ni el sistema puede cambiar demasiado (como para generar errores inesperados). Entiendo que tratar de "adivinar" a partir de una excepción, en otro contexto, cuál fue el problema y cómo solucionarlo es arriesgado. Por eso también enfatizaba que hay que proveer excepciones claras y específicas. Si "desde arriba" se ve un error genérico, los intentos de solución son aventurados o necios, como esos carteles de Windows donde te dice: "Su operación falló; tal vez usted hizo esto o tiene aquello o debería revisar lo de más acá". Ahí se ve que tienen un error genérico, y conocen tres posibles fuentes de ese error... En el caso de un sistema de objetos donde (debido a delegación) el envío de un mensaje puede desencadenar una anidación de contextos diferente en distintos momentos del sistema (la delegación en objetos nuevos activa otros métodos), el no atender un error (u otra impureza del sistema) en el contexto donde se genera/instancia te produce el riezgo de que el error/impureza se propague a otras áreas o que no pueda ser tratada adecuadamente (por llegar a un grado de abstraccion muy alto, por ejm.). En resumen, es importante saber utilizar ambos mecanismos y reconocer que no son equivalentes sino complementarios. Seguro... pero eso no dice nada nuevo. ------------------------------------------------------------------------------------- En Smalltalk hay dos formas de manejar errores (hay un mail sobre el tema en la lista): 1.- atención por parte de otro objeto (excepciones). 2.- atención por parte del objeto responsable (receptor). El mecanismo (1) posee dos características que hacen que no sea completa: a) a menudo el manejador de la excepción no posee conocimiento sobre que es lo que ha ocurrido realmente o en que contexto ha ocurrido. Cierto. Por eso la excepción debería contener suficiente información como para que el manejador adquiera ese conocimiento. b) tiene que ser previsto un posible error, y además considerar TODOs los errores posibles/relacionados por parte de un objeto que no tomo la responsabilidad. No, de ninguna manera. Nunca se pueden prever todos los errores posibles, ni tiene sentido hacerlo. para eso hay manejadores por defecto de las excepciones. Tiene que haber excepciones específicas y relevantes, y el manejador tomará las que considera que es su responsabilidad y capacidad atender. Como cualquier objeto. y una característica que la hace muy conocida y cómoda para quien no ha trabajado mucho tiempo en objetos: c) existe en otros/varios "lenguajes de programación" Básicamente, porque la copiaron de Smalltalk... Hay otros temas, como, por ejemplo: x.- el mecanismo de excepciones se complica cuando se disparan procesos paralelos y debe heredarse manejadores de excepciones, etc. Seguro, sería una complicación adicional. pero más para la VM y el administrador de procesos que para el programador. x.- el manejo de errores, a veces, quedan en lugares insólitos y no pueden ser rehusados fácilmente (sino que debe ser planificado). Totalmente en desacuerdo. El manejo de errores tiene que quedar donde hay información para hacerlo, donde se conoce cuál era la intención de la operación y hay una lógica posible para la recuperación. Y si está en el lugar correcto, es parte del comportamiento del objeto y puede ser reusado (rehusar es negarse) tan fácilmente como el resto. El segundo mecanismo (2) es el más cómodo y apropiado para tu propósito. Todo error, aunque comience a ser tratado por una excepción; termina enviando el mensaje #error: a un objeto (a menudo, el objeto que encontró una condición adversa mientras resolvía una responsabilidad generada por un envío de mensaje). ----------------------------------------------------------------------------------- Según veo, tus comentarios son contrapuestos a los de Ale y me confunde un poco. Que opinión te merece lo que dice Ale ? Espero haberlo dejado claro; estoy de acuerdo en algunas cosas y en desacuerdo en muchas otras. De todos modos, te doy una diferencia fundamental: en ese texto, él está hablando en general y sin un ejemplo concreto. Yo sólo me atengo al caso que vos trajiste, un pedazo de código en una clase de stream. Tal vez, en este contexto puntual, su opinión se parezca más a la mía. Para la discusión más general, te recomiendo de nuevo contactar a Hernán, tal vez él tenga algo escrito sobre el uso de excepciones (recuerdo haber visto una clase muy interesante en la materia de la UBA). Saludos kiko PD: Espero nadie se moleste por poner comentarios de personas que no participan de esta lista, si es así solo avisen y no lo hago mas No lo sé. A mí me molesta un poco, pero me molestaría más discutirlo en la lista de Smalltalking. Saludos -- carlos e. ferro | senior developer | caesar systems | see clearly. decide smarter. [email protected] | t: +1.281.598.8790 | t: +54.11.4389.0126 | www.caesarsystems.com This message and any attached documents contain information from Caesar Systems LLC that may be confidential/trade secret and/or privileged. If you are not the intended recipient, you may not read, copy, distribute or use this information. If you have received this transmission in error, please notify the sender immediately by telephone or by reply e-mail and then delete this message. -- To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] http://www.clubSmalltalk.org -- To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] http://www.clubSmalltalk.org -- To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] http://www.clubSmalltalk.org -- To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] http://www.clubSmalltalk.org
