Adoptando el Paradigma de la Programación...
Transcript of Adoptando el Paradigma de la Programación...
XIII Jornadasde Enseñanza Universitaria
de la InformáticaTeruel, 16 al 18 de julio
Adoptando el Paradigma de la Programación Orientada a Atributos
Raúl Marticorena, Carlos López y Carlos PardoÁrea de Lenguajes y Sistemas Informáticos
Departamento de Ingeniería CivilUNIVERSIDAD DE BURGOS
{rmartico, clopezno, cpardo}@ubu.es
XIII Jornadas de Enseñanza Universitaria de la Informática , julio 2007 2
Tabla de Contenidos
1. Introducción
2. Contexto Inicial
3. Experiencias Realizadas
4. Conclusiones
5. Líneas de Trabajo Futuro
XIII Jornadas de Enseñanza Universitaria de la Informática , julio 2007 3
� Paradigma de programación orientada a objetos (POO) establecido como contenido troncal / obligatorio:� con ventajas inherentes � nuevos problemas que necesitan nuevas soluciones
� Problemas: � aspectos semánticos comunes repartidos por el código
� Programación Orientada a Aspectos
� semántica específica de la aplicación o dominio en ciertos elementos
� Programación Orientada a Atributos (POA)
� Solución POA: � entrelazado de la lógica de negocio con cuestiones semánticas� utilizando "marcas" en el código
� código declarativo embebido en código imperativo
� ejecución de código a partir de dichas "marcas"
Introducción
XIII Jornadas de Enseñanza Universitaria de la Informática , julio 2007 4
Introducción
� Idea no tan nueva...� Ej: preprocesadores en C� Ej: JML en Java para implementar Diseño por Contrato� Ej: XDoclet para componentes distribuidos EJB� Ej: estereotipos y valores etiquetados en UML
� Adoptado en la resolución de nuevos problemas� Ej: pruebas, servicios web, componentes distribuidos, etc.
� Cuestiones� ¿Necesaria su inclusión?� ¿Cómo realizar dicha inclusión?� ¿Necesario un nuevo esfuerzo?
� Problemas� Concepto aparentemente trivial� Pero sus usos y utilidades no son tan fáciles de entender
XIII Jornadas de Enseñanza Universitaria de la Informática , julio 2007 5
Contexto Inicial
� Lenguajes de programación � Imperativos en programación de nivel I
� Primer curso: C
� Orientados a Objetos en programación de nivel II y III� Segundo y tercer curso: Java
� C#, VB.NET y Java en trabajos final de carrera en tercer curso� C++, VB .NET y Java en segundo ciclo
� Lenguajes de modelado� UML desde el segundo curso hasta quinto
� Aparece el concepto de atributo en plataformas de amplio uso:
� en Java 1.5 denominado anotación
� en .NET denominado atributo
� Utilizado en nuevas herramientas, entornos, etc.
XIII Jornadas de Enseñanza Universitaria de la Informática , julio 2007 6
Primera Experiencia: Uso de Atributos (I)
� Inclusión de pruebas� Asignatura de programación de nivel II
� Usando JUnit (versión 3.x)
� Diseño basado en patrones
� Reflexión e introspección (convención de nombres )
� Ej: public void setUp(){ // Inicializa el estado antes de cada test.// ...
}public void test Comprobar (){
// ...}public void test Excepcion (){
try{// código que genera excepciónfail(); // provocar fallo
}catch( ExcepcionEsperada es ){
// ok}
}
XIII Jornadas de Enseñanza Universitaria de la Informática , julio 2007 7
Primera Experiencia: Uso de Atributos (II)
� Uso de anotaciones� JUnit (versión 4.x)
� Uso de anotaciones con sintaxis @Anotación
� Sin referencia a los patrones de diseño
� Semántica de ejecución ligada a la anotación
� Ej: @Beforepublic void inicializar(){}@Testpublic void comprobarPrecio(){}@Test(expected=ExcepcionEsperada.class)public void exception(){
// código que genera excepción}
¿Dónde está el código?¿Por qué funciona?
XIII Jornadas de Enseñanza Universitaria de la Informática , julio 2007 8
Primera Experiencia: Uso de Atributos (III)
� ¿Cómo se ha abordado su introducción?1. Presentación breve del concepto de anotación
2. Enumeración de anotaciones en JUnit y semántica asociada
3. Se muestra algún ejemplo simple
4. Se aporta un código de ejemplo "con huecos" (plantilla)
� Se omite:� procesado y ejecución de las anotaciones
� Práctica obligatoria: implementación de pruebas unitarias utilizando anotaciones
XIII Jornadas de Enseñanza Universitaria de la Informática , julio 2007 9
Primera Experiencia: Uso de Atributos (IV)
� Encuesta:
� P1- ¿Aumentar tiempo de explicación del concepto?
� P2 -¿Es conveniente aprender el concepto?
� Opinión de alumnos que han usado ambas versiones:
� P3- Tendencia a considerar más fácil o más difícil el uso de anotaciones
� P4- Preferencia clara sobre una u otra versión
3 ,8 4
3 ,3 9
2 ,8 6
0%
20%
40%
60%
80%
100%
P1 P2 P3Preguntas
1,0
1,5
2,0
2,5
3,0
3,5
4,0
4,5
5,0Puntos
1 2 3 4 5 Media
P4 - Versión JUnit elegida
43%
57%3.8.1
4.2
XIII Jornadas de Enseñanza Universitaria de la Informática , julio 2007 10
Segunda Experiencia: Definición de Atributos (I)
� Asignatura: de diseño y mantenimiento del software, 5º curso� métricas, patrones de diseño (PD), pruebas y refactorizaciones
� Doble actividad:� definición de atributos asociados a patrones (PD)
� traducción a código de conceptos de UML: valor etiquetado y estereotipos
XIII Jornadas de Enseñanza Universitaria de la Informática , julio 2007 11
Segunda Experiencia: Definición de Atributos (II)
� Definición de Atributos� Sesiones prácticas guiadas:
� extracción del diseño de tres aplicaciones a partir del código fuente
� uso de herramienta WOP de identificación de patrones
� precisión baja de la herramienta
� Solución: incluir la semántica con atributos en el propio código
� Definidas e implementadas por los alumnos
� Requiere conocimientos avanzados sobre anotaciones
XIII Jornadas de Enseñanza Universitaria de la Informática , julio 2007 12
Segunda Experiencia: Definición de Atributos (III)
� Ej:
@Documented@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)public @interface
PatternAnnotation {PatternName[] patternName();
String participantName();}
Singleton GestorImpresion
-instancia: GestorImpresióN
-constructor()+getInstancia():GestorImpresión
GestorImpresión{PatternName=Singleton,
participantName=Singleton}-instancia: GestorImpresión-constructor(){sequential}+getInstancia():GestorImpresión{sequential,Singleto n=getInstancia}
Solución 1: Representación de PD con
colaboraciones
Solución 2: Representación de PD con estereotipos y valores
etiquetados
XIII Jornadas de Enseñanza Universitaria de la Informática , julio 2007 13
Segunda Experiencia: Definición de Atributos (IV)
� Traducción UML a Java� Añadir funcionalidad a una herramienta CASE UML
� Traducir los estereotipos y valores etiquetados a código
� Ej:
import java.lang.annotation.*;@Documented@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)public @interface
PatternParticipant {String[] Patterns();String[] Roles();
}@PatternParticipant (
Patterns={"Singleton"},Roles={"Singleton_Singleton"})
public class PrinterPool{}
<<PatternParticipant>>PrinterPool
{Patterns=Singleton}{Roles=Singleton_Singleton}
XIII Jornadas de Enseñanza Universitaria de la Informática , julio 2007 14
Segunda Experiencia: Definición de Atributos (V)
� Evaluación:
� P1- ¿Clarifican las anotaciones el diseño?
� P2- ¿Identificación de PD mejora la comprensión?
� Comentarios:
� Interés elevado en añadir contenido semántico
� Ven adecuado el uso de atributos para este fin
� No tan clara la utilidad de la semántica en la identificación de patrones
3 ,3 6
3 ,16
0%
20%
40%
60%
80%
100%
P1 P2Preguntas
1,0
1,5
2,0
2,5
3,0
3,5
4,0
4,5
5,0Puntos
1 2 3 4 5 Media
XIII Jornadas de Enseñanza Universitaria de la Informática , julio 2007 15
Descriptor XML de despliegue
Tercera Experiencia: Uso Avanzado y Evaluación (I)
� Asignatura: de sistemas distribuidos, 5º curso
� Prácticas con componentes Entreprise JavaBeans
� En curso previos con la especificación 2.1� Interfaces, descriptor de despliegue XML
� Versión actual 3.0 � Uso intensivo de atributos
� Ej: Message Driven Bean
public class MdbBeanimplementsMessageDrivenBean, MessageListener {// lógica de negocio de acceso // a la cola de mensajes
}
Descriptor XML de despliegue propio de la plataforma J2EE
EJB 2.1@MessageDriven(activationConfig = { @ActivationConfigProperty(propertyName = "destination", propertyValue = "ColaEjemplo"),
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")
})public class MessageDrivenBeanimplements MessageListener {
// cuerpo de la clase}
EJB 3.0
XIII Jornadas de Enseñanza Universitaria de la Informática , julio 2007 16
Tercera Experiencia: Uso Avanzado y Evaluación (II)
� Práctica:� 1. Implementación en las dos especificaciones
� plataforma JOnAS (EJB 2.1) y EasyBeans (EJB 3.0)
� 2. Evaluación comparativa desde el punto de vista del "responsable de la empresa de I+D+i"
� Toma de decisión de futuro
3,56
2,892,56
0%
20%
40%
60%
80%
100%
P1 P2 P3Preguntas
1,0
1,5
2,0
2,5
3,0
3,5
4,0
4,5
5,0Puntos
1 2 3 4 5 Media� Evaluación� P1- ¿Aumentar tiempo de explicación del concepto?
� P2- ¿Es conveniente aprender el concepto?
� P3- ¿Más fácil el desarrollo con atributos?
XIII Jornadas de Enseñanza Universitaria de la Informática , julio 2007 17
Conclusiones
� Necesaria una introducción teórica y práctica en asignaturas de POO de cursos iniciales
� El simple uso sin explicaciones adicionales puede llevar a cierta desorientación
� Adecuado coordinar su inclusión con asignaturas de ingeniería del software
� El concepto se asimila mejor en segundos ciclos o últimos cursos de ciclo superior
� Realizar prácticas comparativas entre ambas soluciones clarifica el concepto
� Resultados extrapolables a paradigmas cercanos a la POO
� Programación Orientada a Aspectos
XIII Jornadas de Enseñanza Universitaria de la Informática , julio 2007 18
Líneas de Trabajo Futuro
� Observar el efecto de su introducción en primeros cursos� Suposición: agilizar el desarrollo usando atributos y la resolución de problemas más complejos en cursos superiores
� Empezar a plantear la introducción del concepto de aspecto:� Siguiendo un proceso similar
� Aplicando los resultados obtenidos con sus pros y contras
� Aplicado a otras plataformas como .NET