domingo, 30 de octubre de 2011

Reflexión sobre relaciones de Agregación y Asociación en UML Continuación

Relación Maestro-Esclavo:

Esta semana leí un documento que formaliza la relación tiene un, realmente era una formalización científica y estaba escrito en OCL (Object Constraint Language).

Lo interesante es que si nos detenemos en la relación maestro-esclavo, es una relación tiene-un, es decir, el maestro, en este caso, debe tener un esclavo porque si no entonces no es maestro.

Pero esta relación se refiere a mando, uno indica y el otro obedece. Sin embargo, analicemos esta situación: Digamos que tenemos un vaso, ahora le agregamos un dado. ¿El vaso tiene un dado?. Pareciera que si en el momento que sí en el momento en que tenemos el dado, pero si le quitamos el dado el vaso sigue siendo un vaso completo. Por lo tanto, el vaso no tiene un dado porque una condición de la relación tiene un es que si le quitas la parte al todo, el todo se destruye por la simple razón que pasa de ser todo a ser algo parcial, lo que constituiría una contradicción.

Ahora bien, el vaso con el dado es una relación maestro-esclavo porque a donde mueves el vaso mueve el dado, pero a donde mueves el dado no mueves el vaso (lo puedes mover dentro del vaso). Por herencia entonces si decimos la relación vaso-dado es maestro-esclavo y maestro-esclavo es tiene-un por transitividad la relación vado-dado es tiene-un. Entonces ¿Colocamos una agregación entre el vaso y el dado?.

La respuesta es no, porque para que el vaso comande al dado primero debemos agregarle el dado, es decir, el vaso ya existía antes de poseer el dado A la vez, un diagrama de clase es un diagrama estructural, muestra como se componen los objetos de los que son familia las clase. Por ejemplo, tenemos este vaso con el dado y le colocamos un vaso aparte, si decimos que el vaso tiene un dado entonces el otro no es un vaso pero es un contradicción porque realmente es un vaso.

En conclusión, un Diagrama de Clases muestra definiciones y porque un objeto mande a otro, no quiere decir que el objeto que manda tenga una agregación con el que obedece.

Muchas Gracias por su lectura.

Referencia al documento indicado inicialmente:


The Whole-Part Relationship in the Unified Modeling Language: A
New Approach

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.72.43&rep=rep1&type=pdf


domingo, 23 de octubre de 2011

Reflexión sobre relaciones de Agregación y Asociación en UML

Realizando un proyecto tuve un serio problema cuando tuve que decidir si una relación UML era de Agregación o Asociación.

Por ello estuve buscando por Internet, (ya saben Google). Entre las paginas que visite la que se destacó como casi siempre fue Stack Overflow (muy buen foro de preguntas).

En fin la respuesta que casi siempre obtuve fue la siguiente, una agregación es una relación entre un todo y sus partes en las que las partes pueden existir sin el todo, y una asociación, una relación débil entre las partes que indica que ambas colaboran entre sí.

Bueno a mi me parece que es una buena definición si estas creando una Ontología. Sin embargo, si lo que estas creando un diseño creo que pueden existir otras formas de pensar al respecto.

La clave a la solución me llegó cuando estaba desarrollando un modulo para crear una lista de estudiantes de un hipotético sistema de administración de exámenes.

Por ejemplo, digamos que queremos un Examen, que es mejor hacer:

Profesor.getExamen () o Estudiante.getExamen ()

Si hacemos Estudiante.getExamen () necesitamos primero la lista de todos los estudiantes, digamos Matricula.getEstudiante () y así encontramos los estudiantes, después de todo una matricula tiene un conjunto de estudiantes, luego seleccionamos un estudiante y decimos Estudiante.getExamen ().

Eso parece bien excepto por el hecho de que el estudiante pudo no haber asistido al examen, entonces tendríamos que pasar al siguiente estudiante y así sucesivamente.

Sin embargo si decimos Profesor.getExamen () pueden ocurrir dos cosas, una regresa null, pero eso indicaría que no existe aun el examen, o nos regresa el examen.

Esto me parece se debe a que quien tiene la responsabilidad de darnos el Examen es el Profesor, es decir a el es a quien se le pide el examen, ya sea para agendarlo y administrarlo posteriormente o para que el propio estudiante obtenga el examen si este es administrado por el propio profesor.

Ahora bien, es cierto que al principio el examen es en realidad un cuestionario, pero aún así a quien le debemos preguntar quien asistió o no al Examen es al administrados, no a cada estudiante

lunes, 5 de septiembre de 2011

¿Cómo leer un PDF en Linux sin una X Window por Consola?

Para leer un PDF en Linux usando directamente el Bash, es decir, sin un entorno de escritorio tenemos al menos dos
posibilidades (No descarto que haya otras).

En primer lugar, podemos utilizar el proyecto fbida este proyecto provee de
diferentes programas entre estos tenemos un visor de imágenes y un visor de pdf/postscript, los cuales funcionan usando el
framebuffer, es decir, sin entorno de escritorio.

Fbi permite ver imágenes y fbgs permite ver pdf.

Para instalarlo en Ubuntu 11 es muy sencillo:

sudo apt-get install fbi

Para ver un pdf se hace lo siguiente

sudo fbgs -c <ruta_archivo.pdf> Ej:
sudo fbgs -c ./archivo.pdf

Otra forma es convertir el archivo pdf a una colección de pagina html y verla con un explorador como elinks

Para instalar elinks use el siguiente comando:

sudo apt-get install elinks

Instalamos un conversor de pdf a html

sudo apt-get install pdftohtml

Convertimos el pdf en paginas html

pdftohtml <ruta_archivo.pdf>

Para leer el documento solo hay que usar el comando

elinks <ruta_archivo.html>

Es decir, si la ruta es:

./documento.pdf

Se abriría con

elinks ./documentos.html

Muchas gracias por su atención.
Disclaimer: El autor de este artículo no se hace responsable por el uso ni las consecuencias del uso que se haga de esta información. Actúe con cautela.