En Nueva York.

2008/9/18 Guillermo Schwarz <[EMAIL PROTECTED]>:
> En Chile o en Argentina?
>
> 2008/9/13 Andres Valloud <[EMAIL PROTECTED]>
>>
>> Ehhh... no se a que te referis, pero hablo con conocimiento (parcial)
>> de causa porque trabaje ahi.
>>
>> Andres.
>>
>>
>> 2008/9/13 Guillermo Schwarz <[EMAIL PROTECTED]>:
>> > Pero es que antes hacìan casi todo en Smalltalk, cuando apareciò Java
>> > incluso aparecieron varios post de lo malo que habìa sido porque habìan
>> > tenido que migrar gran parte del còdigo a Java, pero al parecer no les
>> > funcionò...
>> >
>> > 2008/9/12 Andres Valloud <[EMAIL PROTECTED]>
>> >>
>> >> Guillermo,
>> >>
>> >> Con respecto a JP Morgan, no estan "volviendo" a Smalltalk porque
>> >> nunca se fueron.
>> >>
>> >> Andres.
>> >>
>> >>
>> >> 2008/9/12 Guillermo Schwarz <[EMAIL PROTECTED]>:
>> >> >
>> >> >
>> >> > 2008/9/12 Hernan Wilkinson [EMAIL PROTECTED]
>> >> >>>
>> >> >>>
>> >> >>
>> >> >> Sinceramente no entiendo lo que pones. Creo que estamos hablando de
>> >> >> cosas
>> >> >> distintas. Lo que yo quise poner es: un proxy (aProxy) instancia de
>> >> >> la
>> >> >> clase
>> >> >> Proxy (por ejemplo) es un objeto. Por ser objeto y no clase ni nada
>> >> >> similar,
>> >> >> se encuentra en el "nivel" de los objetos.
>> >> >
>> >> >
>> >> > Mmmh, no.
>> >> >
>> >> > Un proxy es una clase. Cada vez que creas un proxy diferente es una
>> >> > clase
>> >> > diferente. Obviamente luego lo instancias para usarlo, pero como
>> >> > todas
>> >> > las
>> >> > clases.
>> >> >
>> >> >>
>> >> >> Un trait, por supuesto que es un objeto, pero se encuentra en un
>> >> >> "nivel"
>> >> >> distinto a los objetos "comúnes" o "concretos" (como el string
>> >> >> "hola" o
>> >> >> el
>> >> >> número "1" o el aProxy).
>> >> >
>> >> >
>> >> > Si estudiaras Lisp te darías cuenta que no.
>> >> >
>> >> > Sólo en lenguajes como VB existen esas distinciones irrelevantes...
>> >> >
>> >> >>
>> >> >> En realidad se encuentra en un "meta-nivel" (un nivel que describe
>> >> >> el
>> >> >> nivel de los objetos, por eso meta) y es por eso que nunca podrían
>> >> >> ser
>> >> >> iguales.
>> >> >
>> >> >
>> >> > Mmmhh. EN el caso de las meta clases te lo compro. De hecho nunca
>> >> > puedes
>> >> > tener acceso a las metaclases a menos que uses reflection. Y aún así
>> >> > nunca
>> >> > he visto una aplicación útil. Ok, la he visto, pero era un caso muy
>> >> > puntual...
>> >> >
>> >> >>
>> >> >> Los traits son como clases, y de la misma manera que no puedo
>> >> >> comparar
>> >> >> un
>> >> >> Proxy con una clase, no puedo comparar un Proxy con un trait. Esto
>> >> >> es
>> >> >> lo que
>> >> >> quise decir.
>> >> >
>> >> >
>> >> > Pero si hacen lo mismo. Y ambos son clases. Sólo que uno es más
>> >> > ordenado
>> >> > y
>> >> > el otro es más desordenado...
>> >> >>>
>> >> >>>
>> >> >>>>
>> >> >>>> Por ejemplo, un proxy adolece del problema del "identidad"
>> >> >>>> mientras
>> >> >>>> que
>> >> >>>> eso ni se puede pensar en un trait.
>> >> >>>
>> >> >>>
>> >> >>> Eso de la identidad, a mi parecer, es màs un detalle de
>> >> >>> implementaciòn
>> >> >>> que un feature que quiera que tenga el lenguaje. No necesito que
>> >> >>> cada
>> >> >>> objeto
>> >> >>> exista una sola vez en la memoria, ni me importa. Si el compilador
>> >> >>> o
>> >> >>> el
>> >> >>> runtime son capaces de ahorrar memoria, bien. Significa que estàn
>> >> >>> bien
>> >> >>> hechos, pero si complica el modelo de programaciòn es una basura y
>> >> >>> hay
>> >> >>> que
>> >> >>> botarlo.
>> >> >>
>> >> >> No es a lo que me refiero, intuyo que estás confundiendo identidad
>> >> >> con
>> >> >> cantidad de objetos necesarios para representar el mismo ente.
>> >> >
>> >> >
>> >> > No. Hace unos 10 o 15 años atrás se volvieron todos locos con eso de
>> >> > la
>> >> > identidad y creo que fue una de las cosas que casi hicieron fracasar
>> >> > a
>> >> > la
>> >> > orientación a objetos. Es irrelevante para nosotros y sólo a un
>> >> > fanático
>> >> > de
>> >> > Lisp le podría interesar.
>> >> >
>> >> >>
>> >> >> Cuando hablo del problema de identidad me refiero a que una vez que
>> >> >> el
>> >> >> proxy forwardea el mensaje al objeto proxeado, "self" pasa a estar
>> >> >> bindeado
>> >> >> con el objeto proxeado
>> >> >
>> >> >
>> >> > Que buen spanglish ;-) Si mi profesora de castellano me viera :))
>> >> >
>> >> >>
>> >> >> y si no hay manera que el proxy se entere que se envía un mensaje
>> >> >> que
>> >> >> el
>> >> >> también tiene intención de "controlar".
>> >> >
>> >> >
>> >> > Granted. Ese es un problema, pero los "constructores de proxies"
>> >> > saben
>> >> > eso,
>> >> > o por lo menos eso espero. ¿Traits lo soluciona?
>> >> >
>> >> >>
>> >> >> Esto no sucede en lenguajes de prototipación con delegación como
>> >> >> Self,
>> >> >> donde implementar un proxy o cualquier tipo de wrapper es trival.
>> >> >
>> >> >
>> >> > Qué interesante.
>> >> >
>> >> >>
>> >> >> A eso me refería y lo ponía como ejemplo de lo que aclaré en el
>> >> >> párrafo
>> >> >> anterior.
>> >> >
>> >> >
>> >> > Bueno en ese caso supongo que bastaría con arreglar el compialdor de
>> >> > Smalltalk para que sea "proxy aware".
>> >> >>
>> >> >>
>> >> >>>
>> >> >>>
>> >> >>> Por ejemplo, en Smalltalk una vez (circa 1996) bajè una biblioteca
>> >> >>> para
>> >> >>> Smalltalk/V que se encargaba de guardar objetos como lo hace
>> >> >>> Hibernate, el
>> >> >>> asunto es que cuando volvìan del disco (o la BD) se preocupaba
>> >> >>> Smalltalk que
>> >> >>> no se crearan copias. Hasta ahì todo bien. El ùnico problema es que
>> >> >>> cuando
>> >> >>> programas en cualquier lenguaje, eso no pasa. Por ejemplo, usa Java
>> >> >>> para
>> >> >>> leer de una base de datos, y has scan de una tabla con JDBC, te
>> >> >>> quedaràs con
>> >> >>> 2 copias de los mismos objetos. Eso es lo natural. Eso de que el
>> >> >>> ORM
>> >> >>> se
>> >> >>> ponga a manejar los objetos en memoria y que cuando cambias uno se
>> >> >>> te
>> >> >>> cambien todos es contraproducente. He trabajado en proyectos asì y
>> >> >>> es
>> >> >>> un
>> >> >>> asco, al final nadie entiende nada, es parche sobre parche y el
>> >> >>> usuario lo
>> >> >>> ùnico que quiere es que boten el sistema a la basura.
>> >> >>
>> >> >> Bueno, no se que experiencia tuviste, pero yo tuvo experiencias
>> >> >> complemtamente contrarias y justamente algo que es fundamental de un
>> >> >> framework de mapping objeto relacional es asegurarse que EN LA MISMA
>> >> >> TRANSACCION, si una fila se lee dos veces, que la misma sea
>> >> >> representada en
>> >> >> un único objeto... veo que tenemos varias diferencias... que
>> >> >> interesante!
>> >> >> :-)
>> >> >
>> >> >
>> >> > Sí, y en HIbernate eso es como una patada en la wata. No entiendo
>> >> > porque
>> >> > copiaron a Smalltalk a la pata, bueno en realidad sí lo entiendo,
>> >> > Smalltalk
>> >> > es la implementación de referencia, aunque todos digan lo contrario y
>> >> > estén
>> >> > atrasados como 20 años ;-)
>> >> >
>> >> > El punto está en que se vuelve poco natural eso de que los objetos
>> >> > "se
>> >> > compacten" en memoria y no pueda naturalmente tener objetos
>> >> > repetidos.
>> >> >
>> >> > Caso en cuestión: No quiero que los objetos que estoy leyendo en mi
>> >> > tx
>> >> > sean
>> >> > leídos en tú tx. Eso es así en las bd relacionales, pero en Hibernate
>> >> > hacen
>> >> > todo lo posible porque los objetos no se repitan, como si el estado
>> >> > real
>> >> > fuera el estado en RAM, y el estado en al BD fuera sólo un respaldo,
>> >> > cuando
>> >> > es todo al revés.
>> >> >
>> >> > Lo que está en el BD es lo que manda porque las BD tiene 2 phase
>> >> > commit,
>> >> > etc., mientras que en RAM no hay transaccionabilidad, de modo que
>> >> > todo
>> >> > lo
>> >> > que hagas es una soberana cochinada poco confiable.
>> >> >
>> >> > Imagina que leo algo en ram y lo muestro en la pantalla, por ejemplo
>> >> > una
>> >> > lista de clientes, o de proveedores, y leugo presiono sobre un
>> >> > proveedor
>> >> > y
>> >> > le envío un back order, ¿no estoy usando los datos de la pantalla?
>> >> > ¿es
>> >> > decir
>> >> > los datos que están en ram? ¿Y que pasa si entre que miro la lista y
>> >> > presiono el back order pasan 5 días? (ok, estoy exagerando, pero todo
>> >> > peude
>> >> > haber cambiado mucho)
>> >> >
>> >> > Entonces me encuentro con objetos de ahora y objetos super viejos,
>> >> > todos
>> >> > mezclados en ram, y por alguna razón el orm asume que "esto es la
>> >> > verdad" y
>> >> > luego los usuarios se quejan que los datos en pantalla no se
>> >> > refrescan
>> >> > con
>> >> > lo que sus compañeros de trabajo están actualizando y los
>> >> > programadores
>> >> > se
>> >> > vuelven monos llamando "update" sobre cada objeto que aparece en la
>> >> > pantalla, y para colmo un sólo update se puede resolver con 12 mil
>> >> > SQL,
>> >> > porque los ORM son un chiste en este momento, claro y en Hibernate
>> >> > recomiendan hacer join, pero Oracle sólo resiste hasta 12 o 24 tablas
>> >> > al
>> >> > mismo tiempo en el mismo join... qué chanta...
>> >> >
>> >> > Y para que decir que se demora varios minutos...
>> >> >>>
>> >> >>>
>> >> >>> Me da risa porque esto pasò en JP Morgan usando Java y Hibernate,
>> >> >>> pero
>> >> >>> JP
>> >> >>> Morgan es conocida por usar Smalltalk.
>> >> >>
>> >> >> Y el problema es porque usaron Java... se deberían haber quedado con
>> >> >> Smalltalk! jaja.
>> >> >
>> >> >
>> >> > JA JA, tengo entendido que están volviendo a Smalltalk, por algo
>> >> > será,
>> >> > claro
>> >> > que en Chile con suerte entraron al mundo Java porque antes estaban
>> >> > con
>> >> > Fox
>> >> > 8-P (creo que eso es peor que COBOL).
>> >> >
>> >> >
>> >> > [...] At first I hoped that such a technically unsound project would
>> >> > collapse but I soon realized it was doomed to success. Almost
>> >> > anything
>> >> > in
>> >> > software can be implemented, sold, and even used given enough
>> >> > determination.
>> >> > There is nothing a mere scientist can say that will stand against the
>> >> > flood
>> >> > of a hundred million dollars. But there is one quality that cannot be
>> >> > purchased in this way---and that is reliability. The price of
>> >> > reliability is
>> >> > the pursuit of the utmost simplicity. It is a price which the very
>> >> > rich
>> >> > find
>> >> > most hard to pay.
>> >> >
>> >> > -- C.A.R. Hoare, "The Emperor's Old Clothes", Turing Award Lecture
>> >> > (1980)
>> >> >>
>> >> >>
>> >> >>>
>> >> >>>
>> >> >>>>
>> >> >>>> 3) Recalco lo que dice Gabriel, no hay que perder nunca la pata
>> >> >>>> conceptual. Conceptualmente trait es distinto de clase y de proxy,
>> >> >>>> representan cosas completamente distintas.
>> >> >>>
>> >> >>>
>> >> >>> Claro como digas. Y objeto tambièn es distinto. Pero una clase es
>> >> >>> un
>> >> >>> objeto y todo objeto pertenece a una clase.
>> >> >>
>> >> >> jaja, no, no es como digo yo. Perdona si soné agresivo o imperativo.
>> >> >> Por
>> >> >> eso aclaré en el mail que lo escribía rápido y esperaba que nadie se
>> >> >> molestara... indudablemente no alcanzo... este intercambio de
>> >> >> opiniones
>> >> >> siempre terminar hiriendo suceptibilidades cuando se hace por
>> >> >> mail...
>> >> >> si
>> >> >> fuera de manera personal no pasaría... en fin.
>> >> >
>> >> >
>> >> > No hay ofensa. No lo tomo a mal.
>> >> >>
>> >> >> Igual, no todo objeto pertenece a una clase. Me voy a poner en
>> >> >> quisquilloso como lo hago cuando enseñamos en la facu
>> >> >
>> >> >
>> >> > JA JA JA
>> >> >
>> >> > Eso lo llamo "cuando el cerebro empieza a funcionar" ;-)
>> >> >
>> >> >>
>> >> >> y espero que no te sigas molestando... si te molesto perdoname, no
>> >> >> es
>> >> >> mi
>> >> >> intención... O sea, la relación "instancia de" no es una relación de
>> >> >> pertenencia....
>> >> >
>> >> >
>> >> > Qué interesante. O sea que una instancia de un problema no es un
>> >> > ejemplo
>> >> > de
>> >> > un problema.
>> >> >
>> >> > Claro, uno define los términos como quiere, pero si lso defines a tu
>> >> > arbitrio eso no cambia el fondo de la discusión.
>> >> >
>> >> > Por lo menos en mi "facu", un objeto sí era un elemento del conjunto
>> >> > representado por el tipo. Era así en todos los lenguajes. Y cuando
>> >> > llegamos
>> >> > a Smalltalk, vino un argentino o uruguayo (sin ánimo de ofender a
>> >> > nadie)
>> >> > y
>> >> > dijo que no, que los tipos y las clases eran cosas distintas e hizo
>> >> > sus
>> >> > malabares en clase, pero luego de pensarlo algunos meses esa idea no
>> >> > me
>> >> > condujo a nada. Desaofrtunadamente parece de escaso valor intelectual
>> >> > una
>> >> > idea que no produce resultados en la práctica, aunque debo reconocer
>> >> > que
>> >> > en
>> >> > su momento la explicación fue convincente.
>> >> >
>> >> > En el mundo de la OO hay tanto tipo que dice que sabe, que de repente
>> >> > te
>> >> > mandan por un derrotero que no es más que un callejón sin salida y de
>> >> > donde
>> >> > te toma años salir.
>> >> >
>> >> >>
>> >> >> pero igual, en todo caso, la relación instancia de solo existe en
>> >> >> ambientes de objetos con clasificación (aristotélicos) y no en
>> >> >> aquellos
>> >> >> con
>> >> >> prototipos (contemporaneos) donde un objeto existe por si mismo si
>> >> >> necesidad
>> >> >> de una clase...
>> >> >
>> >> >
>> >> > ok, self es prototípico, y no hay instancias en él, aunque sí muchos
>> >> > objetos
>> >> > clonados y que luego evolucionaron porque a diferencia de Smalltalk,
>> >> > en
>> >> > Self
>> >> > son los objetos los que determinan su propio comportamiento, ya que
>> >> > no
>> >> > existe una clase que le diga a cada objeto de qué tipo es y por lo
>> >> > tanto
>> >> > cuál es su protocolo, entiendo, me parece un desorden descomunal,
>> >> > pero
>> >> > lo
>> >> > entiendo...
>> >> >
>> >> >
>> >> >>
>> >> >> un buen ejemplo de estos lenguajes es Self.
>> >> >
>> >> >
>> >> > ah, ok gracias por validarme ;-)
>> >> >>>
>> >> >>>
>> >> >>> Todo comportamiento està asociado a una clase y por lo tanto el
>> >> >>> comportamiento de 2 objetos de la misma clase es necesariamente el
>> >> >>> mismo. La
>> >> >>> herencia es especializaciòn de las clases y por lo tanto de su
>> >> >>> comportamiento. De modo que al usar traits estamos logrando que
>> >> >>> comportamientos que son comunes a clases que son de jerarquìas
>> >> >>> independientes, compartan el còdigo usando traits o proxies, porque
>> >> >>> conceptualmente ambos hacen lo mismo.
>> >> >>
>> >> >> Pero un proxy solo proxea UN OBJETO,
>> >> >
>> >> >
>> >> > Si lo pones en un factory y sólo instancias objetos a través de un
>> >> > factory,
>> >> > entonces todos tus objetos están proxiados. De hecho si mal no
>> >> > recuerdo
>> >> > hay
>> >> > una manera de hacer eso, creo que es en Smalltalk, definiendo un
>> >> > método...
>> >> > ya se me olvidó, pero en fin...
>> >> >
>> >> >>
>> >> >> por lo tanto solo puede modificar el comportamiento de UN OBJETO,
>> >> >> mientras
>> >> >> que un trait "complementa" el comportamiento defino en UNA CLASE que
>> >> >> hacer
>> >> >> que cambie el comportamiento de TODOS LOS OBJETOS instancias de
>> >> >> ella...
>> >> >
>> >> >
>> >> > O sea le chanto el proxy en el factory, ¿algo más?
>> >> >
>> >> >>
>> >> >> para mi no tienen nada que ver conceptualmente.
>> >> >
>> >> >
>> >> > Hasta el momento sóplo estamos hablando de mecanismos, no de lo que
>> >> > hacen.
>> >> > Ambos agregan comportamiento a clases sin tocarlas, ese es el
>> >> > objetivo
>> >> > conceptual al fin y al cabo. Respecto del mecanismo me parece que es
>> >> > casi lo
>> >> > mismo, si el traits tiene ayuda del compiladorm, si escribo "trait X
>> >> > {...}"
>> >> > en vez de "class X {...}" me da lo mismo, por convención digo que
>> >> > todos
>> >> > los
>> >> > traits deben terminar en Trait y listo "class XTrait {...}"...
>> >> >
>> >> > No veo diferencia, aunque claro un programador puede demorarse meses
>> >> > en
>> >> > entender eso. Recuerdo un proyecto de 1.5 años en el que los
>> >> > programadores
>> >> > reclamaron durante todo el proyecto porque usábamos runable que en
>> >> > Java
>> >> > es
>> >> > un asco, mientras que en Smalltalk usas un bloque y listo. Ok, pero
>> >> > conceptualmente es "delayed execution", en Lisp se llama quote, y
>> >> > qué?
>> >> > Es lo
>> >> > mismo!!!
>> >> >>>
>> >> >>>
>> >> >>> En el mismo paper introductorio de traits que mandè antes dice que
>> >> >>> los
>> >> >>> traits son una manera de ordenar tanta creaciòn de proxies y crear
>> >> >>> proxies
>> >> >>> màs genèricos, y màs pequños por cierto, ya que los traits permiten
>> >> >>> componer
>> >> >>> los proxies (y nòtese que los proxies ya se podìan componer de
>> >> >>> antes
>> >> >>> de
>> >> >>> manera trivial).
>> >> >>
>> >> >> Estas seguro que estás hablando de proxies y no de mix-ins? El paper
>> >> >> "Traits: Composable Units of Behaviour" (que creo que es al que te
>> >> >> referís)
>> >> >> no habla de proxies para nada (por lo menos no lo encontre recien
>> >> >> haciendo
>> >> >> un search ni lo recuerdo de cuando lo leí hace rato ya...).
>> >> >
>> >> >
>> >> > Ah bueno es que es refácil impelemntar mixins con proxies. Pero el
>> >> > punto
>> >> > es
>> >> > para aquellos que no entienden traits. Lo chistoso es que no hay nada
>> >> > que
>> >> > entender. Si sabes proxies, ya sabes Traits. El código es
>> >> > irreconocible,
>> >> > estoy de acuerdo, pero al final es agregar conportamiento a una clase
>> >> > sin
>> >> > tocarla.
>> >> >
>> >> > ok, quizás te parece difícil la abstracción que estoy haciendo,
>> >> > porque
>> >> > de
>> >> > hecho la abstracción es lo único que se me hace fácil. Soy al revés
>> >> > de
>> >> > todo
>> >> > el resto de los mortales.
>> >> >>
>> >> >>
>> >> >>>
>> >> >>>
>> >> >>>>
>> >> >>>> 4) No es lo mismo el concepto de trait en Self que en Smalltalk,
>> >> >>>> por
>> >> >>>> eso
>> >> >>>> quizá la confusión con proxy... es así?
>> >> >>>
>> >> >>> No lo sè. Quizàs podrìas iluminarnos al respecto.
>> >> >>
>> >> >> Bueno, no es mi intención iluminar a nadie... comenté sobre lo que
>> >> >> quise
>> >> >> poner más arriba.
>> >> >
>> >> >
>> >> > En realidad lo interesante son los disagreements, porque generalmente
>> >> > en
>> >> > esos disagreements es dónde se encuentra el conocimiento. Me gustó
>> >> > eso
>> >> > de
>> >> > Self que comentaste. Si tienen resuelto el problema del objeto que
>> >> > llama
>> >> > self, entonce tal vez podríamos hacer un backport a Smalltalk (estoy
>> >> > asumiendo que todos saben que Self es algo así como una versión
>> >> > posterior de
>> >> > Smalltalk).
>> >> >
>> >> >
>> >> > ¿Alguien tendrá un mapa de los lenguajes de objetos así como se
>> >> > usaban
>> >> > hace
>> >> > 20 años para tener una visión general de todos los inventos que se
>> >> > han
>> >> > hecho
>> >> > sobre Smalltalk?
>> >> >>>
>> >> >>>
>> >> >>>>
>> >> >>>> 5) El encapsulamiento no solo se rompe en la subclasificación por
>> >> >>>> acceder a las variables de instancias sino por el hecho de poder
>> >> >>>> redefinir
>> >> >>>> comportamiento o utilizar super, etc.
>> >> >>>
>> >> >>>
>> >> >>> Pero si redefines comportamiento ¿lo haces en la clase base o en la
>> >> >>> derivada?
>> >> >>>
>> >> >>>>
>> >> >>>> Hacer estas cosas implica saber como está implementada la
>> >> >>>> superclase
>> >> >>>
>> >> >>>
>> >> >>> Si fuera asì, bastarìa con hacer que las variables de instancia no
>> >> >>> fueran
>> >> >>> visibles en las subclases. Crear acccessor como propuso alguien
>> >> >>> antes.
>> >> >>>
>> >> >>>>
>> >> >>>> y por lo tanto hace que las clases sean "cajas blancas" y no
>> >> >>>> "cajas
>> >> >>>> negras", por eso se dice que rompe el encapsulamiento....
>> >> >>>
>> >> >>>
>> >> >>> Mmhh, no es lo que leì. Si nada se rompe, ¿cuàl es el problema?
>> >> >>>
>> >> >>> Y si algo se rompe ¿què es? ¿la clase base o la derivada?
>> >> >>
>> >> >> No se rompe nada, es una analogía. Lo que sucede es que es posible
>> >> >> que
>> >> >> deje de funcionar algo que antes funcionaba.
>> >> >
>> >> >
>> >> > Ok, a eso se le llama en inglés "break". Y significa que algo dejó de
>> >> > funcionar.
>> >> >
>> >> > Es frustrante para un desarrollador de la clase X que deje de
>> >> > funcionar
>> >> > su
>> >> > clase porque la clase P fue actualizada y ahora ya no funcona.
>> >> >
>> >> > En el mundo de la ingeniería de software encontraron que lo mejor es
>> >> > correr
>> >> > pruebas de compatibilidad y  mantener la compatibilidad hacia atrás
>> >> > aunque
>> >> > el código sea inutilizable y en el mundo Java "deprecan" la clases.
>> >> >
>> >> > En el mundo Smalltalk crearon SUnit y diría que siguen el mismo
>> >> > patrón
>> >> > de
>> >> > comportamiento, mantienen lo mal para que todo siga fucionando, pero
>> >> > supongo
>> >> > que todos sabemos que Smalltalk no satisface LSP (Liskov Substitution
>> >> > Principle).
>> >> >>>
>> >> >>>
>> >> >>>
>> >> >>> Claramente la que se rompe es la clase derivada. Si la jerarquìa es
>> >> >>> muy
>> >> >>> profunda, se transforma en DLL hell, pero en este caso inheritance
>> >> >>> hell. Las
>> >> >>> clases base se vuelven intocables, sino trata de modoficar Object,
>> >> >>> por
>> >> >>> ejemplo agrègale una nueva variable de instancia y luego remueve
>> >> >>> otra,
>> >> >>> pero
>> >> >>> reemplaza los mètodos para que usen la nueva variable y que todo
>> >> >>> siga
>> >> >>> compilando. Apuesto a que se te congela la imagen, o al menos, te
>> >> >>> queda en
>> >> >>> un estado inconsistente.
>> >> >>
>> >> >> Bueno, en realidad no se puede agregar una variable de instancia a
>> >> >> Object
>> >> >> por motivos que no viene al caso comentar (y espero que no te lo
>> >> >> moleste si
>> >> >> no lo hago...)
>> >> >
>> >> >
>> >> > Claro, que el runtime no lo aguanta.
>> >> >
>> >> > No hay problema, gracias por la conversación interesante.
>> >> >
>> >> > ¿Dónde te mando la factura? ;-)
>> >> >
>> >> > --
>> >> > Saludos cordiales,
>> >> >
>> >> > Guillermo Schwarz
>> >> > Sun Certified Enterprise Architect
>> >> >
>> >> > >
>> >> >
>> >>
>> >>
>> >
>> >
>> >
>> > --
>> > Saludos cordiales,
>> >
>> > Guillermo Schwarz
>> > Sun Certified Enterprise Architect
>> >
>> > >
>> >
>> >>
>

--~--~---------~--~----~------------~-------~--~----~

To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]

http://www.clubSmalltalk.org
-~----------~----~----~----~------~----~------~--~---

Responder a