Download - Adoptando el Paradigma de la Programación …jenui2007.unizar.es/doc/Sesiones/18-2B/JENUI2007v05.pdf · Tabla de Contenidos 1. Introducción 2. Contexto Inicial 3. Experiencias Realizadas

Transcript

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