Archivos de Agosto, 2008

Tutorial. Qué es un paquete

26 de Agosto de 2008

Un paquete es un espacio de nombres que organiza un conjunto de clases e interfaces relacionadas. Puede pensar en los paquetes como algo similar a las diferentes carpetas de su ordenador. Puede tener guardadas páginas HTML en una carpeta, imágenes en otra y scripts y aplicaciones en otra distinta. Puesto que un software escrito en el lenguaje de programación Java puede llegar a consistir de cientos o miles de clases individuales, tiene sentido que se organicen las clases e interfaces relacionadas en paquetes.

La plataforma Java proporciona una enorme biblioteca de clases (un conjunto de paquetes) adecuado para usar en sus propias aplicaciones. A esta biblioteca se la conoce como la Interfaz de Programación de Aplicaciones (Application Programming Interface en inglés) o por su abreviatura API. Sus paquetes representan las tareas más comunes asociadas a la programación en general. Por ejemplo, un objeto String contiene estado y comportamiento para cadenas de caracteres («character strings»); un objeto File permite a un programador crear, eliminar, inspeccionar, comparar o modificar un archivo en un sistema de archivos; un objeto Socket permite la creación y uso de sockets de red; otros objetos de interfaz gráfica («GUI») controlan botones, cajas de selección y cualquier otra cosa relacionada con las interfaces gráficas de usuario. Literalmente hay miles de clases de las que elegir. Esto le permite al programador enfocar sus esfuerzos en el diseño de la aplicación, más que en la infraestructura requerida para hacerla funcionar.

La Java Platform API Specification contiene el listado completo de todos los paquetes, interfaces, clases, campos y métodos proporcionados por la Plataforma Java 6, edición estándar (Java Platform 6, Standard Edition). Cargue esta página en su navegador y añádala a sus marcadores o favoritos. Siendo programador se convertirá en su documentación de referencia más importante.

 

Tutorial. Qué es un interfaz

25 de Agosto de 2008

Como ya ha aprendido, los objetos definen su interacción con el mundo exterior a través de los métodos de que exponen. Los métodos forman la interfaz del objeto con el mundo exterior; por ejemplo, los botones que hay en la parte frontal de su televisor forman la interfaz entre usted y el cableado eléctrico al otro lado de la caja de plástico. Debe pulsar un botón para encender y apagar el televisor.
En su forma más común, una interfaz es un grupo de métodos relacionados con cuerpos vacíos. El comportamiento de una bicicleta, si se especifica como una interfaz, podría aparecer así:

interface Bicycle {
 
       void changeCadence(int newValue);
 
       void changeGear(int newValue);
 
       void speedUp(int increment);
 
       void applyBrakes(int decrement);
}

Para implementar esta interfaz el nombre de su clase debería cambiar (a ACMEBicycle, por ejemplo), y usaría la palabra clave implements en la declaración de clase:

class ACMEBicycle implements Bicycle {
 
   // remainder of this class implemented as before
 
}

Implementar una interfaz permite a una clase ser más formal acerca del comportamiento que promete proporcionar. Las interfaces forman un contrato entre la clase y el mundo exterior, y este contrato se hace cumplir en el momento de la compilación. Si su clase afirma implementar una interfaz, todos los métodos definidos por esa interfaz deben aparecer en su código fuente para que se compile con éxito.

Tutorial. Qué es la herencia

21 de Agosto de 2008

A menudo diferentes tipos de objetos tienen algunas cosas en común. Por ejemplo, las bicicletas de montaña, las de carretera y los tándems todos comparten las características de las bicicletas (velocidad actual, cadencia de pedal, marcha). Aún así cada una de ellas también define características adicionales que las hacen diferentes: los tándems tienen dos asientos y dos manillares, las bicicletas de carretera tienen un manillar con cuernos, algunas bicicletas de montaña tienen más piñones que les proporcionan marchas más cortas.

La programación orientada a objetos permite que las clases hereden estados y comportamientos de uso común de otras clases. En este ejemplo, Bicycle se convierte en la superclase de MountainBike, RoadBike y TandemBike. En el lenguaje de programación Java se permite que cada clase tenga una superclase directa y que cada superclase tenga el potencial para una cantidad ilimitada de subclases.

La sintaxis para crear subclases en sencilla. Utilice la palabra clave extends seguida del nombre de la clase de la que desea heredar al inicio de su declaración de clase:

class MountainBike extends Bicycle {
 
     // Los nuevos campos y métodos que definan una bici de montaña irían aquí
 
}

Esto proporciona a MountainBike los mismos campos y métodos que Bicycle, pero permite a su código encargarse exclusivamente de las características que la hacen única. Esto hace que el código de sus subclases sea fácil de leer. Sin embargo debe encargarse de documentar apropiadamente el estado y comportamiento que cada superclase que define, ya que ese código no aparecerá en el archivo fuente de cada subclase.

