Adoptando el Paradigma de la Programación...

18
XIII Jornadas de Enseñanza Universitaria de la Informática Teruel, 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 Civil UNIVERSIDAD DE BURGOS {rmartico, clopezno, cpardo}@ubu.es

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