Download Programación Orientada a los Aspectos

Document related concepts

Rust (lenguaje de programación) wikipedia , lookup

Dylan (lenguaje de programación) wikipedia , lookup

Polimorfismo (informática) wikipedia , lookup

Common Lisp wikipedia , lookup

Thunk wikipedia , lookup

Transcript
Introducción
La aparición de la programación
Orientada a Objetos (OO) tuvo
un efecto dramático en el
desarrollo de software. En la
actualidad, los desarrolladores
crean aplicaciones utilizando
clases y objetos y la interacción
entre los objetos.
El problema con la
programación OO es el
manejo del código
transversal , donde un
cambio en los requerimientos
puede tener un profundo
impacto en el tiempo de
desarrollo.
Introducción
El presente Webinar
explicará acerca de la
Programación Orientada a
Aspectos (POA), como una
mejora al problema del
código transversal.
Agenda
• Programación Orientada a los
Objetos
• Caso práctico
• Código Transverso
• Programación orientado a los
aspectos.
Definición
• Es un paradigma de
programación cuyo
fundamento es dividir el
programa en pequeñas
unidades lógicas de código,
llamadas objetos.
• Los objetos son unidades
independientes que se
comunican entre ellos
mediante mensajes.
Definición
Una clase es una
plantilla la cual se
crean los objetos
requeridos para la
solución del
problema.
Un objeto es una
instancia de una
clase. Hace uso de
los atributos y
métodos de la
clase
Características
Abstracción
Polimorfismo
Herencia
Encapsulamiento
Ventajas
• Reutilización del código
• Relaciona el sistema al mundo
real
• Facilita la creación de programas
visuales.
• Construcción de prototipos.
• Agiliza el desarrollo de software.
• Facilita el mantenimiento del
software.
Si es tan
productivo la
Programación OO,
en que está
fallando?
Caso Práctico
Tenemos un app de
banca electrónica: los
clientes consultan el
estado de sus cuentas,
realizan operaciones y
actualizan sus datos
personales
Caso Práctico
Tanto Cliente como
CuentaBancaria, tienen el
método IngresarCuenta().
Tal como está planteada
esta solución, este
métodos expresa la
existencia de asunto
transversal: autorización
Caso Práctico
Estos asuntos
transversales no
representan problema,
pero si nos piden cambios
en el proceso de
IngresarCuenta() debido a
que se requiere más
detalle de información.
Caso Práctico
O si tenemos un nuevo
tipo de cuenta bancaria
llamada Cuenta PlazoFijo,
con una política distinta de
permisos en el proceso
IngresarPlazoFijo().
Los sistemas se modelan
como un conjunto de
objetos que interactúan
entre sí, y no es posible
modularizar operaciones
esparcidas en toda la
aplicación.
Este problema se
le llama
ASUNTOS
TRANSVERSALES
Definición
Es aquel código que no
puede encapsularse en
una unidad funcional
porque atraviesa en
varias partes del sistema.
Problemas
Menor reuso
del código
Conceptos
entrelazados
Baja calidad
del código
Evolución más
dificultosa
Consecuencias de Asuntos Transversales
• Código disperso: los métodos
se encuentran esparcidos en
varios módulos: cuando un
servicio es ejecutado desde
muchas partes del programa.
• Código mezclado: en un
mismo módulo puede convivir
más de un requerimiento:
acceso a varios servicios
(logueo, autenticar, seguridad).
En que casos se presenta este asunto?
Loggin
Seguridad
Otros
aspectos
Sincronización
Funcionalidad
Gestión de
Memoria
Gestión de
Errores
Y cómo podemos
resolver este tipo
de código
A través de la
Programación
Orientada a
los Aspectos
Definición
• Es una metodología de
programación que aspira a
resolver el problema del
código transversal.
• Es soportado por los
“lenguajes de aspectos” que
proporcionan constructores
para capturar los métodos
dispersos por todo el sistema.
Definición
Objetivos
Código mas
natural y
reducido
Código
reusable
Facilidad
para
depurar
Facilidad para
razonar sobre los
módulos
Aspect (Aspecto)
Es la funcionalidad que
atraviesa a lo largo de la
aplicación, que se va a
implementar de forma
modular y separada del resto
del sistema.
Ejemplo: logueo al
sistema, afecta a
todos los accesos al
sistema por cuestión
de seguridad.
Anatomía de un Aspecto
aspect MiCodigoDisperso{
//Attributes
//Methods
//Poincuts
//Advices
}
Jointpoint (Punto de Cruce)
Es un punto de
ejecución dentro del
sistema donde un
aspecto puede ser
conectado
Ejemplo: llamada a
un método, el
manejo de una
excepción o la
asignación de un
valor a una variable.
Jointpoint : Sintaxis
De construcción
call (new (Clase (nro parámetros)))
execution (new (Clase (nro parámetros)))
De llamado
execution (modificador(Clase.Metodo((nro
parámetros))
Pointcut (Puntos de Corte)
Conjunto definido
joinpoints. Se especifica
mediante Expresiones
Regulares o mediante
patrones de nombres (de
clases, métodos o
campos)
Ejemplo: invocar a los
metodos de una
clase, manejo de
excepciones de una
clase.
Pointcut: Sintaxis
call(void Clase.metodoA(int))
call(void Clase.metodoA(int)) ||
call(void Clase.metodoB(int))
pointcut mipunto():
call(void Clase.metodoA(int)) ||
call(void Clase.metodoB(int))
Advice (Aviso)
Implementa el
comportamiento
transversal, contiene el
código que implementa
la nueva funcionalidad.
Se inserta en los
Joinpoints
Ejemplo: un advice
de logueo, otro de
transacciones, etc.
Advice: Sintaxis
Ejecuta antes de alcanzar punto de enlace
before(): mi_pointcut() {
// sentencias
}
En un punto de enlace particular se ejecuta
después de que el programa proceda con
ese punto de enlace.
after(): mi_pointcut() {
// sentencias
}
Introduction (Introducción)
Permite añadir
métodos o atributos
a clases ya
existentes.
Ejemplo: agregar un
atributo para
auditoría que
almacenar la fecha de
la actualización de un
objeto,
Target(Destinatario)
Es el objeto que
contiene los
pointcuts
Ejemplo: el caso de
ClientesDAO
Weaver(Tejedor)
Es el encargado de
integrar el código base
con los aspectos, estos
son implementados en
los lenguajes
orientado aspectos
Lenguaje Orientado a los Aspectos
Lenguaje de Aspectos Lenguaje Base
AspectJ
Java Aspect Component
AspectWerkz
Java
AspectC
C
AspectC++
C++
AspectR
Ruby
Pythius
Python
AspectS
Apostle
SmallTalk
Ejemplo en POO
Ejemplo en POA
Conclusiones
• La POA es una tecnología relativamente
nueva.
• Son de destacar AspectJ y AspectC++,
lenguajes de OA en ser utilizados cada
vez por más programadores.
• AOP se extiende hacia todos las etapas
del diseño de software, en especial hacia
la etapa de análisis.
• Los conceptos introducidos en POA están
ingresando cada vez mas en los procesos
de desarrollo de software.