Clases 2012c1


Clase 4 - 3/4/2010 - Programación con Aspectos

posted Apr 3, 2012, 6:58 PM by Nicolas Passerini

AOP

Contamos que el concepto de aspectos es de modelar una lógica que atraviesa varias clases, métodos y/o jerarquías, llamada "cross-cutting concerns".
Implementar esta lógica "a mano" involucraría modificar y repetir código en cada uno de esos lugares.

Entonces un aspecto nos permite resolver problemas como: quiero que todos mis objetos sean observables; dado mis test-cases quiero poder analizar qué partes de mi código está siendo testeado (ejecutado) y qué partes no. (Esto último existe de hecho en varios lenguajes de programación y se llama Code Coverage, por ejemplo http://cobertura.sourceforge.net/)

Conceptos de AOP: Join-Point, Point-cut y Advice

Vimos luego los conceptos core del dominio de la programación orientada a aspectos.
Si bien vamos a ver aspectos con una implementación para java llamada AspectJ estos conceptos son abstractos y forman parte de AOP. Con lo cual serán comunes a todos los frameworks de aspectos.
  • Join-point: representa un punto en la ejecución del código de mi programa que resulta interesante. Es decir, en el cual me interesaría saber que está ejecutándose. Por ejemplo: la asignación de una variable de instancia, o el llamado a un método.
  • Point-Cut: es un conjunto de join-points a fin de poder definir un contexto más complejo. Es decir que se combinan, varios point-cuts, ejemplos: asignaciones de variables llamadas "blah" en mis clases del paquete objetos3.ejemplos y para las clases anotadas con @MeInteresa.
  • Advice: dado un pointcut, es decir un contexto de un punto de ejecución, representa una manipulación de ese código. Por ejemplo, poder agregar código antes y después de ese punto (around).
Luego vimos un ejemplo de la syntaxis de AspectJ para definir un aspecto para loggear llamadas a métodos.
Ese ejemplo está en la página del site

Weaving

Luego surgió la pregunta natural de "cómo hace la magia ?" (de interceptar el código y manipularlo).
Acá surge otro concepto de la programación de aspectos, que es el weaving.

Weaving es el proceso que utilizan los fwks de aspectos de código para implementar aspectos, es decir para manipular el código. Para combinar el código del aspecto con la lógica base (de nuestro dominio o clases a aspectear).
De ahí que el nombre en inglés significa tejer.

Enumeramos un par de estratégias de weaving:
  • Compilación: modificando el compilador y utilizando uno custom. Ej: aspectj, phantom.
  • Classloader: una vez cargadas las clases en java no se pueden modificar. Sin embargo, las clases las carga un objeto llamado ClassLoader y uno podría hacer el suyo propio, para, justo antes de cargar la clase, modificar su bytecode. Ejemplo javassist, Apache Commons BCEL
  • Interception: decora los objetos para interceptar los llamados. Ej: Spring AOP, Java Dynamic Proxies.
  • Preprocesador / Generación de Código: analizo el código como texto, antes de la compilación. Ej: Annotation Processing Tool APT.
  • Metaprogramación (?)
  • Debugging Hooks

Ejemplos en AspectJ

Luego nos metimos en directo a ver ejemplos en código de aspectj.
Vemos el primer ejemplo simple de objetos observables.

Luego vimos que el aspecto es de hecho un objeto, y que puedo obtenerlo y acceder a su estado o hasta invocarle métodos.
Después vimos que ese aspecto que es un objeto tiene un ciclo de vida que define cuando se va a crear la instancia del aspecto y cuanto va a vivir. Esto puedo definirlo a través de 
  • pertarget para asignarlo a la instancia del objeto definido según un pointcut.
  • perthis: 

Ejemplo con Annotations

En segundo término vimos una forma alternativa de lograr el mismo resultado. Pero estableciendo un contrato entre los objetos a aspectear y el aspecto.
Acá el aspecto aplica solo a las clases anotadas con @Observable.

Ejemplo con Mixins

Vimos que define que los objetos anotados con @Observable ahora pasan a implementar una nueva interfaz.
Y el mismo aspecto le define las implementaciones de esos métodos, en forma parecida (conceptualmente) a la idea de Open Class que vimos en Nice.

Clase 3 - Traits y Mixins

posted Apr 2, 2012, 4:43 PM by Nicolas Passerini

Les estoy debiendo este resumen, va a estar a la brevedad.

Clase 2 - 15/03/2012 - Sistema de Tipos - Scala

posted Mar 15, 2012, 3:18 PM by Débora Fortini   [ updated Mar 16, 2012, 1:20 PM by Nicolas Passerini ]

Unidad I

Estuvimos un rato largo hablando de Sistemas de tipos.

Intro a Scala

Vimos algunas cosas básicas del lenguaje siguiendo este tutorial. Los temas que mencionamos son:
  • Un poco de sintaxis, como definir clases, métodos, constructores, variables.
  • Todo es un objeto: números, funciones.
  • Funciones anónimas, métodos sin parámetros
  • Case classes y pattern matching.
Les dejo para ustedes mirar la interacción con Java. 

Cosas para leer

Tienen dos cosas importantes para leer:

Clase 1 - 8/3/2012 - Introducción

posted Mar 8, 2012, 2:15 PM by Nicolas Passerini   [ updated Mar 8, 2012, 2:21 PM ]

Arrancamos contando un poco sobre la materia. Definimos que ibamos a ver "herramientas", pero cognitivas, conceptos, que son los que perduran.
Hicimos referencia a este google site. 

Introducción a la Materia

Cuestiones administrativas

Definimos que la forma de evaluación de la materia está principalmente basada en las prácticas, con 4 Trabajos Prácticos:
  • TP0 - Práctica introductoria con Smalltalk (entrega 15/3) y Scala (entrega 29/3).
  • TP1 - Traits en Smalltalk y Scala, con fecha de entrega 12/4.
  • TP2 - Prototipos y aspectos, con fecha de entrega 17/5.
  • TP3 - Metaprogramación, con fecha 14/6.
Aquellos alumnos que tengan buenas calificaciones en sus trabajos prácticos y regularidad en las entregas, serán eximidos del examen parcial, que tendrá fecha el 21/6.
En la planificación están las fechas de entrega y los recuperatorios de los TPs.

Destacamos que es muy importante para poder seguir la materia el entregar cada TP en fecha; si te atrasás en un TP le empezás a comer tiempo al próximo y eso termina en una bola de nieve de la que no es posible salir. Por eso no vamos a aceptar ninguna entrega de TP posterior a los recuperatorios que están propuestos en la planificación.

En principio vamos a estar trabajando los martes. Los martes los trataremos "on-demand", para despejar dudas o, si hace falta, para recuperar algún tema si nos atrasamos.

Tecnologías

En la materia vamos a estar utilizando muchas tecnologías distintas que nos permiten poner a prueba los distintos conceptos que vamos aprendiendo.
Para simplificar un poco armamos una Máquina Virtual de la materia que ya contiene todos entornos para trabajar sin perder tiempo en complejidad accidental de instalaciones y configuraciones.
Sin embargo, es importante no dejarse estar con las cuestiones tecnológicas, porque no es infrecuente que produzcan trabas; si lo dejo para el último día y me encuentro con una traba, entonces voy a estar en problemas.
Por eso, ya desde esta semana comenzamos con una entrega de un TP0 que es "para entrar en calor". Ojo, el TP es sencillo, pero es obligatorio.

Contenido de la Materia

Comenzamos hablando sobre la visión general de la materia y luego describimos rápidamente cada una de las unidades, que se encuentran en definidas en el Temario.

Unidad I

Arrancamos haciendo un repaso del paradigma de objetos y presentamos el Pharo Smalltalk.
Aquí pueden encontrar una presentación que se usó para dar esta clase en otro cuatrimestre: Unidad 1 - Esquemas de tipado

Referencias

Algunos referencias que hicimos:
  • Alan Kay: quien inventó el concepto de OOP.
  • Dan Ingalls: ingeniero que trabajó junto a Alan Kay en Smalltalk.
  • Simula 68: primer lenguaje con un tinte objetoso.
  • Smalltalk 72, 78 y 80

Tareas

  • TP0
  • (para dentro de 15 días) hacer andar la VM.

1-4 of 4