Está en la página 1de 35

Modelo de Orientación

a Aspectos

Noviembre, 2010

Ing. Sahyra Yépez


Agenda
 ¿Qué es el Modelo Orientado a Aspectos?
 ¿Qué es un Aspecto?
 Programación Orientada a Aspectos
 Funcionamiento de POA
 Características de POA
 Tejido estático Vs. dinámico
 Lenguajes Orientados a Aspectos
 Comparación entre POA y POO
 Ventajas y Desventajas
¿Qué es el Modelo Orientado a
Aspectos?

 Define un mecanismo que ayuda a resolver


problemas complementarios de código
disperso o scattered (un mismo servicio es
invocado de manera similar desde muchas
partes del programa) y código enmarañado o
tangled (una misma operación tiene que
acceder a varios servicios, además de cumplir
con su función específica).
¿Qué es el Modelo Orientado a
Aspectos?

 Provee una unidad modular llamada


aspecto y un mecanismo de
composición que permite entremezclar
unidades modulares de
comportamiento común con otras
unidades modulares básicas del
sistema.
¿Qué es el Modelo Orientado a
Aspectos?

Fig. 1: Proceso de tejido de Aspectos con el código base


¿Qué es el Modelo Orientado a
Aspectos?

 OA se basa en el principio de
“separation of concerns” (separación
de intereses, asuntos o propiedades
del sistema).
 Este principio se orienta hacia la
descomposición del dominio del
problema y de la solución.
¿Qué es el Modelo Orientado a
Aspectos?

Fig. 2: Descomposición Modular Vs. Aspectual


¿Qué es el Modelo Orientado a
Aspectos? Ejemplo 1
Existen Conceptos entrecruzados:
Clase Libro {
….. * Errores
<todas las cosas de libro>
<manejo de errores>
* Seguridad

}

Clase Alquiler {…..


Clase Socio {
….. <todas las cosas de alquiler>
<todas las cosas de socio>
<manejo de errores>
<manejo de errores>
<controles de acceso>
<controles de acceso>
} }
¿Qué es un Aspecto?

 “Un aspecto es una unidad modular


que se disemina por la estructura de
otras unidades funcionales. Los
aspectos existen tanto en la etapa de
diseño como en la de
implementación...” (G. Kiczales).
¿Qué es un Aspecto?
 Un componente es aquella propiedad que
se puede encapsular claramente en un
procedimiento (un objeto, un método, un
API), mientras que un aspecto no se puede
encapsular en un procedimiento con los
lenguajes tradicionales.

 Los aspectos no suelen ser unidades de


descomposición funcional del sistema, sino
propiedades que afectan al rendimiento o la
semántica de los componentes.
¿Qué es un Aspecto?

 Algunos ejemplos de aspectos son:


 Patrones de acceso a memoria.

 Sincronización de procesos
concurrentes.
 Manejo de errores.

 Manejo de persistencia, etc.


Programación Orientada a
Aspectos

 Es un paradigma de programación
cuya intención es permitir una
adecuada modularización de las
aplicaciones y posibilitar una mejor
separación de incumbencias.
Programación Orientada a
Aspectos

 Objetivo: Separación de las


funcionalidades dentro del sistema:
• Por un lado funcionalidades comunes
utilizadas a lo largo de la aplicación.
• Por otro lado, las funcionalidades
propias de cada módulo.
Programación Orientada a
Aspectos

Una implementación basada en POA


consiste en:
 El lenguaje base o componente para
programar la funcionalidad básica.
 Uno o más lenguajes de aspectos para
especificar los aspectos.
Programación Orientada a
Aspectos

 Un tejedor de aspectos para la


combinación de los lenguajes.
 El programa escrito en el lenguaje
componente que implementa los
componentes.
 Uno o más programas de aspectos que
implementan los aspectos.
Programación Orientada a
Aspectos

Fig. 3: Estructura POA


Funcionamiento de POA
Consiste de tres Pasos:
1. Descomposición de aspectos:
es
descomponer los requerimientos para
distinguir aquellos que son componentes de
los que son aspectos.
2. Implementación de requerimientos:
implementar cada requerimiento por
separado.
3. Recomposición: dar las reglas de
recomposición que permitan combinar el
sistema completo.
Características de POA
Las características relevantes de la POA se
pueden definir de la siguiente forma:

1. Punto de unión o enlace (join point): por


ejemplo, una llamada a un método, o un
constructor, o el acceso a un miembro de
una clase en particular.
2. Intersección o punto de corte (pointcut): por
ejemplo, "llamadas a los métodos que
empiecen por set".
Características de POA
3. Guía/Consejo/Orientación (advice): por
ejemplo el before, que se ejecuta antes de
un punto de unión o el after que se ejecuta
después.
4. Aspecto (aspect): es la combinación de
advices y puntos de corte.
5. Weaving (tejido): es el proceso de insertar
aspectos en el código de la aplicación en el
punto apropiado.
Tejido Estático Vs. Tejido
Dinámico
 El tejido estático consiste en la modificación
