Sunday, April 25, 2010



Las anotaciones y el buen (mal) uso de ellas
“Syntactic sugar causes cancer of the semicolon” Epigrams on Programming”, Alan Perlis http://www-pu.informatik.uni-tuebingen.de/users/klaeren/epigrams.html


Todos los que conocen Java, Groovy, C# y un sinnúmero de lenguajes que las soportan, conocen de las bondades de las anotaciones para muchos propósitos, algunos de ellos muy útiles y otros sin utilidad alguna. Estos últimos, en lugar de favorecer la simplicidad y entendimiento del código, conducen en ocasiones a pasar por alto muchos conceptos importantes que los diseñadores y programadores deben conocer para lograr un producto de software de calidad. Una de las consecuencias de ese “pasar por alto”, es que al tener la necesidad de moverse a otro lenguaje que no hace uso de anotaciones, y presentarse la necesidad de aplicar esos conceptos, comienzan a presentarse los problemas.

Lo que escribo en esta nota es producto de una conversación (usando las bondades de Twitter) que recién tuve con un colega y amigo de varios años, acerca del uso de la anotación @Singleton en el lenguaje Groovy y la ausencia de la misma en el lenguaje Java, para indicar (anotar) que una clase debe actuar como una pobre fábrica capaz de generar un solo objeto.

Esa restricción es parte de la semántica de la clase, o dicho en palabras simples, concierne exclusivamente al código que se necesita dentro de la clase para no permitir que los que la usan puedan instanciar objetos y utilicen entonces otro mecanismo para obtener la referencia al objeto creado por métodos de la propia clase. La anotación entonces afecta directamente el tipo de elemento anotado y se aparta del objetivo de este constructo que debe ser (lo dejo en inglés): “Annotations provide (meta) data about a program that is not part of the program itself. They have no direct effect on the operation of the code they annotate.”

Si consideramos que esta afirmación previa es cierta, entonces tendríamos que preguntarnos si @Singleton tiene o no un efecto directo sobre la operación del código que anota, para, partiendo de ese precepto, decidir si es una anotación correcta, o si sólo se trata de “ázucar sintáctica” que endulza la píldora de Groovy. Si estoy escribiendo esto, podrá imaginar el lector mi respuesta a tal pregunta y esa es que, es incorrecto restringir con una anotación, que una clase funja como Singleton, pues de manera directa afecta y mucho la operación del código que anota.

Hay otras cosas que no justifican el uso de @Singleton. Siempre que analizo las posibles ventajas de anotar algún código trato de responder a interrogantes como las siguientes:
  1. ¿Tiene la anotación un efecto directo en la operación del código que anota?
  2. ¿Dónde está el código o datos de boilerplate, que necesita “la parte” del programa que anoto (con RetentionPolicy!=SOURCE), para que ella realice correctamente su trabajo?
  3. Si la política de retención es RetentionPolicy.SOURCE, ¿Qué tan compleja puede ser la sintaxis de la anotación para parametrizar el código generado, comparado con el código escrito por el programador?
  4. ¿Es la sintaxis de la anotación (con RetentionPolicy.SOURCE) más comprensible que el código que se requiere escribir si ella no se usa?
  5. ¿Puede un IDE con sus wizards generar con facilidad el código necesario sin hacer uso de la anotación (con RetentionPolicy.SOURCE)?
  6. ¿Genera la anotación el código acorde al contexto de ejecución?

