Lo que propongo en este videotutoral no es específicamente un nuevo paradigma de programación, sino nuevos patrones de diseño para el paradigma orientado a objetos.
Estos patrones los probé en algunos juegos que desarrollé en este mes, y la verdad es que me fueron bastante útiles.
Lo que permite es:
- Unificar las funciones estáticas con las funciones públicas de una clase
- Optimizar las variables temporales
- Conversión dinámica de objetos
- Código más flexible
Archivos del tutorial
Por lucasmoyano el 12 de Diciembre de 2011
Hay varias clases que para hacer algo en particular tienes que llamar a una función estática de la misma, y no a una función pública. El patrón de diseño que propongo une las funciones publicas con las funciones estáticas por medio de un singleton, permitiendo utilizar las funciones públicas de una clases como si fueran estáticas o viceversa.
Por ejemplo, la clase Point tiene la funcion estática "distance" para calcular la distancia entre dos puntos:
Código :
Si yo quisiera que se pueda calcular la distancia como una funcion publica y tambien como estática, tendrían que coexistir 2 funciones que hacen lo mismo:
Código :
Pero si utilizo un singleton puedo hacer esto mismo declarando solo las funciones publicas, sin necesidad de hacerlas estaticas.
Si tengo los dos puntos:
p1.distance(p2);
Y si tengo un solo punto, y quiero calcular la distancia que hay entre este y otro temporal:
Código :
Además se puede usar ese singleton como variables temporales:
Código :
Por alfathenus el 12 de Diciembre de 2011
Ante todo muchas gracias por compartir esto con toda la gente =D
Con respecto a lo que propones, es muy similar a lo que provee un patron Factory de GoF. Hay una modificacion del Factory q usualmente se llama Simple Factory y q su objetivo (a muy grandes rasgos) es crear instancias de objetos por medio de una funcion tipificada. Puedes ver un ejemplo aca: http://en.wikipedia.org/wiki/Factory_method_pattern
En cuanto a la funcion distance() de Point. No es para nada necesario q sea de instancia ya q su ejecucion no modifica el estado interno del objeto. Esta bien q sea estatico, o incluso q sea una funcion de package.
A mi parecer, no hace falta tener un Singleton dentro de esa clase. Si se puede hacer:
dis:Number = GPoint.con(6,6).distance(GPoint.con(50,6));
Yo modificaria tu clase llevandola para el lado de implementar el patron Factory: (fijate q por lo gral cuando se usan estos tipos de patrones, se los referencian en el nombre de la clase asi es entendible por todos)
new FactoryPoint()
...
function create(...):Point {}
La funcion create() recibe cualquier tipo de parametro. Dentro de ella verficas los argumentos y llamas al constructor correcto. De esta manera tenes 1 solo constructor (igualmente, podes dejar publicos los demas constructores), y podes hacer lo siguiente:
FactoryPoint.create(5,6);
FactoryPoint.create(mySprite);
FactoryPoint.create(myPointInstance);
Saludos!!!
Por lucasmoyano el 13 de Diciembre de 2011
gracias por la respuesta =)
Por Otaku RzO el 13 de Diciembre de 2011
El uso de Singleton ayuda a tener solo una locación en memoria a diferencia de tener variables ocupando distintas locaciones en memoria conforme se vayan creando, esperando a que el Garbage Collector liberé esos espacios cuando ya no estén en uso. Entonces podemos decir que ocupas bloques de memoria fijos con el Singleton que siempre usarás que resultará ser bueno en cierto casos.
Solo hay que tener cuidado de no abusar de los Singletons porque hace perder coherencia al código pensando en que es la mejor baraja que tenemos a la hora de programar y a veces los hacemos mutar pensando en que podemos usarlo siempre para contener casi todas nuestras variables temporales y funciones estáticas.
Es recomendable siempre apoyarse en estándares pre establecidos como, en este caso, otros patrones de diseño, además que el código será más legible y otros programadores podremos entender tu código sin necesidad de mucha explicación ya que es un estándar.
Gracias por tus videotutoriales .
Por lucasmoyano el 13 de Diciembre de 2011
Por petochis el 13 de Diciembre de 2011
Por Maikel el 13 de Diciembre de 2011
Design Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma
Debe haber una versión en español, es algo viejo, pero yo tengo la versión en ingles, es como una biblia para los programadores.
Por lucasmoyano el 13 de Diciembre de 2011