en tiempo de compilación del código fuente,
insertando llamadas a las rutinas específicas
de los aspectos.
Tejido Estático Vs. Tejido
Dinámico
 El tejido dinámico requiere que los aspectos
existan y estén presentes de forma explícita
tanto en tiempo de compilación como en
tiempo de ejecución.
Tejido Estático Vs. Tejido
Dinámico

Tejido Estático Tejido Dinámico

Mayor eficiencia (menor sobrecarga en ejecución). Decrementa la eficiencia de la aplicación.

Menor flexibilidad. Mayor flexibilidad y libertad al programador.

Mayor seguridad obtenida efectuando controles


Pone en riesgo la seguridad de la aplicación.
en compilación.

Más fáciles de implementar. Implementación más compleja.


Lenguajes Orientados a Aspectos

 Hasta ahora se han distinguido dos enfoques


diferentes en el diseño de los lenguajes de
aspectos: los lenguajes de aspectos de
dominio específico y los lenguajes de
aspectos de propósito general.
Lenguajes Orientados a Aspectos

Lenguajes de aspectos de dominio específico:


 Son capaces de manejar uno o más aspectos,
pero no pueden manejar otros aspectos más
allá para los cuales fueron diseñados.
 Tienen un nivel de abstracción mayor que el
lenguaje base.
 Expresan los conceptos de dominio específico
en un nivel de representación más alto.
Lenguajes Orientados a Aspectos

Algunos ejemplos de LOA de dominio


específico son:
 COOL (COOrdination Language), de Xerox, un
lenguaje para sincronización de hilos
concurrentes.
 RIDL (Remote Interaction and Data transfers
Language), para el aspecto de distribución:
invocación remota y transferencia de datos.
Lenguajes Orientados a Aspectos

Lenguajes de aspectos de propósito general :


 Son diseñados para describir cualquier clase
de aspecto, no solo específicos, por lo que no
pueden imponer restricciones al lenguaje
base.
 El nivel de abstracción del lenguaje base y
del lenguaje de aspectos de propósito
general es el mismo.
Lenguajes Orientados a Aspectos

Un ejemplo de LOA de propósito


general es AspectJ, donde Java es el
lenguaje base, y las instrucciones de los
aspectos también se escriben en Java.

 La principal desventaja de este tipo de


lenguaje es que no garantizan la separación
de conceptos.
Comparación entre POA y POO
 La mayor fortaleza de la POO se demuestra
cuando hay que modelar conceptos
comunes. Sin embargo, falla al modelar los
conceptos que se entrecruzan.
 POA logra este objetivo al tratar los
conceptos entrecruzados como elementos de
primera clase.
 Tanto la POA como la POO crean
implementaciones modularizadas y con
mínimo acoplamiento.
Comparación entre POA y POO
Ventajas POA
 Ayuda a superar los problemas causados por
el Código Mezclado y Código Diseminado.

 Implementación modularizada.

 Mayor escalabilidad, permite agregar nuevos


aspectos, modificar y / o remover aspectos
existentes fácilmente.

 Mayor reusabilidad.
Desventajas POA
 El diseño de los puntos de enlace entre los
aspectos es más complejo.

 Posibles choques entre el código funcional y


el código de aspectos.

 Posibles choques entre los aspectos.

 Pueden existir problemas de herencia de un


aspecto a otro.
Ejemplo 2: Biblioteca
Class Biblioteca { public void ingresarSocio(socio S){
private libro [] libros ; if controlDeAccesoValido() then{
private socio [] socios; // código del método
}
public Biblioteca() { else{
… generarExcepcion();
}
public void prestamo( socio S, libro L) { }
if controlDeAccesoValido() then{ // demás métodos…
// código del método }
}
else{
generarExcepcion(); Control de acceso
} Funcionalidad básica
}
Definición de un aspecto
Aspecto Control {
Punto de enlace
operacionesSeguras = llamadas a Biblioteca.prestamo &
llamadas a Biblioteca.ingresarSocio& ...

antes de operacionesSeguras: {
if !=(controlDeAccesoValido()) then{
generarExcepcion();
}
}
}
Modelo de Orientación
a Aspectos

¿Preguntas?

Ing. Sahyra Yépez


Referencias
 PROGRAMACIÓN ORIENTADA A ASPECTOS:
Análisis del paradigma.
http://www.lafhis.dc.uba.ar/~ferto/docs/tesis.pdf
 Visión General de la Programación Orientada a
Aspectos. http://www.willydev.net/descargas/abcpoa.pdf
 El Desarrollo de Software Orientado a Aspectos.
http://pisis.unalmed.edu.co/avances/archivos/ediciones/Edi
cion%20Avances%202008%202/08.pdf