SlideShare une entreprise Scribd logo
1  sur  55
Programación Orientada a
Aspectos (POA)
Expositor: Alex
http://javatutoriales.blogspot.com/
Se permite hacer preguntas en cualquier momento.
Agenda
31/01/2015 Alex – Programación Orientada a Aspectos2
• ¿Qué la POA?
• Objetivo de la POA
• Problemas de Otros Paradigmas
• AspectJ
• Anatomía de un Aspecto
• Ejemplos y Conceptos Importantes
¿Qué es la POA?
Es un paradigma de Programación cuya intención
es permitir una adecuada modularización de las
aplicaciones y posibilita una adecuada separación
de conceptos.
31/01/2015 Alex – Programación Orientada a Aspectos3
Complemento de POO
Objetivo de la POA
El principal objetivo de la POA es la separación
de las funcionalidades dentro del sistema.
31/01/2015 Alex – Programación Orientada a Aspectos4
•Por un lado las funcionalidades comunes
utilizadas a lo largo de la aplicación
•Por otro lado las funcionalidades propias de
cada modulo
¿Qué es un Aspecto?
Es un proceso realizado dentro de una clase pero
que no es parte de la misma.
La verificación de permisos es un aspecto, el
registro de bitácora es un aspecto, el manejo de
errores es un aspecto.
El proceso que no es inherente a una sola clase y
que tiene identidad propia.
31/01/2015 Alex – Programación Orientada a Aspectos5
Problemas de Otros Paradigmas
• Código disperso (Scattered code): El mismo
código distribuido por toda, o gran parte de la
aplicación.
• Código enmarañado (Tangled code): Un
mismo módulo implementa múltiples
comportamientos de forma simultanea.
31/01/2015 Alex – Programación Orientada a Aspectos6
Problemas de Otros Paradigmas (2)
En la POO, se tiene una clase que un momento
dado necesita la funcionalidad de otra.
Para ello crea un nuevo objeto de dicha clase y
utiliza los métodos proporcionados.
31/01/2015 Alex – Programación Orientada a Aspectos7
Conceptos Cruzados
public class ClaseDeNegocio
{
public void metodoNegocio()
{
//Asegurar autorización
//Asegurar que la información cubra con los requerimientos
//Bloquear el objeto para asegurar la concurrencia
//Registrar en la bitácora el inicio de la operación
//Realizar la operación de negocio
//Registrar en la bitácora el fin de la operación
//Desbloquear el objeto
}
}
31/01/2015 Alex – Programación Orientada a Aspectos8
Código Enmarañado (Tangling)
31/01/2015 Alex – Programación Orientada a Aspectos9
Seguridad
Registro de eventos
Manejo de errores
Verificación de datos
Lógica del Negocio
Código Disperso (Scattering)
Código Duplicado
31/01/2015 Alex – Programación Orientada a Aspectos10
Verificar Acceso
Autorizado
Contaduría
ContaduríaContaduría Banca por Internet
Atención a Clientes
Operaciones ExternasOperaciones ExternasOperaciones Externas
Código Disperso (Scattering) - (2)
Código Complementario
31/01/2015 Alex – Programación Orientada a Aspectos11
Usuarios
autenticados
Control de
Acceso
Administración
de permisos
Manejo de
sesión
Autorización
AspectJ
Es una extensión de Java para el desarrollo de
aplicaciones orientadas a aspectos.
Tiene un compilador especial que genera archivos
.class válidos para cualquier JVM.
31/01/2015 Alex – Programación Orientada a Aspectos12
Anatomía de un Aspecto
• Aspecto (Aspect)
• Punto de unión (Join Point)
• Consejo (Advice)
• Punto de corte (Pointcut)
• Destinatario (Target)
• Tejido (Weaving)
31/01/2015 Alex – Programación Orientada a Aspectos13
Primer Ejemplo de Uso de Aspectos
public class ComunicadorMensajes
{
public void muestraMensaje(String mensaje)
{
S.o.p(mensaje);
}
}
31/01/2015 Alex – Programación Orientada a Aspectos14
El método main
public class Prueba
{
public static void main(String[] args)
{
ComunicadorMensajes cm = new ComunicadorMensajes();
cm.muestraMensaje (“Hola, ¿quieres aprender AspectJ?”);
}
}
31/01/2015 Alex – Programación Orientada a Aspectos15
Nuestro Aspecto
public aspect AspectoModales
{
pointcut entregaMensaje():
call(* ComunicadorMensaje.muestraMensaje(..));
before(): entregaMensaje()
{
S.o.p(“Hola! “);
}
}
31/01/2015 Alex – Programación Orientada a Aspectos16
Anatomía del Aspecto - Aspecto
Es la funcionalidad transversal (crosscutting) que
se va a implementar de forma modular y separada
del resto del sistema.
31/01/2015 Alex – Programación Orientada a Aspectos17
Anatomia del Aspecto – Aspecto (2)
public aspect AspectoModales
{
pointcut entregaMensaje():
call(* ComunicadorMensaje.muestraMensaje(..));
before(): entregaMensaje()
{
S.o.p(“Hola! “);
}
}
31/01/2015 Alex – Programación Orientada a Aspectos18
Anatomía del Aspecto - Advice
Es la implementación del aspecto, es decir,
contiene el código que implementa la nueva
funcionalidad. Se inserta en la aplicación en los
puntos de cruce.
También definen el momento en el que se
ejecutará este código.
31/01/2015 Alex – Programación Orientada a Aspectos19
Anatomía del Aspecto – Advice (2)
public aspect AspectoModales
{
pointcut entregaMensaje():
call(* ComunicadorMensaje.muestraMensaje(..));
before(): entregaMensaje()
{
S.o.p(“Hola! “);
}
}
31/01/2015 Alex – Programación Orientada a Aspectos20
Anatomía del Aspecto – Referencias
• thisJoinPoint
• thisJoinPointStaticPart
• thisEnclosingJoinPointStaticPart
31/01/2015 Alex – Programación Orientada a Aspectos21
Anatomía del Aspecto - Pointcut
Define las partes de nuestro código Java en el que
se aplicarán los advices. Se especifican mediante
expresiones regulares o patrones de nombres, e
incluso dinámicamente en tiempo de ejecución
según el valor de ciertos parámetros.
Es el “¿dónde se ejecutará el aspecto?”
31/01/2015 Alex – Programación Orientada a Aspectos22
Anatomía del Aspecto – Pointcut (2)
public aspect AspectoModales
{
pointcut entregaMensaje():
call(* ComunicadorMensaje.muestraMensaje(..));
before(): entregaMensaje()
{
S.o.p(“Hola! “);
}
}
31/01/2015 Alex – Programación Orientada a Aspectos23
Anatomía del Aspecto – Weaving
Es el proceso de aplicar aspectos a los objetos y
clases Java para crear nuevos objetos en los
puntos de cruce. Este proceso puede ocurrir a lo
largo del ciclo de vida del destinatario:
31/01/2015 Alex – Programación Orientada a Aspectos24
• En tiempo de compilación.
• En tiempo de carga de las clases.
• En tiempo de ejecución.
Anatomía del Aspecto – Join Pont
Es un punto de ejecución dentro del sistema
donde el aspecto puede ser insertado, como una
llamada a un método, el lanzamiento de una
excepción, la modificación de un campo, etc.
El join point es definido dentro del pointcut.
31/01/2015 Alex – Programación Orientada a Aspectos25
pointcut entregaMensaje():call(* ComunicadorMensaje.muestraMensaje(..));
Join Points por Tipo
31/01/2015 Alex – Programación Orientada a Aspectos26
Categoría de Join Point Sintaxis
Ejecución de Método execution(FimaMetodo)
Llamada a Método call(FirmaMetodo)
Ejecución de Constructor execution(FirmaConstructor)
Llamada a Constructor call(FirmaConstructor)
Inicialización de Clase staticinitialization(FirmaTipo)
Lectura de un atributo get(FirmaAtributo)
Escritura de un atributo set(FirmaCampo)
Ejecución de manejo de Excepción handler(FirmaTipo
Inicialización de Objeto initialization(FirmaConstructor)
Pre-Inicialización de Objetos preinitialization(FirmaConstructor)
Ejecución del Advice adviceexecution()
Otros Pointcuts Importantes
Pointcut Descripción
within(PatronTipo) Cualquier join point dentro del scope de la clase indicado
o uno de sus subtipo.
withincode(PatronTipo) Cualquier join point dentro del scope de la clase
indicada, o clases anidadas.
this(FirmaTipo) Todos los join points donde la referencia “this” es del
tipo indicado, o sus subclases.
target(FirmaTipo) Todos los join points donde el objeto en el que se invoca
el método es del tipo indicado o sus subclases.
args(PatronTipo) Los join points en todos los métodos donde se reciban
los argumentos indicados.
if(condiciones) Todos los join points donde la condición indicada se
cumple.
31/01/2015 Alex – Programación Orientada a Aspectos27
Anatomía del Aspecto – Join Pont(2)
public static void main(String[] args)
{
ComunicadorMensajes cm = new ComunicadorMensajes();
cm.muestraMensaje (“Alan, ¿quieres aprender AspectJ?”);
}
31/01/2015 Alex – Programación Orientada a Aspectos28
pointcut entregaMensaje():
call(* ComunicadorMensaje.muestraMensaje(..));
Anatomía del Aspecto – Join Pont(3)
pointcut entregaMensaje():
execution(* ComunicadorMensaje.muestraMensaje(..));
31/01/2015 Alex – Programación Orientada a Aspectos29
public class ComunicadorMensajes
{
public void muestraMensaje(String mensaje)
{
S.o.p(mensaje);
}
}
¿Cómo logra AspectJ hacer esto?
Esta es, a grandes rasgos, la forma en la que
trabaja AspectJ:
31/01/2015 Alex – Programación Orientada a Aspectos30
1. Los aspectos son mapeados a clases Java.
2. Los advices se mapean a uno o más métodos.
3. Las llamadas a estos métodos se insertan en
los join points adecuados.
Advice
Ayuda a definir el “qué hacer”. Es una
construcción parecida a un método.
Existen tres tipos de advice:
31/01/2015 Alex – Programación Orientada a Aspectos31
• before: Se ejecuta antes del join point
• after: Se ejecuta después del join point
• around: Rodea la ejecución del advice. Este
advice es especial ya que tiene la habilidad de
evitar que el método se ejecute
Advice After
Se ejecuta después del join point. Existen tres
variaciones de este tipo de advice:
31/01/2015 Alex –Programación Orientada a Aspectos32
• Después de un regreso de una ejecución
normal.
• Después de un regreso por lanzarse una
excepción.
• Después de un regreso de cualquiera de las
formas anteriores.
Advice After
after(): call(* Cuenta.*(..)) {….}
after() returning : (* Cuenta.*(..)) {….}
after throwing : call(* Cuenta.*(..)) {….}
31/01/2015 Alex – Programación Orientada a Aspectos33
Ejemplo 2
31/01/2015 Alex – Programación Orientada a Aspectos34
Registro de Eventos
Ejemplo 3
31/01/2015 Alex – Programación Orientada a Aspectos35
Tiempo de Ejecución
Ejemplo 4
Manejo de Excepciones
31/01/2015 Alex – Programación Orientada a Aspectos36
Sintaxis de los Join Points
Los pointcuts identifican los join points en el flujo
del programa. Además exponen el contexto del join
point.
Los point cuts pueden ser anónimos o con nombres.
Los point cuts también son usados en cruzamientos
estáticos para declarar errores y warnings en tiempo
de compilación, así como para suavizar excepciones
31/01/2015 Alex – Programación Orientada a Aspectos37
Join Points con Nombre
Los point cuts con nombre son elementos que
pueden ser referenciados en múltiples lugares,
haciéndolos reutilizables.
31/01/2015 Alex – Programación Orientada a Aspectos38
pointcut operacionesContables() : call(* Cuenta.*(..));
before(): operacionesContables()
{
…
}
Join Points Anónimos
Son expresiones que se definen en el momento
de su uso. Como son anónimos, no pueden ser
referenciados en otro lugar a donde son definidos
31/01/2015 Alex – Programación Orientada a Aspectos39
before(): call(* Cuenta.*(..))
{
…
}
Patrones de Firmas en Pointcuts
Algunas veces un pointcut especifica un joinpoint
usando una forma particular, pero otras, identifica
join points por multiples firmas que estan
agrupados usando patrones de coincidencia.
31/01/2015 Alex – Programación Orientada a Aspectos40
• “*” cualquier número de caracteres, excepto puntos
• “..” Cualquier número de caracteres, incluyendo
puntos
• “+” Cualquier subclase o subinterface de un tipo
dado
Operadores
AspectJ proporciona 3 operadores:
• “!” Negación
• “||” or lógico
• “&&” and lógico
31/01/2015 Alex – Programación Orientada a Aspectos41
Patrones de Firmas en Pointcuts (2)
Existen tres tipos de patrones de firmas:
• Patrones de Tipos (clases, interfaces)
• Patrones de Métodos y Constructores
• Patrones de Atributos
31/01/2015 Alex – Programación Orientada a Aspectos42
Patrones de Tipos
Patrón de Firma Tipos Encontrados
Cuenta Tipos con nombre “Cuenta”
Cuenta* Tipos con nombre iniciado en “Cuenta” como
“CuentaAhorros” o “CuentaCheques”
java.*.Date “java.util.Date” y “java.sql.Date”
java..* Paquete “java” o subpaquetes a cualquier nivel
javax..*Model+ Paquete “javax” o subpaquetes con tipos terminados
en “Model” y sus subclases
!Vector Todos los tipos que NO son “Vector”
Vector || Hashtable Los tipos “Vector” o “Hashtable”
java.util.RandomAccess+
&& java.util.List+
Todos los tipos que implementen las dos interfaces
indicadas. En este caso “java.util.ArrayList”
31/01/2015 Alex – Programación Orientada a Aspectos43
Patrones de Métodos
Patrón de Firma Métodos Encontrados
public void Collection.clear() Directo
public void Cuenta.debito(float)
throws ExcepcionBalanceInsuficiente
Directo
public void Cuenta.set*(*) Métodos de la clase “Cuenta” que inician
con “set” y reciben un solo argumento de
cualquier tipo
public void Cuenta.*() Todos los métodos “public” de la clase
“Cuenta” que no tomen argumentos
public * Cuenta.*(..) Todos los métodos de la clase “Cuenta”
sin importar el tipo de retorno o los
argumentos que recieban
* java.io.Reader.read(char[], ..)
* javax..*.add*Listener(EventListener+)
* *.*(..) throws RemoteException
31/01/2015 Alex – Programación Orientada a Aspectos44
Patrones de Constructores
Patrón de Firma Constructores Encontrados
public Cuenta.new() Invocación del constructor de la clase “Cuenta”
public Cuenta.new(int) Invocación del constructor de la clase “Cuenta”
que reciba un solo argumento de tipo “int”
public Cuenta.new(..) La invocación un constructor de la clase
“Cuenta” que reciba cualquier número de
argumentos
31/01/2015 Alex – Programación Orientada a Aspectos45
Como un constructor no tiene un tipo de retorno, no
hay un valor permitido. Además como los
constructores no tienen nombre como los métodos
normales, el método es sustituido por “new”.
Patrones de Atributos
Debe especificar el nombre del campo, el tipo, y
los modificadores.
31/01/2015 Alex – Programación Orientada a Aspectos46
Patrón de Firma Atributos Encontrados
private float Cuenta.balance Campo privado “balance” de la clase “Cuenta”
* Cuenta.* Todos los campos de la clase “Cuenta” sin importar
su modificador de acceso, tipo o nombre
!public static * banco.. *.* Todos los campos static no públicos de “banco” y
sus subpaquetes directos e indirectos
public !final *.* Los campos públicos no final de todas las clases
Pasando el Contexto de un Join
Point a un Advice
before(Cuenta cuenta, float cantidad) :
call(void Cuenta.credito(float))
&& target(cuenta)
&& args(cantidad)
{
S.o.p(“Acreditando “ + cantidad + “ a “ +
cuenta);
}
31/01/2015 Alex – Programación Orientada a Aspectos47
Pasando el Contexto de un Join
Point a un Advice (2)
pointcut operacionCredito(Cuenta cuenta, float cantidad):
call(void Cuenta.credito(float))
&& target(cuenta)
&& args(cantidad);
before(Cuenta cuenta, float cantidad) :
operaciónCredito(cuenta, cantidad)
{
S.o.p(“Acreditando ” + cantidad + “ a “ + cuenta);
}
31/01/2015 Alex – Programación Orientada a Aspectos48
Pasando el Contexto de un Join
Point a un Advice (3)
after() throwing(RemoteException ex) :
call(* *.*(..) throws RemoteExcption
{
S.o.p(“Exception “ + ex + “ cuando se
ejecutaba ” + thisJoinPoint);
}
31/01/2015 Alex – Programación Orientada a Aspectos49
Ejemplo 5
Valor de las Variables
31/01/2015 Alex – Programación Orientada a Aspectos50
Ejemplo 6
this
31/01/2015 Alex – Programación Orientada a Aspectos51
Ejemplo 7
Join Points condicionales
31/01/2015 Alex – Programación Orientada a Aspectos52
Ejemplo 8
Declaración de Errores
31/01/2015 Alex – Programación Orientada a Aspectos53
¿Preguntas?
31/01/2015 Alex - Programación Orientada a Aspectos54
Gracias
31/01/2015 Alex - Programación Orientada a Aspectos55
programadorjavablog@gmail.com
http://javatutoriales.blogspot.com/
Java Tutoriales en Facebook

Contenu connexe

Tendances

Técnicas para la Obtención de Requerimientos
Técnicas para la Obtención de RequerimientosTécnicas para la Obtención de Requerimientos
Técnicas para la Obtención de RequerimientosJuan Carlos Olivares Rojas
 
Especificación y resultados de las pruebas de software
Especificación y resultados de las pruebas de softwareEspecificación y resultados de las pruebas de software
Especificación y resultados de las pruebas de softwareJesús E. CuRias
 
C4model - Arquitectura de Software
C4model - Arquitectura de SoftwareC4model - Arquitectura de Software
C4model - Arquitectura de SoftwareRene Guaman-Quinche
 
Equipo 6 programacion hibrida
Equipo 6 programacion hibridaEquipo 6 programacion hibrida
Equipo 6 programacion hibridagabo
 
Ventajas y desventajas de moprosoft
Ventajas y desventajas de moprosoftVentajas y desventajas de moprosoft
Ventajas y desventajas de moprosoftChuyito Alvarado
 
Caso de Uso
Caso de UsoCaso de Uso
Caso de Usoutrilla
 
Diagrama de actividades inscripcion, evaluacion, Asistencia
Diagrama de actividades inscripcion, evaluacion, AsistenciaDiagrama de actividades inscripcion, evaluacion, Asistencia
Diagrama de actividades inscripcion, evaluacion, AsistenciaRobert Rodriguez
 
Diagramas de actividad
Diagramas de actividadDiagramas de actividad
Diagramas de actividadJulio Pari
 
Aseguramiento de la calidad en software III
Aseguramiento de la calidad en software IIIAseguramiento de la calidad en software III
Aseguramiento de la calidad en software IIITensor
 
Casos practicos puntos_de_funcion1
Casos practicos puntos_de_funcion1Casos practicos puntos_de_funcion1
Casos practicos puntos_de_funcion1Homero Jimenez
 
Fundamentos de Ingenieria de Software - Unidad 1 modelo de negocios
Fundamentos de Ingenieria de Software - Unidad 1 modelo de negociosFundamentos de Ingenieria de Software - Unidad 1 modelo de negocios
Fundamentos de Ingenieria de Software - Unidad 1 modelo de negociosJosé Antonio Sandoval Acosta
 

Tendances (20)

Multitarea e hilos en java con ejemplos
Multitarea e hilos en java con ejemplosMultitarea e hilos en java con ejemplos
Multitarea e hilos en java con ejemplos
 
Técnicas para la Obtención de Requerimientos
Técnicas para la Obtención de RequerimientosTécnicas para la Obtención de Requerimientos
Técnicas para la Obtención de Requerimientos
 
Especificación y resultados de las pruebas de software
Especificación y resultados de las pruebas de softwareEspecificación y resultados de las pruebas de software
Especificación y resultados de las pruebas de software
 
Diapositivas xp
Diapositivas xpDiapositivas xp
Diapositivas xp
 
C4model - Arquitectura de Software
C4model - Arquitectura de SoftwareC4model - Arquitectura de Software
C4model - Arquitectura de Software
 
Equipo 6 programacion hibrida
Equipo 6 programacion hibridaEquipo 6 programacion hibrida
Equipo 6 programacion hibrida
 
Ventajas y desventajas de moprosoft
Ventajas y desventajas de moprosoftVentajas y desventajas de moprosoft
Ventajas y desventajas de moprosoft
 
Acceso Directo de Memoria
Acceso Directo de MemoriaAcceso Directo de Memoria
Acceso Directo de Memoria
 
Procesos
ProcesosProcesos
Procesos
 
Diagrama de secuencia UML
Diagrama de secuencia UMLDiagrama de secuencia UML
Diagrama de secuencia UML
 
Caso de Uso
Caso de UsoCaso de Uso
Caso de Uso
 
Diagrama de actividades inscripcion, evaluacion, Asistencia
Diagrama de actividades inscripcion, evaluacion, AsistenciaDiagrama de actividades inscripcion, evaluacion, Asistencia
Diagrama de actividades inscripcion, evaluacion, Asistencia
 
Diagramas de actividad
Diagramas de actividadDiagramas de actividad
Diagramas de actividad
 
5. Métodos de Prueba de Software
5. Métodos de Prueba de Software5. Métodos de Prueba de Software
5. Métodos de Prueba de Software
 
Aseguramiento de la calidad en software III
Aseguramiento de la calidad en software IIIAseguramiento de la calidad en software III
Aseguramiento de la calidad en software III
 
Acceso Directo A Memoria
Acceso Directo A MemoriaAcceso Directo A Memoria
Acceso Directo A Memoria
 
Casos practicos puntos_de_funcion1
Casos practicos puntos_de_funcion1Casos practicos puntos_de_funcion1
Casos practicos puntos_de_funcion1
 
MVC
MVCMVC
MVC
 
Fundamentos de Ingenieria de Software - Unidad 1 modelo de negocios
Fundamentos de Ingenieria de Software - Unidad 1 modelo de negociosFundamentos de Ingenieria de Software - Unidad 1 modelo de negocios
Fundamentos de Ingenieria de Software - Unidad 1 modelo de negocios
 
Proyecto fernando compiladores 1
Proyecto fernando compiladores 1Proyecto fernando compiladores 1
Proyecto fernando compiladores 1
 

En vedette

En vedette (20)

Programacion orientada a objetos cel2015
Programacion orientada a objetos cel2015Programacion orientada a objetos cel2015
Programacion orientada a objetos cel2015
 
Modals
ModalsModals
Modals
 
Roberto a
Roberto aRoberto a
Roberto a
 
Verbos modales
Verbos modalesVerbos modales
Verbos modales
 
Guia n°4 Vectores
Guia n°4 VectoresGuia n°4 Vectores
Guia n°4 Vectores
 
Modals Verbs
Modals VerbsModals Verbs
Modals Verbs
 
Verbos modales
Verbos modalesVerbos modales
Verbos modales
 
Sesion6
Sesion6Sesion6
Sesion6
 
The modal verbs - ALL IN ENGLISH
The modal verbs - ALL IN ENGLISHThe modal verbs - ALL IN ENGLISH
The modal verbs - ALL IN ENGLISH
 
Modals for speculation
Modals for speculationModals for speculation
Modals for speculation
 
Modals: can, could, may, might, should, have to, must
Modals: can, could, may, might, should, have to, mustModals: can, could, may, might, should, have to, must
Modals: can, could, may, might, should, have to, must
 
Past modal
Past modal      Past modal
Past modal
 
Modals verbs eliana (1)
Modals verbs eliana (1)Modals verbs eliana (1)
Modals verbs eliana (1)
 
Past modals
Past modals     Past modals
Past modals
 
Verbos modales (modals) (1)
Verbos modales (modals) (1)Verbos modales (modals) (1)
Verbos modales (modals) (1)
 
Presentación verbs modals
Presentación verbs modalsPresentación verbs modals
Presentación verbs modals
 
speculation
speculationspeculation
speculation
 
Advisability in the past
Advisability in the pastAdvisability in the past
Advisability in the past
 
Modal Verbs of Deduction
Modal Verbs of DeductionModal Verbs of Deduction
Modal Verbs of Deduction
 
Presentacion verbos modales
Presentacion verbos modalesPresentacion verbos modales
Presentacion verbos modales
 

Similaire à Programación orientada a aspectos

AOP - OSUM springperu(1era Reunion)
AOP - OSUM springperu(1era Reunion)AOP - OSUM springperu(1era Reunion)
AOP - OSUM springperu(1era Reunion)Mayer Horna
 
Trabajo de Christian Oblitas
Trabajo de Christian OblitasTrabajo de Christian Oblitas
Trabajo de Christian OblitasChristian1705
 
Ciclo De Vida De Los Sistemas
Ciclo De Vida De Los SistemasCiclo De Vida De Los Sistemas
Ciclo De Vida De Los SistemasUNM
 
Ciclo De Vida De Los Sistemas
Ciclo De Vida De Los SistemasCiclo De Vida De Los Sistemas
Ciclo De Vida De Los SistemasUNM
 
Introducción a la Programación
Introducción a la ProgramaciónIntroducción a la Programación
Introducción a la ProgramaciónPablo Parola
 
Introducción A La Programación
Introducción A La ProgramaciónIntroducción A La Programación
Introducción A La ProgramaciónPablo Parola
 
Programa UML- Clase 1
Programa UML- Clase 1Programa UML- Clase 1
Programa UML- Clase 1Carlos_lvm
 
Metodologías Agiles - APIT - UTN FRBA
Metodologías Agiles - APIT - UTN FRBAMetodologías Agiles - APIT - UTN FRBA
Metodologías Agiles - APIT - UTN FRBAGustavo Andres Brey
 
Fases del Modelo para Construccion de Solcuiones
Fases del Modelo para Construccion de SolcuionesFases del Modelo para Construccion de Solcuiones
Fases del Modelo para Construccion de SolcuionesMario Solarte
 
proceso unificado de desarrollo parte 1
proceso unificado de desarrollo parte 1proceso unificado de desarrollo parte 1
proceso unificado de desarrollo parte 1Rodrigo Cerón
 
Fundamentos de ingenieria de software - metodologias.pdf
Fundamentos de ingenieria de software - metodologias.pdfFundamentos de ingenieria de software - metodologias.pdf
Fundamentos de ingenieria de software - metodologias.pdfBibliotecaenlineaUNI
 

Similaire à Programación orientada a aspectos (20)

AOP - OSUM springperu(1era Reunion)
AOP - OSUM springperu(1era Reunion)AOP - OSUM springperu(1era Reunion)
AOP - OSUM springperu(1era Reunion)
 
Poa 01
Poa 01Poa 01
Poa 01
 
Trabajo de Christian Oblitas
Trabajo de Christian OblitasTrabajo de Christian Oblitas
Trabajo de Christian Oblitas
 
Software engineeringparte2 (1)
Software engineeringparte2 (1)Software engineeringparte2 (1)
Software engineeringparte2 (1)
 
Software engineeringparte2 (1)
Software engineeringparte2 (1)Software engineeringparte2 (1)
Software engineeringparte2 (1)
 
Ciclo De Vida De Los Sistemas
Ciclo De Vida De Los SistemasCiclo De Vida De Los Sistemas
Ciclo De Vida De Los Sistemas
 
Ciclo De Vida De Los Sistemas
Ciclo De Vida De Los SistemasCiclo De Vida De Los Sistemas
Ciclo De Vida De Los Sistemas
 
ALGORITMOS y ejemplo en java.pptx
ALGORITMOS  y ejemplo en java.pptxALGORITMOS  y ejemplo en java.pptx
ALGORITMOS y ejemplo en java.pptx
 
Introducción a la Programación
Introducción a la ProgramaciónIntroducción a la Programación
Introducción a la Programación
 
Introducción A La Programación
Introducción A La ProgramaciónIntroducción A La Programación
Introducción A La Programación
 
Programa UML- Clase 1
Programa UML- Clase 1Programa UML- Clase 1
Programa UML- Clase 1
 
Aop
AopAop
Aop
 
Diseño orientado a objeto
Diseño orientado a objetoDiseño orientado a objeto
Diseño orientado a objeto
 
Metodologías Agiles - APIT - UTN FRBA
Metodologías Agiles - APIT - UTN FRBAMetodologías Agiles - APIT - UTN FRBA
Metodologías Agiles - APIT - UTN FRBA
 
Fases del Modelo para Construccion de Solcuiones
Fases del Modelo para Construccion de SolcuionesFases del Modelo para Construccion de Solcuiones
Fases del Modelo para Construccion de Solcuiones
 
Rup (iteraciones)
Rup (iteraciones)Rup (iteraciones)
Rup (iteraciones)
 
s02E42020-1
s02E42020-1s02E42020-1
s02E42020-1
 
proceso unificado de desarrollo parte 1
proceso unificado de desarrollo parte 1proceso unificado de desarrollo parte 1
proceso unificado de desarrollo parte 1
 
Ciclo de vida cascada
Ciclo de vida cascadaCiclo de vida cascada
Ciclo de vida cascada
 
Fundamentos de ingenieria de software - metodologias.pdf
Fundamentos de ingenieria de software - metodologias.pdfFundamentos de ingenieria de software - metodologias.pdf
Fundamentos de ingenieria de software - metodologias.pdf
 

Plus de programadorjavablog

Patrones de diseño(presentación 7)
Patrones de diseño(presentación 7)Patrones de diseño(presentación 7)
Patrones de diseño(presentación 7)programadorjavablog
 
Conceptos de código limpio (presentación 5)
Conceptos de código limpio (presentación 5)Conceptos de código limpio (presentación 5)
Conceptos de código limpio (presentación 5)programadorjavablog
 
Conceptos avanzados oo (presentación 4)
Conceptos avanzados oo (presentación 4)Conceptos avanzados oo (presentación 4)
Conceptos avanzados oo (presentación 4)programadorjavablog
 
Curso scjp 30 navegacion de archivos e io
Curso scjp 30   navegacion de archivos e ioCurso scjp 30   navegacion de archivos e io
Curso scjp 30 navegacion de archivos e ioprogramadorjavablog
 
Curso scjp 30 navegacion de archivos e io
Curso scjp 30   navegacion de archivos e ioCurso scjp 30   navegacion de archivos e io
Curso scjp 30 navegacion de archivos e ioprogramadorjavablog
 
Curso scjp 4 declaracion de clases
Curso scjp 4   declaracion de clasesCurso scjp 4   declaracion de clases
Curso scjp 4 declaracion de clasesprogramadorjavablog
 
Curso scjp 3 identificadores y control de acceso
Curso scjp 3   identificadores y control de accesoCurso scjp 3   identificadores y control de acceso
Curso scjp 3 identificadores y control de accesoprogramadorjavablog
 
Curso scjp 2 recordatorio de java
Curso scjp 2   recordatorio de javaCurso scjp 2   recordatorio de java
Curso scjp 2 recordatorio de javaprogramadorjavablog
 

Plus de programadorjavablog (20)

Hibernate - Relaciones
Hibernate - RelacionesHibernate - Relaciones
Hibernate - Relaciones
 
Hibernate - Introducción
Hibernate - IntroducciónHibernate - Introducción
Hibernate - Introducción
 
Patrones de diseño(presentación 7)
Patrones de diseño(presentación 7)Patrones de diseño(presentación 7)
Patrones de diseño(presentación 7)
 
Uml (presentación 6)
Uml (presentación 6)Uml (presentación 6)
Uml (presentación 6)
 
Conceptos de código limpio (presentación 5)
Conceptos de código limpio (presentación 5)Conceptos de código limpio (presentación 5)
Conceptos de código limpio (presentación 5)
 
Conceptos avanzados oo (presentación 4)
Conceptos avanzados oo (presentación 4)Conceptos avanzados oo (presentación 4)
Conceptos avanzados oo (presentación 4)
 
Java 5 se (presentación3)
Java 5 se (presentación3)Java 5 se (presentación3)
Java 5 se (presentación3)
 
Lenguaje java5 (presentación2)
Lenguaje java5 (presentación2)Lenguaje java5 (presentación2)
Lenguaje java5 (presentación2)
 
Conceptos poo (presentación1)
Conceptos poo (presentación1)Conceptos poo (presentación1)
Conceptos poo (presentación1)
 
Curso scjp 30 navegacion de archivos e io
Curso scjp 30   navegacion de archivos e ioCurso scjp 30   navegacion de archivos e io
Curso scjp 30 navegacion de archivos e io
 
Curso scjp 30 navegacion de archivos e io
Curso scjp 30   navegacion de archivos e ioCurso scjp 30   navegacion de archivos e io
Curso scjp 30 navegacion de archivos e io
 
7iSF-4 test driver development
7iSF-4   test driver development7iSF-4   test driver development
7iSF-4 test driver development
 
7iSF-3 scrum
7iSF-3   scrum7iSF-3   scrum
7iSF-3 scrum
 
7iSF-2 rup
7iSF-2   rup7iSF-2   rup
7iSF-2 rup
 
7iSF-1 ingeniería de software
7iSF-1   ingeniería de software7iSF-1   ingeniería de software
7iSF-1 ingeniería de software
 
7iSF-6 temas extra
7iSF-6   temas extra7iSF-6   temas extra
7iSF-6 temas extra
 
7iSF-5 cmm
7iSF-5   cmm7iSF-5   cmm
7iSF-5 cmm
 
Curso scjp 4 declaracion de clases
Curso scjp 4   declaracion de clasesCurso scjp 4   declaracion de clases
Curso scjp 4 declaracion de clases
 
Curso scjp 3 identificadores y control de acceso
Curso scjp 3   identificadores y control de accesoCurso scjp 3   identificadores y control de acceso
Curso scjp 3 identificadores y control de acceso
 
Curso scjp 2 recordatorio de java
Curso scjp 2   recordatorio de javaCurso scjp 2   recordatorio de java
Curso scjp 2 recordatorio de java
 

Dernier

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 

Dernier (10)

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 

Programación orientada a aspectos

  • 1. Programación Orientada a Aspectos (POA) Expositor: Alex http://javatutoriales.blogspot.com/ Se permite hacer preguntas en cualquier momento.
  • 2. Agenda 31/01/2015 Alex – Programación Orientada a Aspectos2 • ¿Qué la POA? • Objetivo de la POA • Problemas de Otros Paradigmas • AspectJ • Anatomía de un Aspecto • Ejemplos y Conceptos Importantes
  • 3. ¿Qué es la POA? Es un paradigma de Programación cuya intención es permitir una adecuada modularización de las aplicaciones y posibilita una adecuada separación de conceptos. 31/01/2015 Alex – Programación Orientada a Aspectos3 Complemento de POO
  • 4. Objetivo de la POA El principal objetivo de la POA es la separación de las funcionalidades dentro del sistema. 31/01/2015 Alex – Programación Orientada a Aspectos4 •Por un lado las funcionalidades comunes utilizadas a lo largo de la aplicación •Por otro lado las funcionalidades propias de cada modulo
  • 5. ¿Qué es un Aspecto? Es un proceso realizado dentro de una clase pero que no es parte de la misma. La verificación de permisos es un aspecto, el registro de bitácora es un aspecto, el manejo de errores es un aspecto. El proceso que no es inherente a una sola clase y que tiene identidad propia. 31/01/2015 Alex – Programación Orientada a Aspectos5
  • 6. Problemas de Otros Paradigmas • Código disperso (Scattered code): El mismo código distribuido por toda, o gran parte de la aplicación. • Código enmarañado (Tangled code): Un mismo módulo implementa múltiples comportamientos de forma simultanea. 31/01/2015 Alex – Programación Orientada a Aspectos6
  • 7. Problemas de Otros Paradigmas (2) En la POO, se tiene una clase que un momento dado necesita la funcionalidad de otra. Para ello crea un nuevo objeto de dicha clase y utiliza los métodos proporcionados. 31/01/2015 Alex – Programación Orientada a Aspectos7
  • 8. Conceptos Cruzados public class ClaseDeNegocio { public void metodoNegocio() { //Asegurar autorización //Asegurar que la información cubra con los requerimientos //Bloquear el objeto para asegurar la concurrencia //Registrar en la bitácora el inicio de la operación //Realizar la operación de negocio //Registrar en la bitácora el fin de la operación //Desbloquear el objeto } } 31/01/2015 Alex – Programación Orientada a Aspectos8
  • 9. Código Enmarañado (Tangling) 31/01/2015 Alex – Programación Orientada a Aspectos9 Seguridad Registro de eventos Manejo de errores Verificación de datos Lógica del Negocio
  • 10. Código Disperso (Scattering) Código Duplicado 31/01/2015 Alex – Programación Orientada a Aspectos10 Verificar Acceso Autorizado Contaduría ContaduríaContaduría Banca por Internet Atención a Clientes Operaciones ExternasOperaciones ExternasOperaciones Externas
  • 11. Código Disperso (Scattering) - (2) Código Complementario 31/01/2015 Alex – Programación Orientada a Aspectos11 Usuarios autenticados Control de Acceso Administración de permisos Manejo de sesión Autorización
  • 12. AspectJ Es una extensión de Java para el desarrollo de aplicaciones orientadas a aspectos. Tiene un compilador especial que genera archivos .class válidos para cualquier JVM. 31/01/2015 Alex – Programación Orientada a Aspectos12
  • 13. Anatomía de un Aspecto • Aspecto (Aspect) • Punto de unión (Join Point) • Consejo (Advice) • Punto de corte (Pointcut) • Destinatario (Target) • Tejido (Weaving) 31/01/2015 Alex – Programación Orientada a Aspectos13
  • 14. Primer Ejemplo de Uso de Aspectos public class ComunicadorMensajes { public void muestraMensaje(String mensaje) { S.o.p(mensaje); } } 31/01/2015 Alex – Programación Orientada a Aspectos14
  • 15. El método main public class Prueba { public static void main(String[] args) { ComunicadorMensajes cm = new ComunicadorMensajes(); cm.muestraMensaje (“Hola, ¿quieres aprender AspectJ?”); } } 31/01/2015 Alex – Programación Orientada a Aspectos15
  • 16. Nuestro Aspecto public aspect AspectoModales { pointcut entregaMensaje(): call(* ComunicadorMensaje.muestraMensaje(..)); before(): entregaMensaje() { S.o.p(“Hola! “); } } 31/01/2015 Alex – Programación Orientada a Aspectos16
  • 17. Anatomía del Aspecto - Aspecto Es la funcionalidad transversal (crosscutting) que se va a implementar de forma modular y separada del resto del sistema. 31/01/2015 Alex – Programación Orientada a Aspectos17
  • 18. Anatomia del Aspecto – Aspecto (2) public aspect AspectoModales { pointcut entregaMensaje(): call(* ComunicadorMensaje.muestraMensaje(..)); before(): entregaMensaje() { S.o.p(“Hola! “); } } 31/01/2015 Alex – Programación Orientada a Aspectos18
  • 19. Anatomía del Aspecto - Advice Es la implementación del aspecto, es decir, contiene el código que implementa la nueva funcionalidad. Se inserta en la aplicación en los puntos de cruce. También definen el momento en el que se ejecutará este código. 31/01/2015 Alex – Programación Orientada a Aspectos19
  • 20. Anatomía del Aspecto – Advice (2) public aspect AspectoModales { pointcut entregaMensaje(): call(* ComunicadorMensaje.muestraMensaje(..)); before(): entregaMensaje() { S.o.p(“Hola! “); } } 31/01/2015 Alex – Programación Orientada a Aspectos20
  • 21. Anatomía del Aspecto – Referencias • thisJoinPoint • thisJoinPointStaticPart • thisEnclosingJoinPointStaticPart 31/01/2015 Alex – Programación Orientada a Aspectos21
  • 22. Anatomía del Aspecto - Pointcut Define las partes de nuestro código Java en el que se aplicarán los advices. Se especifican mediante expresiones regulares o patrones de nombres, e incluso dinámicamente en tiempo de ejecución según el valor de ciertos parámetros. Es el “¿dónde se ejecutará el aspecto?” 31/01/2015 Alex – Programación Orientada a Aspectos22
  • 23. Anatomía del Aspecto – Pointcut (2) public aspect AspectoModales { pointcut entregaMensaje(): call(* ComunicadorMensaje.muestraMensaje(..)); before(): entregaMensaje() { S.o.p(“Hola! “); } } 31/01/2015 Alex – Programación Orientada a Aspectos23
  • 24. Anatomía del Aspecto – Weaving Es el proceso de aplicar aspectos a los objetos y clases Java para crear nuevos objetos en los puntos de cruce. Este proceso puede ocurrir a lo largo del ciclo de vida del destinatario: 31/01/2015 Alex – Programación Orientada a Aspectos24 • En tiempo de compilación. • En tiempo de carga de las clases. • En tiempo de ejecución.
  • 25. Anatomía del Aspecto – Join Pont Es un punto de ejecución dentro del sistema donde el aspecto puede ser insertado, como una llamada a un método, el lanzamiento de una excepción, la modificación de un campo, etc. El join point es definido dentro del pointcut. 31/01/2015 Alex – Programación Orientada a Aspectos25 pointcut entregaMensaje():call(* ComunicadorMensaje.muestraMensaje(..));
  • 26. Join Points por Tipo 31/01/2015 Alex – Programación Orientada a Aspectos26 Categoría de Join Point Sintaxis Ejecución de Método execution(FimaMetodo) Llamada a Método call(FirmaMetodo) Ejecución de Constructor execution(FirmaConstructor) Llamada a Constructor call(FirmaConstructor) Inicialización de Clase staticinitialization(FirmaTipo) Lectura de un atributo get(FirmaAtributo) Escritura de un atributo set(FirmaCampo) Ejecución de manejo de Excepción handler(FirmaTipo Inicialización de Objeto initialization(FirmaConstructor) Pre-Inicialización de Objetos preinitialization(FirmaConstructor) Ejecución del Advice adviceexecution()
  • 27. Otros Pointcuts Importantes Pointcut Descripción within(PatronTipo) Cualquier join point dentro del scope de la clase indicado o uno de sus subtipo. withincode(PatronTipo) Cualquier join point dentro del scope de la clase indicada, o clases anidadas. this(FirmaTipo) Todos los join points donde la referencia “this” es del tipo indicado, o sus subclases. target(FirmaTipo) Todos los join points donde el objeto en el que se invoca el método es del tipo indicado o sus subclases. args(PatronTipo) Los join points en todos los métodos donde se reciban los argumentos indicados. if(condiciones) Todos los join points donde la condición indicada se cumple. 31/01/2015 Alex – Programación Orientada a Aspectos27
  • 28. Anatomía del Aspecto – Join Pont(2) public static void main(String[] args) { ComunicadorMensajes cm = new ComunicadorMensajes(); cm.muestraMensaje (“Alan, ¿quieres aprender AspectJ?”); } 31/01/2015 Alex – Programación Orientada a Aspectos28 pointcut entregaMensaje(): call(* ComunicadorMensaje.muestraMensaje(..));
  • 29. Anatomía del Aspecto – Join Pont(3) pointcut entregaMensaje(): execution(* ComunicadorMensaje.muestraMensaje(..)); 31/01/2015 Alex – Programación Orientada a Aspectos29 public class ComunicadorMensajes { public void muestraMensaje(String mensaje) { S.o.p(mensaje); } }
  • 30. ¿Cómo logra AspectJ hacer esto? Esta es, a grandes rasgos, la forma en la que trabaja AspectJ: 31/01/2015 Alex – Programación Orientada a Aspectos30 1. Los aspectos son mapeados a clases Java. 2. Los advices se mapean a uno o más métodos. 3. Las llamadas a estos métodos se insertan en los join points adecuados.
  • 31. Advice Ayuda a definir el “qué hacer”. Es una construcción parecida a un método. Existen tres tipos de advice: 31/01/2015 Alex – Programación Orientada a Aspectos31 • before: Se ejecuta antes del join point • after: Se ejecuta después del join point • around: Rodea la ejecución del advice. Este advice es especial ya que tiene la habilidad de evitar que el método se ejecute
  • 32. Advice After Se ejecuta después del join point. Existen tres variaciones de este tipo de advice: 31/01/2015 Alex –Programación Orientada a Aspectos32 • Después de un regreso de una ejecución normal. • Después de un regreso por lanzarse una excepción. • Después de un regreso de cualquiera de las formas anteriores.
  • 33. Advice After after(): call(* Cuenta.*(..)) {….} after() returning : (* Cuenta.*(..)) {….} after throwing : call(* Cuenta.*(..)) {….} 31/01/2015 Alex – Programación Orientada a Aspectos33
  • 34. Ejemplo 2 31/01/2015 Alex – Programación Orientada a Aspectos34 Registro de Eventos
  • 35. Ejemplo 3 31/01/2015 Alex – Programación Orientada a Aspectos35 Tiempo de Ejecución
  • 36. Ejemplo 4 Manejo de Excepciones 31/01/2015 Alex – Programación Orientada a Aspectos36
  • 37. Sintaxis de los Join Points Los pointcuts identifican los join points en el flujo del programa. Además exponen el contexto del join point. Los point cuts pueden ser anónimos o con nombres. Los point cuts también son usados en cruzamientos estáticos para declarar errores y warnings en tiempo de compilación, así como para suavizar excepciones 31/01/2015 Alex – Programación Orientada a Aspectos37
  • 38. Join Points con Nombre Los point cuts con nombre son elementos que pueden ser referenciados en múltiples lugares, haciéndolos reutilizables. 31/01/2015 Alex – Programación Orientada a Aspectos38 pointcut operacionesContables() : call(* Cuenta.*(..)); before(): operacionesContables() { … }
  • 39. Join Points Anónimos Son expresiones que se definen en el momento de su uso. Como son anónimos, no pueden ser referenciados en otro lugar a donde son definidos 31/01/2015 Alex – Programación Orientada a Aspectos39 before(): call(* Cuenta.*(..)) { … }
  • 40. Patrones de Firmas en Pointcuts Algunas veces un pointcut especifica un joinpoint usando una forma particular, pero otras, identifica join points por multiples firmas que estan agrupados usando patrones de coincidencia. 31/01/2015 Alex – Programación Orientada a Aspectos40 • “*” cualquier número de caracteres, excepto puntos • “..” Cualquier número de caracteres, incluyendo puntos • “+” Cualquier subclase o subinterface de un tipo dado
  • 41. Operadores AspectJ proporciona 3 operadores: • “!” Negación • “||” or lógico • “&&” and lógico 31/01/2015 Alex – Programación Orientada a Aspectos41
  • 42. Patrones de Firmas en Pointcuts (2) Existen tres tipos de patrones de firmas: • Patrones de Tipos (clases, interfaces) • Patrones de Métodos y Constructores • Patrones de Atributos 31/01/2015 Alex – Programación Orientada a Aspectos42
  • 43. Patrones de Tipos Patrón de Firma Tipos Encontrados Cuenta Tipos con nombre “Cuenta” Cuenta* Tipos con nombre iniciado en “Cuenta” como “CuentaAhorros” o “CuentaCheques” java.*.Date “java.util.Date” y “java.sql.Date” java..* Paquete “java” o subpaquetes a cualquier nivel javax..*Model+ Paquete “javax” o subpaquetes con tipos terminados en “Model” y sus subclases !Vector Todos los tipos que NO son “Vector” Vector || Hashtable Los tipos “Vector” o “Hashtable” java.util.RandomAccess+ && java.util.List+ Todos los tipos que implementen las dos interfaces indicadas. En este caso “java.util.ArrayList” 31/01/2015 Alex – Programación Orientada a Aspectos43
  • 44. Patrones de Métodos Patrón de Firma Métodos Encontrados public void Collection.clear() Directo public void Cuenta.debito(float) throws ExcepcionBalanceInsuficiente Directo public void Cuenta.set*(*) Métodos de la clase “Cuenta” que inician con “set” y reciben un solo argumento de cualquier tipo public void Cuenta.*() Todos los métodos “public” de la clase “Cuenta” que no tomen argumentos public * Cuenta.*(..) Todos los métodos de la clase “Cuenta” sin importar el tipo de retorno o los argumentos que recieban * java.io.Reader.read(char[], ..) * javax..*.add*Listener(EventListener+) * *.*(..) throws RemoteException 31/01/2015 Alex – Programación Orientada a Aspectos44
  • 45. Patrones de Constructores Patrón de Firma Constructores Encontrados public Cuenta.new() Invocación del constructor de la clase “Cuenta” public Cuenta.new(int) Invocación del constructor de la clase “Cuenta” que reciba un solo argumento de tipo “int” public Cuenta.new(..) La invocación un constructor de la clase “Cuenta” que reciba cualquier número de argumentos 31/01/2015 Alex – Programación Orientada a Aspectos45 Como un constructor no tiene un tipo de retorno, no hay un valor permitido. Además como los constructores no tienen nombre como los métodos normales, el método es sustituido por “new”.
  • 46. Patrones de Atributos Debe especificar el nombre del campo, el tipo, y los modificadores. 31/01/2015 Alex – Programación Orientada a Aspectos46 Patrón de Firma Atributos Encontrados private float Cuenta.balance Campo privado “balance” de la clase “Cuenta” * Cuenta.* Todos los campos de la clase “Cuenta” sin importar su modificador de acceso, tipo o nombre !public static * banco.. *.* Todos los campos static no públicos de “banco” y sus subpaquetes directos e indirectos public !final *.* Los campos públicos no final de todas las clases
  • 47. Pasando el Contexto de un Join Point a un Advice before(Cuenta cuenta, float cantidad) : call(void Cuenta.credito(float)) && target(cuenta) && args(cantidad) { S.o.p(“Acreditando “ + cantidad + “ a “ + cuenta); } 31/01/2015 Alex – Programación Orientada a Aspectos47
  • 48. Pasando el Contexto de un Join Point a un Advice (2) pointcut operacionCredito(Cuenta cuenta, float cantidad): call(void Cuenta.credito(float)) && target(cuenta) && args(cantidad); before(Cuenta cuenta, float cantidad) : operaciónCredito(cuenta, cantidad) { S.o.p(“Acreditando ” + cantidad + “ a “ + cuenta); } 31/01/2015 Alex – Programación Orientada a Aspectos48
  • 49. Pasando el Contexto de un Join Point a un Advice (3) after() throwing(RemoteException ex) : call(* *.*(..) throws RemoteExcption { S.o.p(“Exception “ + ex + “ cuando se ejecutaba ” + thisJoinPoint); } 31/01/2015 Alex – Programación Orientada a Aspectos49
  • 50. Ejemplo 5 Valor de las Variables 31/01/2015 Alex – Programación Orientada a Aspectos50
  • 51. Ejemplo 6 this 31/01/2015 Alex – Programación Orientada a Aspectos51
  • 52. Ejemplo 7 Join Points condicionales 31/01/2015 Alex – Programación Orientada a Aspectos52
  • 53. Ejemplo 8 Declaración de Errores 31/01/2015 Alex – Programación Orientada a Aspectos53
  • 54. ¿Preguntas? 31/01/2015 Alex - Programación Orientada a Aspectos54
  • 55. Gracias 31/01/2015 Alex - Programación Orientada a Aspectos55 programadorjavablog@gmail.com http://javatutoriales.blogspot.com/ Java Tutoriales en Facebook