Tutorial. Qué es una clase

20 de Agosto de 2008

En el mundo real a menudo se encontrará con muchos objetos individuales del mismo tipo. Puede haber miles de otras bicicletas, todas de la misma marca y modelo. Cada bicicleta ha sido fabricada a partir de los mismos planos y, por lo tanto contiene los mismos componentes. En términos de orientación a objetos decimos que su bicicleta es una instancia de la clase de objetos conocida como bicicletas. Una clase es el plano del que se crean objetos individuales.

La siguiente clase Bicycle es una posible implementación de una bicicleta:

 
/*
 * Copyright (c) 1995 - 2008 Sun Microsystems, Inc.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *   - Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 *
 *   - Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in the
 *     documentation and/or other materials provided with the distribution.
 *
 *   - Neither the name of Sun Microsystems nor the names of its
 *     contributors may be used to endorse or promote products derived
 *     from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */ 
 
class Bicycle {
 
       int cadence = 0;
       int speed = 0;
       int gear = 1;
 
       void changeCadence(int newValue) {
            cadence = newValue;
       }
 
       void changeGear(int newValue) {
            gear = newValue;
       }
 
       void speedUp(int increment) {
            speed = speed + increment;   
       }
 
       void applyBrakes(int decrement) {
            speed = speed - decrement;
       }
 
       void printStates() {
            System.out.println("cadence:"+cadence+" speed:"+speed+" gear:"+gear);
       }
}

La sintaxis del lenguaje Java le podrá resultar nueva, pero el diseño de esta clase está basada en la anterior discusión sobre los objetos bicicleta. Los campos cadence (cadencia), speed (velocidad) y gear (marcha) representan el estado del objeto, y los métodos (changeCadence, changeGear, speedUp etc.) definen su interacción con el mundo exterior.

Quizás se habrá fijado en que la clase Bicycle no contiene un método main. Eso es porque no es una aplicación completa, solamente es el plano para bicicletas que se podría utilizar en una aplicación. La responsibilidad de crear y usar nuevos objetos Bicycle pertenece a otra clase de su aplicación.

A continuación hay una clase BicycleDemo que crea dos objetos Bicycle distintos e invoca sus métodos:

/*
 * Copyright (c) 1995 - 2008 Sun Microsystems, Inc.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *   - Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 *
 *   - Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in the
 *     documentation and/or other materials provided with the distribution.
 *
 *   - Neither the name of Sun Microsystems nor the names of its
 *     contributors may be used to endorse or promote products derived
 *     from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */ 
 
class BicycleDemo {
     public static void main(String[] args) {
 
          // Create two different Bicycle objects
          Bicycle bike1 = new Bicycle();
          Bicycle bike2 = new Bicycle();
 
          // Invoke methods on those objects
          bike1.changeCadence(50);
          bike1.speedUp(10);
          bike1.changeGear(2);
          bike1.printStates();
 
          bike2.changeCadence(50);
          bike2.speedUp(10);
          bike2.changeGear(2);
          bike2.changeCadence(40);
          bike2.speedUp(10);
          bike2.changeGear(3);
          bike2.printStates();
     }
}

La salida de esta prueba muestra la cadencia de pedaleo, velocidad y marcha para las dos bicicletas:
cadence:50 speed:10 gear:2
cadence:40 speed:20 gear:3

Tutorial. Qué es un objeto

19 de Agosto de 2008

Los objetos son la clave para entender la tecnología orientada a objetos. Si mira a su alrededor ahora mismo se encontrará con muchos ejemplos de objetos del mundo real: su perro, su escritorio, su televisor, su bicicleta.

Los objetos del mundo real comparten dos características: Todos tienen estado y comportamiento. Los perros tienen estado (nombre, color, raza, hambriento) y comportamiento (ladrando, buscando, meneando la cola). Las bicicletas también tienen un estado (marcha actual, cadencia de pedaleo actual, velocidad actual) y comportamiento (cambio de marcha, cambio de cadencia de pedaleo, frenar). Identificar el estado y el comportamiento de los objetos del mundo real es una gran ayuda para empezar a pensar en términos de programación orientada a objetos.