Si el código que genera Groovy para @Singleton (de acuerdo con http://groovy.codehaus.org/Singleton+transformation) es:


Entonces, no lo utilizaría para un contexto de ejecución de un solo hilo de ejecución.
Adquirir el monitor puede costar caro.

Friday, April 23, 2010

Programación Orientada a Aspectos con AspectJ


Cada día más, la Programación Orientada a Aspectos (AOP) adquiere más importancia para el desarrollo de aplicaciones empresariales.
Aquellos que utilizan Spring como base para sus aplicaciones, conocen el uso que ese marco de trabajo hace de AOP para resolver problemas complejos, siendo la administración de transacciones la más vista. Sin embargo, otros muchos aspectos (y valga la redundancia) no son resueltos de una manera sencilla conociendo solamente el modelo que Spring sigue para ese estilo de diseño y programación. Es necesario conocer y dominar el lenguaje AspectJ para aprovechar al máximo la integración de éste con Spring.

A continuación describo el contenido del curso de AspectJ que BestS2S ofrece, bien como curso cerrado a empresas o abierto al público. Bienvenido los interesados.

Curso de Programación orientada a aspectos con AspectJ
  • Instructor: Dr. Bárbaro Jorge Ferro Castro
  • BestS2S Software Solutions, S.A. de C.V
  • México, D.F.
  • Duración del curso
  • 24 horas en sesiones de cuatro, seis u ocho horas
  • Informes
  • informes@bests2s.com


Objetivo del curso

Este curso tiene el objetivo de lograr que los participantes adquieran los conocimientos necesarios para aplicar el lenguaje AspectJ en el diseño y construcción de aplicaciones empresariales. El curso, siendo en esencia un curso práctico con múltiples ejemplos, aborda también conceptos importantes de la programación orientada a aspectos, que de alguna manera complementan conceptos importantes de diseño y programación y en particular de la programación orientada a objetos.

Beneficios para el desarrollador de software

Si bien el área del desarrollo de software y de la programación orientada a aspectos (AOSD y AOP) es desconocida en muchas empresas dedicadas a la producción de software, su presencia en muchas aplicaciones y marcos de trabajo es cada día más significativa, y ha dejado de ser un campo meramente académico, para convertirse en una técnica práctica que contribuye al diseño correcto de aplicaciones empresariales, donde la modularización de los concerns se convierte en una de las metas principales para el diseño arquitectónico de esas aplicaciones.

En ese terreno de la modularización, AOSD y AOP son técnicas de diseño y programación imprescindibles para llevar a vías de hecho las mejores prácticas, y AspectJ en particular se adecua a la tecnología de Java con una curva de aprendizaje poco inclinada que le permite al conocedor de Java convertirse en conocedor de AspectJ en poco tiempo.

Con este curso, los participantes adquirirán los conocimientos que necesitan para explotar las bondades de AOP y mejorar sustancialmente el diseño arquitectónico de las aplicaciones que construyen. También, incrementarán su dominio de las técnicas orientadas a objetos que “salen a la luz” al sumergirse en la búsqueda de soluciones con AOP para evitar diseños y códigos dispersos y mezclados que atentan contra muchos de los principios del diseño de aplicaciones.

Los beneficios de cada tópico particular de AOP se describen más adelante para cada Tema del contenido del curso.

Contenido del curso

1. Introducción a la Programación Orientada a Aspectos (AOP)
  • Fundamentos de la programación orientada a aspectos
  • La anatomía de un lenguaje de aspectos
  • Los conceptos fundamentales de AOP
  • Analogía de AOP con otras tecnologías
  • Introducción rápida a AspectJ
  • Los aspectos en un programa con AspectJ: primer ejemplo
Competencias adquiridas con el Tema 1
  • Entender el significado de “crosscutting concerns”
  • Encapsular en módulos los “crosscutting concerns”
  • Responder con precisión las siguientes preguntas:
  • ¿Dónde están los aspectos en un programa que no usa AOP?
  • ¿Cómo puedo crear módulos con los aspectos de un programa?
  • ¿Cuántas implementaciones de AOP existen?
  • ¿Para qué aprender AspectJ si ya conozco Spring AOP?
  • ¿Si Groovy brinda AOP (¿será cierto?), por qué no lo brinda Java?
  • ¿Para qué aprender AOP si algunos consideran que su uso es limitado?
2. Introducción a AspectJ

  • Dominando los conceptos principales con un ejemplo (learning by example)
  • Disección del código ejemplo
  • Construyendo la aplicación con líneas de comando y con Eclipse.
  • Las “cosas” para expresar “crosscuttings” en AspectJ: puntos de unión, cortes y aspectos
  • Las “cosas” para diseñar y construir “crosscuttings dinámicos”: los avisos
  • Las “cosas” para diseñar y construir “crosscuttings estáticos”: las introducciones y declaraciones en tiempo de “tejido”
  • El uso de anotaciones para una sintaxis alternativa
  • Entendiendo los mecanismos de tejido
  • La integración inevitable de AspectJ en Spring

Competencias adquiridas con el Tema 2
  • Programar aspectos con AspectJ
  • Distinguir lo estático de lo dinámic
  • Conocer lo que Spring ofrece de AspectJ
  • Responder con precisión las siguientes preguntas:
  • ¿Qué valor me brinda conocer las “tripas” del mecanismo de tejido de AspectJ?
  • ¿Para qué usar línea de comandos si dispongo de Eclipse u otro IDE?
  • ¿Para qué tantos puntos de unión si quizá baste con las llamadas a métodos?
  • ¿Qué ventajas tiene modificar el modelo de objetos de un diseño con las introducciones de AspectJ?
3. Puntos de unión, cortes, avisos, introducciones y aspectos con detalle
  • Dominando los conceptos con un ejemplo (learning by example)
  • El modelo de puntos de unión en AspectJ
  • Categorización de los puntos de unión
  • El lenguaje de expresión y los patrones de firmas para los cortes
  • Los avisos para la construcción de crosscuttings dinámicos
  • Clasificación de los avisos de AspectJ
  • Avisos y métodos: similitudes y diferencias
  • El contexto de los puntos de unión. Exposición del contexto a los avisos
  • Acceso al contexto mediante técnicas de reflexión
  • Las declaraciones inter-tipos de AspectJ
  • Los patrones de diseño de GOF programados con introducciones de AspectJ

Competencias adquiridas con el Tema 3
  • Dominar el modelo de puntos de unión
  • Expresar los cortes usando las dos sintaxis disponibles
  • Diseñar patrones de diseño con AspectJ
  • Utilización del contexto de los puntos de unión en los avisos de los aspectos
  • Determinar las necesidades de cortes dinámicos y estáticos
  • Modificar la estructura de las clases y objetos mediante declaraciones inter-tipos
  • Responder con precisión las siguientes preguntas:
  • ¿Cuáles son las ventajas de un modelo rico de puntos de unión?
  • ¿Qué ventajas tiene el uso de AOP en la programación de patrones de diseño?
  • ¿En qué contextos es importante la precedencia de aspectos?
  • ¿Cómo presentar un modelo de diseño que se programa con aspectos?
  • ¿Qué técnicas pueden usarse para modelar aspectos con UML?
  • ¿Cómo tener acceso al contexto de ejecución de un programa con aspectos?

4. La integración de AspectJ con el marco de trabajo Spring

  • Las limitaciones de AOP en Spring
  • Los detalles de Spring AOP
  • Programación orientada a aspectos basada en proxies dinámicos
  • El soporte para @AspectJ en Spring
  • La inyección de dependencias para la configuración de aspectos
  • La selección del sistema AOP adecuado para aplicaciones con Spring

Competencias adquiridas con el Tema 4
  • Programar aspectos con las facilidades de Spring AOP
  • Justificar las limitaciones de Spring AOP
  • Describir las diferencias entre tejido de código y proxies dinámicos para la implementación de los aspectos
  • Describir la función de DI en la configuración de aspectos
  • Responder con precisión las siguientes preguntas:
  • ¿Qué ventajas y desventajas tiene la técnica de proxies dinámicos?
  • ¿Qué tanto debe usarse de AspectJ en una aplicación con Spring?
  • ¿Para qué tantos puntos de unión si quizá baste con las llamadas a métodos?


5. Aplicaciones de AspectJ con Spring

  • Técnicas de monitoreo
  • Cumplimiento del código con las políticas y decisiones del diseño
  • Patrones de diseño
  • Control de la concurrencia
  • Administración de las transacciones de la aplicación
  • Implementación de la seguridad de la aplicación
  • Mejoras significativas con aspectos a la lógica de negocio de la aplicación

Competencias adquiridas con el Tema 5

La más importante que se espera del curso: APLICAR AOP PARA RESOLVER PROBLEMAS REALES EN APLICACIONES REALES


La empresa Bests2s

Fundada en 2009 por un grupo de doctores reconocidos en las áreas de Computación, Informática e Inteligencia Artificial, “Bests2s Soluciones y Servicios de Software, Desarrollo Académico y Capacitación” es un equipo formado por profesionales del software altamente capacitados en soluciones basadas en tecnología de Java, Inteligencia de Negocios y en Sistemas Inteligentes así como también en el desarrollo académico y la capacitación en estas tecnologías.

Con un promedio de 20 años de experiencia en Consultoría, Docencia, Desarrollo Académico y Capacitación, la fortaleza de Bests2s reside en su gente. Este experimentado equipo de trabajo provee liderazgo técnico, liderazgo académico, experiencia en las mejores prácticas, mejores principios y mejores procesos, en el manejo de proyectos y en el desarrollo de sistemas de software.