1 Paul Leger [email protected] http://pleger.clProgramación Modular, Orientación a Aspectos y Sistemas Sensibles al Contexto Paul Leger
2 Construcción de un SoftwareIngeniero de Software Trato: Un «buen» software Cliente Resultado: Un cliente que sufre por un mal software
3 Caso Real: Administrar la Seguridad en Dynamics AX (ERP)Error de seguridad al ingresar una transacción Edición manual de la seguridad ¿Son malos los ingenieros de software? ¿Es difícil construir un «buen» software?
4 Objetivo de la PresentaciónSistemas que se adaptan al contexto Aspectos ¿Cómo construir un «buen» software?
5 “Cada código debe ser escrito en un solo lugar”Programación Modular “Cada código debe ser escrito en un solo lugar”
6 Sumando Matrices //dada una matriz m1 //dada una matriz m2//m3 = m1 + m2 for (i = 0; i < 2; ++i) for (j = 0; j < 2; ++j) m3[j][i] = m1[i][j] + m2[i][j]; //m3 = m3 + m2 for (i = 0; i < 2; ++i) for (j = 0; j < 2; ++j) m3[j][i] = m3[i][j] + m2[i][j]; //m4 = m2 + m3 for (i = 0; i < 2; ++i) for (j = 0; j < 2; ++j) m4[j][i] = m2[i][j] + m3[i][j]; ¿Un error? ¿Una modificación? (ej. 2x2 → 5x5) Moraleja: Copiar & Pegar no es una buena idea - Modularity is good - Crosscutting concerns… (logging) - General procedures paradigms are insufficient - AOP improves modularity
7 Sumando Matrices en un Software GrandeSoftware complejo y largo ¿un error o modificación? El bug podría ser un: protocolo de seguridad, acceso a cuenta corriente, etc Moraleja: Copiar & Pegar no es una buena idea
8 Programación Modular En 1972, David Parnas dijo:«Cada interés (concern) deber ser implementado en solo lugar, llamado módulo» function sumar (mA, mB) { for (j = 0; j < mA.largoFila; ++j) for (j = 0; j < mA.largoColumna; ++j) mC[i][j] = mA[i][j] + mB[i][j]; return mC; } m3 = sumar(m1,m2); m3 = sumar(m3,m1); m4 = sumar(m2,m3); Módulo
9 Beneficios de la Programación ModularDesarrollando un sistema Software creado a través de la composición de módulos Cada modulo puede ser reemplazado/actualizado fácilmente Mantención del software resulta más sencilla
10 ¿Es Siempre Posible La Programación Modular?Hay diversas técnicas/metodologías que ayudan a la programación modular (ej. Arquitectura de software) function IngresarNotas (notas) { verificarAcceso(); //código para ingresar notas } function cambiarNotas (notas) { verificarAcceso(); //código para cambiar notas ¿Es modular la implementación la seguridad? Por ejemplo: verificar el acceso de un usuario cada vez que se ejecuta una función Hay concerns que no pueden ser implementados de manera modular (ej. Seguridad y depuración) Estos concerns son conocidos como crosscutting concerns
11 Caso Real: Implementación de la Seguridad en un Servidor WebLa manchas rojas indican la implementación de la seguridad en el servidor Web Si usted quisiera cambiar el protocolo de seguridad ¿Cómo y dónde comienza a modificar el software?
12 Orientación a Aspectos“De vuelta a la programación modular”
13 Programación Orientada a AspectosEn 1996, Gregor Kiczales dijo: «Un aspecto puede implementar modularmente los crosscutting concerns (e.g. seguridad)» Identifica ASPECTO Acción
14 Implementando Seguridad con AspectosSolución sin aspectos Solución con aspectos function ingresarNotas(notas) { verificarAcceso(); //código para ingresar notas } function cambiarNotas (notas) { verificarAcceso(); //código para cambiar notas aspectoDepurador = { identifica: //llamadas a funciones accion: verificarAcceso(); } function ingresarNotas (notas) { //código para ingresar notas } function cambiarNotas (notas) { //código para cambiar notas Lenguajes de Aspectos conocidos:
15 Terminología de AspectosJoin Point: Es un punto en la ejecución del programa sumar() restar() Pointcut: Es la identificación de un join point Advice: Acción a tomar cuando el pointcut identifica un join point print (“Ejecutando sumar”); Poincut ASPECTO Join Point Advice
16 ¿Es suficiente Aspectos para volver a la programación modular?¿Cómo detecto que intruso desea entrar a nuestro Facebook probando contraseña? Necesitamos observar 3 intentos de login login Aspectos solo puede identificar un solo punto de ejecución, y no una traza de ejecución
17 Programación Orientada a AspectosEn 2004, Remi Douence dijo: «Un stateful aspect puede identificar y reaccionar a trazas de ejecución» Stateful Aspect Identifica y reacciona
18 Implementando un detector de intrusosdectectorIntruso = { identifica: login → login → login accion: print(“INTRUSO”); } login(); login(); login(); login Lenguajes de Stateful Aspects conocidos:
19 Sistemas Sensibles al Contexto“Cambiando la conducta del programa”
20 Aplicaciones de Stateful Aspects: Sistemas Sensibles al Contexto (1/4)«Un sistema sensible al contexto cambia su conducta de acuerdo al contexto (ejecución del programa) » Aplicaciones para tablets Arriba Abajo Secuencia Enviar un correo a Karla Soria Acción
21 Aplicaciones de Stateful Aspects: Sistemas Sensibles al Contexto (2/4)Smart Home para gente ancianas Entrar al baño Δt > 3 horas No salió del baño Secuencia Avisar a una ambulancia Acción
22 Aplicaciones de Stateful Aspects: Sistemas Sensibles al Contexto (3/4)Adaptivo software para enseñar a sumar a alumnos de básicos secuencia errónea de pasos al resolver una suma Secuencia Mostrar un tutorial Acción
23 Aplicaciones de Stateful Aspects: Sistemas Sensibles al Contexto (4/4)Agentes inteligentes Acción Feedback
24 NO OLVIDE, ¡TENGA CUIDADO CUANDO «COPIA & PEGA»!Conclusiones Programación/Diseño Modular es esencial para desarrollar «buen» software Programación Orientada a Aspectos permite observar la ejecución de un programa Stateful Aspects permite cambiar la conducta del programa de acuerdo a la historia de su ejecución NO OLVIDE, ¡TENGA CUIDADO CUANDO «COPIA & PEGA»! (presentación) (tesis doctoral)