Sixto, una duda concreta, cuando dices:
"... luego cuando quisieras aplicarlo a un clip, solo se trataba de
regístralo a la biblioteca con registerClass."
¿Esto hace referencia a lo habla Peter Hall aquí:
http://www.peterjoel.com/blog/index.php?archive=2004_01_01_archive.xml#10755
0841406346131
que me recomendastéis el otro día, o hay otra manera?
¿Se pude asignar una clase a un elemento de la librería en ejecución? o sea,
¿puedo tener un clip vacio en mi librería y cambiarle o asignarle distintas
clases y attacharlo según me convenga, o esto es ciencia ficción (además de
una chapuza)?
Es que según el comentario de Moock, parece que no es muy seguro usar el
indocumentado  "__Packages..." .

Pregunto también lo mismo que Pedro:
¿Las conferencias no se ivan a colgar en algun sitio?

Javier, jajaja, sí, los Marxs controlaban de OOP más que yo, y la frasecita
tiene tela, pero es que estamos entrando en el terreno de la metafísica y me
dejo llevar. 8P

Gracias por el código, Cesar, que qué menos que  ser agradecido. Estoy
aprendiendo más esta semana que en los úlitmos seis meses (por lo menos
vocabulario 8-)

Y sigan, sigan ustedes discutiendo, que esto está cada vez más interesante.

Vaya pupurrí, no se que poner en el asunto... Bah, lo dejo como está.

Paulo.


----- Original Message -----
From: "Sixto Cantolla - AzulMedia" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Friday, May 28, 2004 12:43 AM
Subject: RE: [ASNativos] Re: Clase carga, LoadVars