Tómese un momento ahora mismo para observar los objetos del mundo real que hay a su alrededor. Para cada uno de los objetos que ve, hágase dos preguntas: “¿En qué posibles estados puede estar este objeto?” y “¿Qué posibles comportamientos puede realizar?””. Asegúrese de escribir sus observaciones. Mientras lo haga, verá que los objetos del mundo real varían en complejidad, su lámpara de escritorio puede tener solo dos estados (encendido y apagado) y dos posibles comportamientos (encender y apagar), pero su radio tendrá más estados (encendido, apagado, volumen actual, emisora actual) y comportamientos (encender, apagar, subir volumen, bajar volumen, buscar y sintonizar). También observará que algunos objetos, a su vez, también contendrán otros objetos. Todas estas observaciones del mundo real son reproducibles en el mundo de la programación orientada a objetos.

Un objeto software.

Los objetos software son conceptualmente similares a los objetos del mundo real: también consisten de estado y comportamiento. Un objeto almacena su estado en campos o atributos (“variables” en algunos lenguajes de programación) y muestra su comportamiento a través de métodos (“funciones” en algunos lenguajes de programación). Los métodos operan sobre el estado interno del objeto y sirven como el mecanismo principal para la comunicación entre objetos. La ocultación del estado interno y requerir que toda interacción se realice a través de los métodos de un objeto se conoce como encapsulación de datos — un principio fundamental de la programación orientada a objetos.

Piense, por ejemplo, en una bicicleta. Al atribuir el estado (velocidad actual, cadencia de pedaleo actual y marcha actual) y proporcionar métodos para cambiar ese estado, el objeto mantiene el control sobre cómo se permite al mundo exterior usarlo. Por ejemplo, si la bicicleta solamente tiene 6 marchas, un método que cambie de marcha podrá rechazar cualquier valor que sea inferior a 1 o superior a 6.

Al agrupar código en objetos software individuales se obtienen ciertos beneficios:

  • Modularidad: El código fuente de un objeto se puede escribir y mantener independientemente del código fuente de otros objetos. Una vez creado, un objeto se puede pasar fácilmente de un lado al otro del sistema.
  • Ocultación de información: Al interactuar solamente con los métodos de un objeto los detalles de su implementación interna permanecen ocultas al mundo exterior.
  • Reutilización de código: Si un objeto ya existe (quizás escrito por otro desarrollador de software), puede utilizar ese objeto en su programa. Esto permite que un especialista implemente / compruebe / depure objetos específicos para una tarea, en los que luego podrá confiar en su propio código.
  • Conectividad y facilidad de depuración: Si un objeto en concreto resulta ser problemático podrá simplemente eliminarlo de su aplicación y “conectar” un objeto distinto para reemplazarlo. Esto es análogo a la reparación de problemas mecánicos en el mundo real. Si rompe un tornillo, reemplaza el tornillo, no la máquina entera.

Liberado Stripes 1.5

19 de Agosto de 2008

Stripes es un framework web que hace un gran énfasis en la sencillez de configuración, no requiriendo extensos ficheros XML de configuracrión, sino que opta por sencillas anotaciones que configuraran sus ActionBeans. Si bien no es un framework tan potente como los pesos pesados de Struts o Spring, sí es bastante más simple de utilizar.

Se acaba de liberar la versión 1.5 de este framework opensource. En esta versión se hace todavía más énfasis en la menor necesidad de configuración y se incluyen varias características para mejorar su soporte de Ajax.

Lanzamiento de Hibernate 3.3 GA

18 de Agosto de 2008

Ya se puede descargar Hibernate 3.3, la nueva versión del ORM más utilizado para Java. Entre las novedades frente a la versión 3.2 se destacan:

  • Migración a un sistema de construcción con Maven.
  • División del proyecto en varios módulos jar (al estilo de módulos Maven), lo que facilita el ver y administrar las dependencias.
  • Rediseño de las SPI para el caché de segundo nivel.
  • Integración con JBossCache 2.x como proveedor de caché de segundo nivel.

 

Nueva versión de Magnolia 3.6 disponible

8 de Agosto de 2008

Os presentamos aquí las características de la nueva versión comentadas por sus creadores.

Hola

Una pequeña noticia para decirles que la nueva versión de nuestro CMS java opensource Magnolia 3.6 esta ya disponible

Entre las novedades que aporta esta versión su pueden notar  los realces del funcionamiento los cuales se han centrado en la mejora del sistema para los usuarios finales.Lla nueva versión de magnolia 3.6 es hasta diez veces de más rápidas al importar y activar contenido, al formatear y crear nuevo párrafos así como para crear las  revisiones de cada pagina y más.

El nuevo sistema de cache ofrece un control increíblemente refinado, granular de la puesta en cache y de limpieza de este mismo (flushing). Esto permite a los administradores crear soluciones de cache modificadas para requisitos particulares, así como  optimizar estratégicamente el cache para responder a la alta carga en los sitios Web  y para asegurar una gran disponibilidad de cada elemento de contenido.

