Nessi: modelo singleton
En el último post sobre Nessi, comentaba que había decidido ir montando Nessi sin usar el modelo singleton, sino a base de unas instancias globales, por resultar más cómoda su llamada. Esto traía, a parte del que el usuario podría declarar instancias sin ningún problema, otra serie de problemas por los que he tenido que volver al planteamiento inicial del modelo singleton, para aquellas clases que han de ser únicas y accesibles desde cualquier parte del programa. Y eso de singleton, qué es?
La wikipedia (como de costumbre, je,je,je…), en este artículo, lo explica muy bien. Como reza el enlace, es una forma de lograr que sólo haya una instancia de una determinada clase en ejecución. Para lograrlo.. hay que meter en constructor de la clase dentro de la parte privada, para que sea la propia clase desde dentro quién cree la instancia y, si ya está creada, devuelva su dirección. El proceso encargado de realizar esta tarea será otra función, esta vez pública, en el caso de Nessi, static Nessi* GetNessi();. Para acceder a sus miembros… se hace algo como Nessi::GetNessi()->miembro. Para evitar escribir tanto, en cada función miembro de las otras clases que hacen uno de ella o en el propio programa principal, uso variables locales.
Nessi *nessi_local;
nessi_local=Nessi::GetNessi();
Y luego ya trabajo con nessi_local, haciendo referencia del mismo modo que antes, nessi_local->miembro;.
Con el cambio de filosofía, me sigo ahorrando el paso de parámetros (el miembro screen de Nessi, por ejemplo, es accesible desde cualquier punto del programa y de la propia librería, al igual que el sistema de log, el de tiempo, el de efectos especiales….), siendo cómodo y teniendo más control sobre el asunto.
Así que, con un nuevo camino abierto, queda seguir migrando / implementando las clases y funciones… La documentación estará basada en la que genera un programa llamado doxygen… (google :)), sino recuerdo mal open source. Genera HTML y varios formatos más en modo muy guapete (organizado y vistoso), muy recomendado..
pd.- Hasta después del deadline del proyecto con UC, no tenía pensando seguir con Nessi.. pero el otro día tuve un ratillo muerto…. así que me puse a probar, funcionó… y migré lo básico al nuevo modelo. Para la semana que viene, publicaré una pequeña (realmente pequeña) demo… un par de fades, algún efecto de sonido y poco más… todavía queda bastante curro para sacar una versión estable… pero bueno… coincidiendo con el rule de esa demo a los compañeros de curro….