> <-Esto cada vez se pone más dificil. ;)->
> Pues si, jejejejeje.
>
> <-
> Tal y como yo veo las cosas, el código tiene que estar determinado por la
> arquitectura, no por las funcionalidades concretas.->
>
> Bueno, realmente las funcionalidades concretas son lo que hacen útil a la
> aplicación. Los requisitos que ha de cumplir una aplicación son los que
> condicionan el desarrollo de la misma, ya que hay que cumplirlos, y
> precisamente estas funcionalidades son las que mandan. Aún así, insisto en
> que la OOP se definió como paradigma, por que podemos modelar mediante el
> lenguaje cualquier equivalente del mundo real, de manera que no es
cuestión
> tanto de definir la arquitectura según las funcionalidades, sino mas bien
> definir mediante el lenguaje una solución a un problema complejo. Como en
la
> vida real hay objetos que son similares y los cuales solo se diferencian
en
> unas pocas propiedades. Esto quiere decir que pueden tener una clase base,
y
> luego especializarlos mediante la herencia. De todas formas esta frase te
ha
> quedado algo confusa.
>
> <-Y nadie me va a convencer ( al menos por ahora ) de que es mejor
extender
> clases como String, y hacer que toda la arquitectura de tu aplicación
> actual
> ( y de las siguientes que desarrolles ) esté mediatizada por que ya no
> puedas utilizar "String" sino "miString" porque en determinado momento
> necesitaste implementar un método para eliminar las comillas de una cadena
> de texto. Y otra vez más, probablemente el de String sea el peor ejemplo
> para esto, pero piénsalo con MovieClip .->
>
> Esto desde luego que no es muy correcto, el que yo decida extender la
clase
> string con unas funcionalidades concretas no quería decir que yo me ate a
mi
> nueva clase, por que cuando hablo de extender, me refiero a herencia, y no
a
> modificación de los prototype, como creo que ya había quedado claro, de
> manera que una vez que extienda la clase string, tengo dos clases, la
String
> original que usare cuando no necesite las funcionalidades extra que le he
> añadido, y la clase myString, que hereda de string y que me da una serie
de
> ventajas cuando necesito realizar ciertas operaciones con la cadena que
> contiene.
> En el caso del Movieclip es exactamente igual, y esta igual de claro,
cuando
> yo tengo que especializar la clase base de movieclip, no estoy modificando
> la clase original, ya que exclusivamente heredo de ella, y de esa manera,
> consigo que las funcionalidades estándar me las gestione la clase
superior,
> y el efecto draggable me lo provee mi clase recién escrita. Sin embargo,
si
> hablamos de modificar el prototype, seguiría diciendo lo mismo, ya que aún
> en AS1 podías heredar de MovieClip y extenderla, sin necesidad de
modificar
> el objeto nativo de Flash, luego cuando quisieras aplicarlo a un clip,
solo
> se trataba de regístralo a la biblioteca con registerClass. Ya dije que es
> perjudicial modificar el prototypado de una clase ya desarrollada, pero si
> recomendable extenderla mediante herencia.
>
> <-Eso probablemente facilite la encapsulación, pero no facilita el
> mantenimiento, al menos desde mi punto de vista. ¿ Qué pasa si ahora
tienes
> que volver a extender "miString" ? ¿ O todas las cadenas de la aplicación
> tienen que ser instancias de la misma clase ? ¿ No es mejor hacer que
> determinadas funcionalidades sean externas a las clases nativas ?. Es
> exactamente el mismo caso que con la física de un movieclip.->
>
> Pues exactamente lo contrario, el mantenimiento se facilita, por que
cuando
> vas a modificar o mejorar algo, no tienes que hacer el seguimiento de las
> funcionalidades extras que tiene un objeto, ya que las contiene el mismo,
de
> hecho, tu modelo de desarrollo a mi me daría muchos quebraderos de cabeza,
> ya que mi primera intención al coger un código, es buscar las
> funcionalidades dentro de la clase, no en una clase externa, que puede que
> tenga muchas funcionalidades que a mi no me interesan en el nuevo
> desarrollo. Desde luego si quiero especializar aún mas miString, no hay
> ningún problema, al final tendré tres clases con una finalidad distinta,
que
> es para la que han sido diseñadas, en ningún momento veo el problema de
> volver a extender una clase ya extendida (refiriéndome a herencia de
clases,
> no a modificación del prototipado), realmente es para lo que apareció OOP,
> para la reutilización de las clases mediante la herencia, no tiene otra
> razón de ser.
>
> <-En cuanto a la comparación con Java, que es algo que parece que
> últimamente
> hemos tomado todos con muchas ganas, no es válida. Esto no es Java, y no
lo
> será, espero que nunca. Creo que alguna que otra vez hemos discutido
> también
> sobre eso por aquí. Y recordemos también que en flash el compilador te
> puede
> decir lo que quiera, y que tú puedes hacer en tiempo de ejecución lo que
te
> dé la gana. Y eso no es ni mejor ni peor. Es así, simplemente.->
>
> La comparación con Java, sencillamente venia a colación respecto a OOP,
como
> lenguaje completamente OOP y que sigue unas especificaciones rígidas al
> respecto, podía decirte lo mismo de c#, c++, etc.. no es que para mi sea
una
> moda. Y evidentemente no es Java, por que sino no se llamaría Flash, pero
si
> sigue las bases de la OOP, y si tu quieres realizar un buen diseño de
> software, habrás de acotarte a las normas de la OOP, que no están así por
> capricho, sino por que facilitan el desarrollo de las aplicaciones.
> En cualquier lenguaje es el compilador el que emite los avisos, y
> posteriormente en ejecución no se realizan casi ninguna
comprobación(excepto
> en lenguajes interpretados), la única diferencia es que el compilador de
> otro lenguaje no te pasa ningún código que no cumpla las normas, mientras
> que flash si esta escrito en sintaxis de AS1 te lo pasa y puedes trampear.
> El que sea así, no quiere decir que no sea peor. Yo siempre me quejé de
> flash por que no controlaba si el tipo de una variable coincidía con lo
que
> le asignabas, no por que me guste que lo haga, sino por que al final tenia
> problemas de asignación que hasta que lograba depurar me volvía loco. La
> implementación en flash del tipado fuerte, es un paso adelante en el
> lenguaje, ya que lo hace mas robusto y mas accesible a la gente (evita
> errores de bulto, que de otra forma serian difíciles de localizar).
>
> <-Sobre mi ejemplo del clip draggble. Yo no he hablado de métodos
> estáticos.
> Simplemente, la funcionalidad de hacer el clip draggable y de interactuar
> con el resto de objetos del escenario no puede estar implementada en el
> propio clip. El hecho de no estarlo, no sólo no rompe la encapsulación,
> sino
> que la aumenta, ya que el mundo del juego no sabe ( porque no tiene porqué
> saberlo ) ni qué se está moviendo, ni porqué, ni sobre todo, de qué
manera.
> Precisamente, este caso está determinado por la arquitectura global del
> proyecto. Más aún, está motivado porque ese elemento draggable ha de ser
> común al menos a cinco juegos distintos ( pero totalmente distintos ).->
>
> Vuelvo a discrepar al respecto, no aumenta la encapsulación de ninguna de
> las maneras el hecho de que se implementen funcionalidades que son
> responsabilidad de un objeto fuera de él, ya que estas cargando a otro
> objeto con responsabilidades que no son suyas.
> El encapsulamiento de una clase consiste en que esta expone una serie de
> métodos para acceder a los datos, ocultando a cualquiera el como se tratan
> los datos internamente, quiere decir que se ha de comportar como una caja
> negra, sabemos como hacerla funcionar, pero no sabemos como funciona, esto
> favorece la reusabilidad de una clase por motivos evidentes.
> En el caso de un coche y de un conductor, la responsabilidad del
movimiento
> es del coche, aunque el conductor sea el que active ese movimiento, de una
> forma gráfica, seria absurdo que el conductor tuviera que empujar el coche
> para que se moviera, es el coche que tiene motor el que se encarga de
> moverse, siendo responsabilidad del conductor accionar el movimiento y
> llevar la dirección. En el caso de tu objeto que es dragable, es
exactamente
> igual. El mundo del juego no tiene ni que saber que ese objeto es
dragable,
> eso lo sabe solo el mismo, ya que es su responsabilidad.
> Acerca de la comunicación con el juego de ese objeto usaré otro ejemplo,
> también de conductores. Si alguien que conduce quiere avisar a otro
> conductor de que está ahí, para no sufrir un accidente, de manera que
> utilizara el pito (método interno de la clase), que emite un sonido que se
> propaga por el aire (clase externa de comunicación), y los que estén cerca
> les llegará el sonido llamando su atención (conductores suscritos al aire
> cercano al conductor). al que le corresponda, le prestará atención y
> realizara una acción, y al que no dejará pasar el mensaje. Evidentemente
en
> este caso la comunicación es responsabilidad del aire, aunque el acto de
> comunicar algo le corresponde al conductor. Espero que quede claro lo que
> quiero decir.
>
> <-Sobre el XMl, no veo porqué el parseo tiene que ser responsabilidad de
> dicho
> objeto. ¿ Y si se carga un XML de disco para luego enviarlo a otro
servidor
> ? ¿ Y si lo que quiero es cargar cinco árboles XML con estructura
> totalmente
> distinta ? ¿ Tengo que extender 5 veces la clase XML ?. Precisamente, en
> este caso, una vez más, es la arquitectura la que marca el camino a
seguir.
> ¿ Porqués está mal planteada la aplicación por el hecho de que una clase
> cargue un XML, y devuelva su contenido, en forma de XMLNode a otra clase
> distinta ?->
>
> No tiene que estar necesariamente mal el que una clase cargue el contenido
y
> lo devuelva a otra clase, lo que no es recomendable es que uses LoadVars
sin
> haberlo extendido cuanto menos, para que tenga una propiedad que apunte a
la
> clase que lo agrega, de esta manera no violas ningún principio de OOP,
> aunque puedas hacerlo, al fin y al cabo hablamos de como se realiza un
buen
> diseño de software y no como se pueden hacer las cosas.
> De todas formas, en el caso de que se cargue un XML de disco y se envie a
un
> servidor, extendería XML de la misma manera, ya que sería la clase de
> comunicaciones y seria su responsabilidad recuperar el XML, comprobar que
> esta bien formado y enviarlo al servidor. Al respecto del segundo ejemplo,
> pues si es una posibilidad extender 5 veces la clase XML modificando el
> método onload, para parsear el contenido, al fin y al cabo, donde mejor
> tratar un XML que dentro del objeto que lo contiene, para después
exponerlo
> a la clase que va a contener el modelo de datos, a no ser que vayas a usar
> directamente el XML, caso de algunos componentes, en el que el modelo
espera
> esa estructura, y la usa sin transformarlo a otro modelo de datos. Aunque
> eso si, hay que tener claro que todo depende de como asignes las
> responsabilidades.
>
> <-En cuanto a la pregunta y la respuesta, no SON un movieclip. Se
presentan
> utilizando un MovieClip, que es algo totalmente distinto. Me sorprende que
> tú, que hablas de acoplamiento, me propongas hacer que un movieclip, como
> elemento de presentación, contenga en sí mismo también datos que no son
> propios de la presentación. Aunque se pueda hacer, el MovieClip no está
> para
> eso.
>
> mcTextClip agrega MC.
>
> Implementa un interfaz de comunicación con el resto del juego, por lo que
> para el juego todo es transparente y está perfectamente encapsulado.->
>
> Bueno, la separación de vista, modelo y controlador o vista, modelo y
> presentador es un patrón, de manera que no necesariamente en tu ejemplo se
> tiene que adscribir MovieClip a la vista ya que no dijiste que se tuviera
> que implementar bajo un patrón MVC, de todas formas por la formulación que
> tenias en tu ejemplo, asignabas al mismo objeto la responsabilidad de dar
> funcionalidad extra al movieclip, contener los datos y reaccionar a los
> eventos del MovieClip, por ello te hice el planteamiento.
> Aún utilizando en tu aplicación de forma general el patrón, no estaría
mal,
> ya que realmente estamos hablando de una presentación casi puramente, y
los
> datos aunque los contenga es para su uso propio en la representación, el
> encargado de desplegar las preguntas y respuestas seria el que se
comunicara
> con el modelo de datos y pasara los datos necesarios a cada pregunta y
> respuesta.
> Aún así, y si quisiéramos implementar dentro del mini control el patrón
MVC,
> casi seria mas sencillo, y el MovieClip seguiría heredando la
funcionalidad
> extra. Mi planteamiento entonces seria:
>
> QuestionViewer extends MovieClip =Responsabilidades:
> fade
> la modificación del color del texto
> habilitación/deshabilitación del click de ratón).
> Propiedades:
> Añade una propiedad que lo comunica con el controlador
>
> QuestionController = Responsabilidades:
> Instanciar el Viewer
> Instanciar el model (dependiendo de que tipo sea pregunta o respuesta)
> Traslada una referencia del modelo a la vista, para que esta pueda
> consultarlo directamente.
>
> AskModel = Responsabilidades:
> Contener la información específica a esta pregunta y servirlas cuando
> es pedida.
> Almacenar el color del texto.
>
> AnswerModel extends AskModel = Responsabilidades:
> Añade la información que no es compartida con AskModel.
>
> Aún usando la primera solución, no existiría alto acoplamiento, ya que el
> alto acoplamiento se da normalmente cuando un objeto ha de saber
demasiados
> detalles internos de otro para su funcionamiento, es decir, rompe el
> encapsulamiento de otro objeto. Como es una sola clase, es difícil que no
> haya alto acoplamiento, ya se sabe, conócete a ti mismo, jejejejejee.
>
> <-¿ Ves cómo sí podemos discutir sobre esto durante días ?->
>
> Claro que si, y eso redundara en que ambos mejoremos en nuestro trabajo
> diario, lo preocupante es que no discutiéramos sobre el tema, así que
espero
> tu respuesta, jejejeje.
>
> Un saludo,
>
> Sixto
>
>
> ----------------------------------
> Lista ASNativos:[EMAIL PROTECTED]
> http://www.5dms.com/listas
> ----------------------------------
>
>


----------------------------------
Lista ASNativos:[EMAIL PROTECTED]
http://www.5dms.com/listas
----------------------------------

Reply via email to