Magnolia 3.6 también ofrece un mecanismo actualizado de validación que asegura la continuidad del contenido grandes implementaciones en multi-sitios. La funcionalidad transaccional de la activación garantiza una transferencia acertada de los contenidos o de los cambios hechos en un servidor Magnolia (generalmente un servidor de pre-edición o un servidor de edición) y después publicados a los sitios públicos múltiples de Magnolia (servidores subscriptores). Esto se asegura de que los contenidos y los cambios creados en el servidor de edición se repercutan en todos los servidores Magnolia remotos. Alternativamente, si hay un problema técnico en la publicación a uno de los suscriptores, el contenido no es publicado por ningún suscriptor hasta que se haya resuelto la edición. Esto resuelve el problema común a muchas disposiciones CMS encargadas de sitios múltiples, donde los errores técnicos o de red durante el proceso de publicación pueden, hacer que algunos sitios  suscriptores se desincronisen, y no   exhiban un contenido que tendría que ser idéntico en cada sitio.

El backup también se ha refinado en esta última versión de Magnolia, permitiendo a los administradores la restauración de varias versiones  anteriores de un contenido que ha sido editado. Esta nueva característica de backup ofrece una herramienta particularmente interesante para los usuarios corporativos que necesitan migrar sitios a partir de una instancia Magnolia a otra.

Como dije antes en un recapitulativo, magnolia es uno de los únicos CMS opensource en soportar JSR170.
Para mas información sobre JSR170 pueden seguir este enlace:
http://www.cmswatch.com/Feature/123
Entre otras caracteristicas cuenta con:

  • modulo de foro
  • modulo de encuesta
  • modulo de packaging
  • Interface AJAX
  • Backup automático de meta-data (como nombre del autor y fecha)
  • Multi lenguaje- administración en 15 lenguas; contenido en cualquier lengua..
  • Búsqueda en el repositorio por contenido o por palabras claves
  • Gestión de versión
  • Workflow, el cual puede ser modificado para amoldarse a procesos complejos de publicación.
  • Publicación diferida, toda publicación puede ser automáticamente programada a una fecha posterior.
  • Creación de flujos RSS
  • PodCasting
  • Url virtualmente estáticos (a toda pagina se le puede dar un url de tipo estático de manera a ser fácilmente accesible a los motores de búsquedas e indexados)
  • Virtual Static Web Addresses
  • integración con portales de contenido via JSR-168
  • Conector hacia CRM
  • Autentificación con Single Sign On, JAAS y LDAP (*)
  • Conector CRX
  • Modulo de despliegue
  • clustering y load-balancing
  • Cache, Magnolia puede poner en cache toda pagina de manera a aumentar la rapidez del acceso a ellas, el cache se pone al día automáticamente según las paginas sean modificadas.
  • Logging utilizando Apache Log4j
  • Magnolia uses standard Log4j logging. Its extensive customization options allow you to focus logs on your particular needs.
  • Backup posible a través de varios medios, ya sea directamente por el repositorio o a través de de un mecanismo de export/import que puede ser planificado. De la misma manera hay un modulo de packaging que permite hacer un backup de los templates, clases java , etc..
  • Gestion de roles, de manera a asignar a un usuario uno o mas roles a travez de grupos bien definidos.El contenido puede ser solo visto, leído y cambiado por aquellas personas que han sido asignadas a ello.
  • Posibilidad de crear los templates de manera dinámica con el sitedesigner, sin tener que saber nada de html o jsp.

Tienen también la versión enterprise edition, que no es gratis pero aporta muchas funcionalidades y ademas el soporte, muchas empresas no utilizan opensource justamente porque no hay ningún soporte detrás de los productos

Pueden ver el roadmap aca:
http://wiki.magnolia.info/display/DEV/Roadmap
La versión enterprise edition puede descargarse acá:
http://registration.magnolia.info/
La versión community puede descargarse acá:
http://sourceforge.net/project/showfiles.php?group_id=86297&package_id=89560&release_id=616472
Las notas correspondientes a la version:
http://documentation.magnolia.info/releases/3-6-1.html
Sito generado por maven:
http://dev.magnolia.info/ref/3.6.1/

jLibrary 1.2 disponible

8 de Agosto de 2008

Desde la semana pasada, está disponible para descarga la versión 1.2 de jLibrary. Un gestor documental open source construido sobre JackRabbit, con un cliente de escritorio basado en Eclipse RCP y un cliente web que se ha añadido en esta versión.
Hay que destacar la mejora en el consumo de memoria, entre otras de las nuevas funcionalidades y mejoras.

También hay que destacar que la empresa rusa Blandware se va a hacer cargo del proyecto, que han sido los encargados de preparar y lanzar la release. Martín Pérez ha escrito en su blog estos y otros detalles de cómo ha sido el camino a esta nueva versión.