miércoles, 16 de mayo de 2007

¡ rápido con groovy ! GroovyBeans para programadores Java y C#

representando una clase libro

Así es como se ve una clase en Groovy:

  1    class Libro {
  2 
  3      String titulo
  4 
  5      String getTitulo() {
  6          return titulo
  7      }
  8 
  9      void setTitulo(String tit) {
 10          titulo = tit
 11      }
 12    }

se parece mucho a Java y a C#, excepto que:

  • no necesito de puntos y comas para separar sentencias
  • el campo titulo es preconfigurado como privado como todo campo
  • los métodos getTitulo() y setTitulo(...) son preconfigurados como públicos al igual que todo método

La clase aquí formada es la encapsulación de un solo campo, titulo, por lo tanto los métodos get... y set... son sus accesores, que además están en un formato muy común.

Para evitarle esta molestia de estar programado get... y set... la mayoría de los IDE´s (como los míos: NetBeans para Java y SharpDevelop para C#) están en capacidad de generarlos automáticamente.

  1    class Libro {                    
  2                                     
  3        String titulo                
  4                
  5        String getTitulo() {         
  6            return titulo            
  7        }                            
  8                                     
  9        void setTitulo(String tit) { 
 10            titulo = tit             
 11        }                            
 12    }                                

Groovy le va a evitar la molestia a Ud. y a su IDE favorito, las declaraciones muy obvias get... y set... pasan a ser implícitas.

  1    class Libro {                    
  2                                     
  3        String titulo                
  4                
  5    }                                

Si no se convence todavía, por favor corra el programa:

  1    class Libro {                    
  2        String titulo                
  3    }                                
  4                                     
  5    miLibrito = new Libro()          
  6    miLibrito.setTitulo('Amares')    
  7    println miLibrito.getTitulo()    

Y si lo que extraña es la notación de propiedad de C# y VB.NET, simplemente reemplace la llamada a los métodos set... y get... con la notación "bean":

  1    class Libro {                    
  2        String titulo                
  3    }                                
  4                                     
  5    miLibrito = new Libro()          
  6    miLibrito.titulo = 'Amares'      
  7    println miLibrito.titulo         

En tal caso recuerde que no está accesando directamente al campo, sino los métodos implícitos get... y set... con notación "Bean".

Es posible redefinir el comportamiento predeterminado e implícito de los accesores si lo que se quiere es un método más especializado:

  1    class Libro {                    
  2                                     
  3        String titulo                
  4                                     
  5        void setTitulo(String tit) { 
  6            titulo = tit.toUpperCase() 
  7        }                            
  8    }                                
  9                                     
 10    miLibrito = new Libro()          
 11    miLibrito.titulo = 'Amares'      
 12    println miLibrito.titulo         

En este ejemplo se redefine la función set... con el propósito de transformar a mayúsculas el valor del campo. No se requiere redefinir el método get. Trate de hacer lo mismo en Java o C# y compare el número de líneas y el nivel de complejidad del código. En Groovy se programa menos líneas de código que en esos lenguajes pero debe ser conciente de las declaraciones implícitas y dinámicas.

domingo, 13 de mayo de 2007

Mi selección de lenguajes dinámicos...

JavaScript y Groovy... el primero como una herramienta esencial de los navegadores y el segundo como un Java muy evolucionado. Me voy a referir a Groovy. Fue por Octubre del 2005 cuando me convencí del valor de una herramienta llamada Ruby on Rails, o simplemente Rails, para elaboración de aplicaciones web, sobre la base de lenguaje Ruby. Ruby es a Rails lo que C# es a ASP.NET o lo que Java es a JSP. Aunque no hay que perder de vista que Rails es una importante innovación tecnológica. Los autores comenzaron a hablar de Rails, el mismo portal de Sun hablaba de una “sana envidia”. Claro está que para saber Rails primero hay que saber Ruby, así que a comprar librito y ponerse a leer, soy programador y no puedo dejarme vencer por los sorpresivos advenimientos en tecnología. Ruby es un lenguaje tan viejo o nuevo como Java, es muy dinámico y bien evolucionado, algunos autores lo señalan como el más avanzado de las plataformas de desarrollo de software. La versión 2.0 de C# ya incluyó algunas de sus características pero no Java, básicamente por los debates a veces fundamentalistas en su comunidad de desarrolladores y autores. Fue revisando algunas referencia relacionadas con Ruby que llegué a Groovy, y de inmediato me resultó más innovador, Groovy es un Ruby innovado que corre sobre tecnología Java, además no necesitaba votar mis conocimientos a la basura para aprender algo nuevo. Las innovaciones en tecnología de desarrollo de software son el resultado de procesos evolutivos. En Java, la ventaja aprovechable es una plataforma flexible basada en su máquina virtual JVM, Java Virtual Machine, algo parecido se puede decir de .Net . La compilación del código genera otro código (bytecode) que es ejecutado por la máquina virtual. ¿Qué tal si el código que compila no es Java sino un lenguaje más dinámico y menos estricto?. La idea no es nueva, en 1998 leí de un lenguaje llamado NetFlex de IBM, que no era otra cosa que su lenguaje Rexx sobre JVM. La lista de tales lenguajes sigue creciendo, y básicamente es la reproducción de lenguajes dinámicos con todo su potencia sobre JVM: Rhino, Jyton, Groovy, etc, etc. Groovy ha estado en desarrollo por cerca de 4 años, y la versión 1.0 nos llegó solamente en enero del 2007, pan caliente, pero la adopción corporativa estuvo en marcha desde el 2004 como lo dejan ver los portales de Sun e IBM. La estructura y la idea central de Ruby conforman el corazón de Groovy mas un importante valor agregado en creatividad. Groovy convive con Java y todos sus entornos como Spring y Hibernate, etc y herramientas como JasperReports, JUnit y Ant. Dicha convivencia debería ser la razón para una adopción más rápida en las aplicaciones corporativas. Personalmente lo utilizo para generar y transformas rápidamente la información de la base de datos, me es útil a la hora de manejar HTML y XML con un enfoque más pragmático casi siempre utilizando un mecanismo que es justamente lo que necesitaba: “Builder”. Aunque todas las opciones y capacidades de groovy son muy interesantes, los “Builders” son particularmente útiles por permitir representar estructuras jerárquicas con código apropiado y evidente. También me a causado grata impresión la capacidad de integración con aplicaciones externas. Grails es a Groovy lo que Rails es a Ruby. Es un buen momento para atrapar conocimiento sobre Grails que está en pleno desarrollo. El concepto principal es “programación por convención”, en la que se le pide hacer las cosas de una determinada manera para generar el código necesario: “dígame QUE es lo que quiere que yo se COMO lo hago”. ¿Algún Ruby para .Net? Las plataformas .Net como Microsoft o Mono, posiblemente son más abundantes en lenguajes pero menos en entornos. Hoy en día puede que sea Boo el equivalente de Ruby, o debe haber algo que se llame NRuby, honestamente no tengo planeado evaluar todos y cada uno de los lenguajes dinámicos sobre plataformas Java y .Net. De todas maneras Microsoft y la comunidad alrededor de Mono.Net reconocen muy bien los momentos de innovación tecnológica y no deberían estar lejos de lograr su Ruby con valor agregado y capacidad integradora. ¿Está Java en proceso de extinción? Definitivamente NO, pero el lenguaje está definitivamente separado de la máquina virtual (físicamente siempre lo estuvo), eso está claro para todos. Las plataformas de desarrollo NetBeans y Eclipse son mas que entornos de desarrollo (IDE) el espacio donde se integran tecnologías relacionadas a Java y nunca pudieron estar mejores gracias a los esfuerzos comunitarios y corporativos. Yo estoy esperando que NetBeans de soporte a Groovy, el problema mayor es justamente la ausencia de un entorno apropiado de programación. Para Eclipse este problema puede haber sido resuelto las últimas semanas. Cada nueva versión de Java tiene una cantidad enorme de adiciones que refuerzan la plataforma y dan al usuario ventajas cada vez mayores.