Archive for March, 2007

UML – Relaciones entre clases

La relación entre dos clases se representa mediante una linea que las une. Si la línea no termina con una flecha (en ninguno de sus extremos) la relación es bidireccional, es decir, ambas clases saben de la existencia de la otra.

Tipos de relaciones

Generalización
UML - Generalization
Es ni más ni menos que un sinónimo de “Herencia”. También se lo llama “Especialización”.

public class Author extends Person
{
    //...
}
Dependencia
UML - Dependency
Es una relación semántica entre dos elementos. Un cambio en el elemento independiente puede afectar al elemento dependiente. Indica que una clase usa otra en alguno de sus métodos, pero esta última no forma parte estructural de la clase que la utiliza.

import Author;

public class Files
{
    public int getFilesByAuthor(Author author)
    {
        //...
    }
}
Asociación
UML - Association
Significa que una clase está constituída por otra. Es decir, estructuralmente una clase incluye uno o más objetos de otra clase. Aquí existen dos tipos, dependiendo de la forma que incluyamos un objeto dentro de otro:

Composición
UML - Composition
El objeto incluído es pasado por valor. Se trata de una relación estática, donde el tiempo de vida del objeto incluído depende del objeto que lo incluye. Si este último es destruído, también será destruido el objeto incluído.

import Date;

public class File
{
    private Date time = new Date();
}
Agregación
UML - Aggregation
El objeto incluído es pasado por referencia. Esta es una relación dinámica, donde el tiempo de vida del objeto incluído no depende del objeto que lo incluye. El objeto incluído puede seguir existiendo si el que lo incluye es destruído.

import File;

public class Files
{
    private File[] files = null;
    private int pointer = -1;

    //..

    public File getLast()
    {
        if (this.pointer >= 0)
        {
            return this.files[this.pointer--];
        }
        return null;
    }

}

Multiplicidad de las asociaciones

Determina cuántos objetos de cada tipo intervienen en la relación. Es el número de instancias de una clase que se relacionan con UNA instancia de otra clase.

  • Cada asociación tiene 2 multiplicidades (una por cada extremo de la relación)
  • La multiplicidad se indica mediante un mínino y un máximo
  • Cuando la multiplicidad mínima es 0, la relación es opcional
  • Una multiplicidad mínima mayor o igual a 1 establece una relación obligatoria
Multiplicidad Significado
1 Uno y sólo uno
0..1 Cero o uno
n..m De n a m
* Cero o más
0..* Cero o más (idem anterior)
1..* Uno o más

Interfaces

La implementación de una interfaz se representa con una linea terminada en un círculo, seguido del nombre de dicha interfaz:
UML - Interface

Ejemplo

Este es un ejemplo de diagrama de clases hecho con Día:

UML - Class Diagram
Click en la imagen para ver el diagrama completo

Tags:

El mensaje de Vista: ¡Actualice ya a GNU/Linux!

Visto en la lista de correos de Free Software Foundation Europe

Recientemente se ha criticado a Microsoft por algunas de sus decisiones respecto al sistema operativo Microsoft Vista, que amenaza nuestros valores democráticos y sociales fundamentales.

«Desafortunadamente, muchos de los artículos y afirmaciones acerca de los problemas con Microsoft Vista no son realmente específicos de Vista. Muchos problemas similares existen en cualquier software privativo», dice Georg Greve, presidente de la FSFE. «Desde que se fundó la primera FSF en 1985, las Fundaciones para el Software Libre lo han entendido y han trabajado en contra de las amenazas que el software privativo representa para nuestra sociedad».

Y continúa: «Dado que estos peligros se entienden más ampliamente hoy en día, hemos visto en los últimos años un cambio sin precedentes hacia el Software Libre por parte de gobiernos, usuarios y compañías. A medida que el software privativo ejerce un mayor control del usuario, más personas están empezando a buscar alternativas».


Read more »

Tags:

Consultas XPath desde la línea de comandos

Existe una aplicación llamada

xmlstarlet

que permite hacer consultas XPath a archivos XML.

Supongamos el siguiente archivo XML, al cual llamaremos libro.xml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<xml version="1.0" encoding="UTF-8">

<libro>

<titulo>Patas arriba<titulo>
<autor>Eduardo Galeano</autor>

<capitulo num="1" titulo="La escuela del mundo al revés">
    <seccion num="1" titulo="Educando con el ejemplo">
        <parrafo destacado="si">La escuela del mundo al revés es la más democrática de las instituciones educativas.</parrafo>

        <parrafo>El mundo al revés premia al revés.</parrafo>
    </seccion>

    <seccion num="2" titulo="Los alumnos">
        <parrafo destacado="si">Día tras día, se niega a los niños el derecho de ser niños.</parrafo>
      <parrafo>En el océano del desamparo, se alzan las islas del privilegio.</parrafo>
    </seccion>
</capitulo>

<capitulo num="2" titulo="Cátedras del miedo">
    <seccion num="1" titulo="La enseñanza del miedo">
        <parrafo destacado="si">En un mundo que prefiere la seguridad a la justicia, hay cada vez más gente que aplaude el sacrificio de la justicia en los altares de la seguridad.</parrafo>
        <parrafo>A mediados de 1982, ocurrió en Río de Janeiro un hecho de rutina: la policía mató a un sospechoso de hurto.</parrafo>
    </seccion>

    <seccion num="2" titulo="La industria del miedo">
        <parrafo destacado="si">El miedo es la materia prima de las prósperas industrias de la seguridad privada y del control social.</parrafo>
        <parrafo>"Nuestra mejor publicidad son los noticieros de la televisión", dice, y bien sabe lo que dice, uno de los especialistas en la venta de seguridad.</parrafo>
    </seccion>

