Patrón builder

Como Patrón de diseño, el patrón builder (Constructor) es usado para permitir la creación de una variedad de objetos complejos desde un objeto fuente (Producto), el objeto fuente se compone de una variedad de partes que contribuyen individualmente a la creación de cada objeto complejo a través de un conjunto de llamadas a interfaces comunes de la clase Abstract Builder.

A menudo, el patrón builder construye el patrón Composite, un patrón estructural.

Intención: Abstrae el proceso de creación de un objeto complejo, centralizando dicho proceso en un único punto, de tal forma que el mismo proceso de construcción pueda crear representaciones diferentes.

Diagramas de secuencia

Una vez ya están modeladas gran parte de las interfaces, es hora de darle un poco de estructura y lógica al proyecto, para aclarar un poco las ideas estoy realizando diagramas de secuencia que es el nombre que toma la técnica de Message Sequence Chart en UML.

De momento, he definido los escenarios de:

  • Crear pregunta.
  • Crear pregunta con error al introducir los datos.
  • Crear vocabulario.
  • Crear término.
  • Editar vocabulario.
  • Editar término.

Los diagramas los estoy creando con NetBeans 6.0.1, según la especificación UML 2.0 o al menos eso dice NetBeans…

Activation boxes, or method-call boxes, are opaque rectangles drawn on top of lifelines to represent that processes are being performed in response to the message.

Patrones de diseño

Los patrones de diseño (design patterns) son la base para la búsqueda de soluciones a problemas comunes en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces.

Un patrón de diseño es una solución a un problema de diseño. Para que una solución sea considerada un patrón debe poseer ciertas características. Una de ellas es que debe haber comprobado su efectividad resolviendo problemas similares en ocasiones anteriores. Otra es que debe ser reusable, lo que significa que es aplicable a diferentes problemas de diseño en distintas circunstancias.

Refactoring Day

La semana pasada ya comencé a ver que el código comenzaba a desbordarme, aprovechando el cambio que tiene que sufrir el código para adaptarlo a las taxonomías de vocabularios y términos, he estado realizando un diseño de clases para desacoplar las tareas de las diferentes capas y aplicar el patrón MVC (Modelo-Vista-Controlador). También he realizado algunos pequeños cambios para que el código sea más legible, pero todavía le he doy vueltas al diseño de clases, nada me convence. Espero aclarar las ideas mañana.

Por otra parte, como son muchas las tareas que uno puedo hacer en un proyecto “grande”, he echo una pequeña prueba de plantilla XSL para html, poca cosa, tengo todavía mucho trabajo por hacer, mirar como se crean diversos elementos en html, las plantillas CSS, etc.

Taxonomía de vocabularios

Como comenté en el anterio post, quería cambiar la taxonomía de las preguntas de las antiguas categorías a utilizar vocabularios al estilo de Drupal. Echándole un ojo a las tablas de la base datos de Drupal 5 y haciendo algunas pruebas, he obtenido una versión adaptada para este proyecto. Aquí os pongo un diagrama de clases (ya que utilizo el ORM sqlobject) de como quedaría esta taxonomía en la base de datos. La multiplicidad en las relaciones entre clases no aparece pero es fácilmente deducible observando los atributos de cada clase. Además comentar, que en la base de datos en la relación muchos a muchos obviamente se crea una tabla nueva (questions-terms) que no aparece en el diagrama.

De categorías a vocabularios

Hasta el momento, la forma de ordenar de algún modo las preguntas era mediante categorías, se podían añadir preguntas a una categoría, moverlas entre categorías, feature” que también estaba implementada de forma persistente mediante las tablas y relaciones necesarias en la base de datos.

Se ha replanteado la idea, y se va a implementar algo parecido (adapta a las necesidades) a la taxonomía que utiliza Drupal para clasificar nodos.

Fase Final Concurso SL C-LM

Ayer se celebró la fase final del concurso de software libre de Castilla – La Mancha, en la Escuela Superior de Informática de Ciudad Real. La presentación de proyectos comenzó de forma puntual a las 10, se presentaron cinco proyectos:

  1. Funny Box
  2. ICUM
  3. Quixo3D
  4. Thoro
  5. Sistema integrado para el soporte a la docencia

Después se hizo una pausa para el café, en el que dispusimos de un catering traído por la organización 🙂 que nos sirvió para ir conociéndonos entre los concursantes.

Más tarde, hubo dos talleres: uno de Joomla y otro de ataques Web. Mientras tanto, como íbamos con algo de retraso, se presentó el proyecto restante: Zero

Los participantes, profesores coordinadores, colaboradores de talleres y la organización fuimos a comer a un hotel cercano a la Escuela (no daré nombres para no hacer publicidad :P).

A las 4 de la tarde volvimos con los eventos del concurso:

  • Virtualización con XEN
  • Taller Introducción a la Programación de Videojuegos.

Yo estuve en el taller de programación de videojuegos, pero por problemas de configuración de la red en la sala, no se pudo llevar a cabo con normalidad, dio tiempo a ver la mitad de lo esperado, pero estuvo curioso. De los demás talleres no os puedo comentar nada, ya que no estuve.

Para finalizar sobre las 17:20, se entregaron los premios, yo no pude estar más sorprendido cuando el primer premio que se mencionó en la sala fue para mí 😀

La experiencia fue muy buena para fomentar el uso del software libre y para conocernos entre los participantes. Los participantes de ICUM, trajeron un buen número de fans y pudieron hacer fotos y vídeos del evento, así que si queréis información visual dirigiros a su página. Por último, sólo me queda decir: ¡Enhorabuena a los ganadores!