</capitulo>

</libro>

Consultas

Obtener el título del libro:

xmlstarlet select -t -v //titulo libro.xml

Obtener el capítulo 1:

xmlstarlet select -t -v "//capitulo[@num='1']" libro.xml

Obtener el capítulo 2:

xmlstarlet select -t -v "//capitulo[2]" libro.xml

Obtener el capítulo 2 usando last():

xmlstarlet select -t -v "//capitulo[last()]" libro.xml

Obtener la sección 1 del capítulo 2:

xmlstarlet select -t -v "/libro/capitulo[@num='2']/seccion[@num='1']" libro.xml

Obtener los párrafos que contienen algún atributo:

xmlstarlet select -t -c '//parrafo[@*]' libro.xml

Obtener los párrafos no destacados del capítulo 1:

xmlstarlet select -t -c "/libro/capitulo[@num='1']//parrafo[not(@destacado)]" libro.xml

Parámetros

Syntax for templates: -t|--template <options>
where <options>
  -c or --copy-of <xpath>         - print copy of XPATH expression
  -v or --value-of <xpath>        - print value of XPATH expression
  -o or --output <string>          - output string literal
  -n or --nl               - print new line
  -f or --inp-name         - print input file name (or URL)
  -m or --match <xpath>           - match XPATH expression
  -i or --if <test-xpath>              - check condition <xsl:if test="test-xpath">
  -e or --elem <name>            - print out element <xsl:element name="name">
  -a or --attr <name>            - add attribute <xsl:attribute name="name">
  -b or --break            - break nesting</xsl:attribute></name></xsl:element></name></xsl:if></test-xpath></xpath></string></xpath></xpath></options></options>

Sitio oficial: XMLStarlet Command Line XML Toolkit

Tags: , ,

Webserver en Java

Se trata de un sencillo servidor web que hice recientemente, en Java. Sus características son:

  • Maneja Theads, lo que le permite atender peticiones simultáneas
  • Sirve los siguientes tipos de archivos: html, xml, css, js, txt, ico, png, gif, jpg y pdf
  • Implementa los dos errores más comunes: 404 y 403
  • Lleva un registro de logs al estilo combined de Apache
  • Tiene una salida por consola de cada petición hecha, con los mensajes enviados durante el Request

Código fuente: webserver-java.tar.gz

Tags: ,

Orisinal

Orisinal es un sitio de juegos hechos en Flash. Se trata de juegos simples, donde la belleza radica en la delicadeza de las imágenes y la música elegida: una combinación casi poética.

Esta es una imagen de High Delivery, uno de los juegos disponibles en el sitio, en el cual el objetivo es recoger flores que caen del cielo. Esto lo lograremos soplando aire sobre el globo encima de la botella y haciendo que esta vaya de un lado a otro recolectando flores mientras continúa su ascenso hasta las nubes.

Captura de pantalla de High Delivery, uno de los juegos de Orisinal

Tags: , ,

A self portrait by Lasse Gjertsen

Más en YouTube.

Tags: ,

El que existan bases de datos es un síntoma de que hay algo mal

Escrito por: Diego Calleja

Hans Reiser intentó hacer evolucionar los sistemas de archivos a algo nuevo, que solucionara los problemas que hay en los sistemas de hoy. Una de sus frases que más me gusta es: “el que existan bases de datos es un síntoma de que hay algo mal”, o algo así. Tomemos por ejemplo el Spotlight de Apple, Beagle o “Google desktop search”. Todos ellos buscadores de escritorio. ¿Cual es su objetivo? Básicamente e ignorando el problema de los formatos, hacer “grep” en tus datos. Para poder hacerlo, ¿que se hace? Se construye un indice en un archivo. Es decir, se hace un índice de los datos que ya tienes en el sistema de archivos. Y las bases de datos, ¿qué son? En esencia, sistemas de archivos: tienen un espacio, y en el organizan datos y los devuelven cuando se les pide con una interfaz diferente a los jerárquicos. Para mas inri, normalmente las bases de datos tienen sus archivos en otro sistema de archivos: Es decir, para atender una búsqueda tienen que manejar las estructuras de su sistema de archivos y despues hacer peticiones a otro sistema de archivos.

Hans Reiser tenía una visión: Un sistema de archivos ‘genérico’ capaz de funcionar como sistema de archivos jerárquico, como base de datos, y que fuera capaz de hacer búsquedas como las que hace spotligth, pero sin tener que indexar nada: Los datos están en el sistema de archivos, ergo el sistema de archivos debería saber buscar mejor que nadie la informacion sin necesidad de hacer un índice adicional de esos mismos datos. Idem para las bases de datos. Quería buscar una interfaz genérica capaz de hacer todo tipo de consultas. No se puede negar: Puede que reiser4 no fuera la implementación adecuada de esa idea (entre otras razones, por ser de los primeros sistemas de archivos que lo implementan y estar avanzando en territorio desconocido), pero la idea era (es) genial.

Hans mató a Nina

Noticia publicada el 9/3/2007: Hans Reiser culpable de asesinato

Relacionada: “Use ReiserFS or I will F’n kill you”

Tags: ,