SlideShare una empresa de Scribd logo
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

Más contenido relacionado

PDF
Práctica Active Directory 1-12
DOCX
Programación orientada a objetos atributos metodos y eventos
PPTX
Tecnicas de Pruebas
PPTX
Sistemas Operativos - Semáforos
PPTX
Programación Orientada a Objetos - Unidad 5 Excepciones
DOC
Plan de pruebas
PDF
Proyecto programacion
DOCX
Memoria virtual android
Práctica Active Directory 1-12
Programación orientada a objetos atributos metodos y eventos
Tecnicas de Pruebas
Sistemas Operativos - Semáforos
Programación Orientada a Objetos - Unidad 5 Excepciones
Plan de pruebas
Proyecto programacion
Memoria virtual android

La actualidad más candente (7)

PPTX
Prueba, caso de prueba, defecto, falla, error, verificación, validación
PPTX
PPT Git GitHub
PDF
Clase 6 excepciones
PPTX
Top down parsing
PDF
Gerencia de procesos - Gestión por procesos
PPSX
Diseño de Páginas Web - BALSAMIQ MOCKUPS 3
PPTX
Unidad 2 ensamblador
Prueba, caso de prueba, defecto, falla, error, verificación, validación
PPT Git GitHub
Clase 6 excepciones
Top down parsing
Gerencia de procesos - Gestión por procesos
Diseño de Páginas Web - BALSAMIQ MOCKUPS 3
Unidad 2 ensamblador
Publicidad

Destacado (20)

PDF
Programacion orientada a objetos cel2015
PPTX
Modals
PPTX
Roberto a
PPTX
Verbos modales
PDF
Guia n°4 Vectores
PPTX
Modals Verbs
PPTX
Verbos modales
PDF
Sesion6 -modal verbs
PPTX
The modal verbs - ALL IN ENGLISH
PPTX
Modals for speculation
PDF
Modals: can, could, may, might, should, have to, must
PPTX
Past modal
PPT
Modals verbs eliana (1)
PPTX
Past modals
PPTX
Verbos modales (modals) (1)
PPT
Presentación verbs modals
PPTX
speculation
PPS
Advisability in the past
PPTX
Modal Verbs of Deduction
PPTX
Presentacion verbos modales
Programacion orientada a objetos cel2015
Modals
Roberto a
Verbos modales
Guia n°4 Vectores
Modals Verbs
Verbos modales
Sesion6 -modal verbs
The modal verbs - ALL IN ENGLISH
Modals for speculation
Modals: can, could, may, might, should, have to, must
Past modal
Modals verbs eliana (1)
Past modals
Verbos modales (modals) (1)
Presentación verbs modals
speculation
Advisability in the past
Modal Verbs of Deduction
Presentacion verbos modales
Publicidad

Similar a Programación orientada a aspectos (20)

PPT
AOP - OSUM springperu(1era Reunion)
PDF
PDF
Trabajo de Christian Oblitas
PPT
Software engineeringparte2 (1)
PPT
Software engineeringparte2 (1)
PPT
Ciclo De Vida De Los Sistemas
 
PPT
Ciclo De Vida De Los Sistemas
 
PPTX
ALGORITMOS y ejemplo en java.pptx
PPT
Introducción A La Programación
PPT
Introducción a la Programación
PDF
Programa UML- Clase 1
PPT
PPTX
PPT_ANÁLISIS Y DISEÑO DE SISTEMAS -ISE-604_SEM-04_2025-1.pptx
PPT
Metodologías Agiles - APIT - UTN FRBA
PPSX
Fases del Modelo para Construccion de Solcuiones
PDF
s02E42020-1
PDF
proceso unificado de desarrollo parte 1
PPT
Aplicando UML en proyectos .NET 050524-MSF-UML-VS-AlexSanchez1.0.ppt
AOP - OSUM springperu(1era Reunion)
Trabajo de Christian Oblitas
Software engineeringparte2 (1)
Software engineeringparte2 (1)
Ciclo De Vida De Los Sistemas
 
Ciclo De Vida De Los Sistemas
 
ALGORITMOS y ejemplo en java.pptx
Introducción A La Programación
Introducción a la Programación
Programa UML- Clase 1
PPT_ANÁLISIS Y DISEÑO DE SISTEMAS -ISE-604_SEM-04_2025-1.pptx
Metodologías Agiles - APIT - UTN FRBA
Fases del Modelo para Construccion de Solcuiones
s02E42020-1
proceso unificado de desarrollo parte 1
Aplicando UML en proyectos .NET 050524-MSF-UML-VS-AlexSanchez1.0.ppt

Más de programadorjavablog (20)

PDF
Hibernate - Relaciones
PDF
Hibernate - Introducción
PPSX
Patrones de diseño(presentación 7)
PPSX
Uml (presentación 6)
PPSX
Conceptos de código limpio (presentación 5)
PPSX
Conceptos avanzados oo (presentación 4)
PPSX
Java 5 se (presentación3)
PPSX
Lenguaje java5 (presentación2)
PPSX
Conceptos poo (presentación1)
PPT
Curso scjp 30 navegacion de archivos e io
PPSX
Curso scjp 30 navegacion de archivos e io
PPSX
7iSF-4 test driver development
PPSX
7iSF-3 scrum
PPSX
PPSX
7iSF-1 ingeniería de software
PPSX
7iSF-6 temas extra
PPSX
PPT
Curso scjp 4 declaracion de clases
PPT
Curso scjp 3 identificadores y control de acceso
PPT
Curso scjp 2 recordatorio de java
Hibernate - Relaciones
Hibernate - Introducción
Patrones de diseño(presentación 7)
Uml (presentación 6)
Conceptos de código limpio (presentación 5)
Conceptos avanzados oo (presentación 4)
Java 5 se (presentación3)
Lenguaje java5 (presentación2)
Conceptos poo (presentación1)
Curso scjp 30 navegacion de archivos e io
Curso scjp 30 navegacion de archivos e io
7iSF-4 test driver development
7iSF-3 scrum
7iSF-1 ingeniería de software
7iSF-6 temas extra
Curso scjp 4 declaracion de clases
Curso scjp 3 identificadores y control de acceso
Curso scjp 2 recordatorio de java

Último (20)

PPTX
RAP01 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
PDF
Estrategia de apoyo tecnología miguel angel solis
PDF
MÓDULO DE CALOR DE GRADO DE MEDIO DE FORMACIÓN PROFESIONAL
PDF
Diapositiva proyecto de vida, materia catedra
PDF
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
PDF
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
PPTX
Power Point Nicolás Carrasco (disertación Roblox).pptx
PDF
Liceo departamental MICRO BIT (1) 2.pdfbbbnn
PPTX
Propuesta BKP servidores con Acronis1.pptx
PPTX
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
PPTX
Sesion 1 de microsoft power point - Clase 1
PDF
Calidad desde el Docente y la mejora continua .pdf
PDF
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...
PPTX
RAP02 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
PDF
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
PPTX
historia_web de la creacion de un navegador_presentacion.pptx
PDF
clase auditoria informatica 2025.........
PDF
CyberOps Associate - Cisco Networking Academy
PPTX
Presentación de Redes de Datos modelo osi
PPT
introduccion a las_web en el 2025_mejoras.ppt
RAP01 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
Estrategia de apoyo tecnología miguel angel solis
MÓDULO DE CALOR DE GRADO DE MEDIO DE FORMACIÓN PROFESIONAL
Diapositiva proyecto de vida, materia catedra
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
Power Point Nicolás Carrasco (disertación Roblox).pptx
Liceo departamental MICRO BIT (1) 2.pdfbbbnn
Propuesta BKP servidores con Acronis1.pptx
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
Sesion 1 de microsoft power point - Clase 1
Calidad desde el Docente y la mejora continua .pdf
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...
RAP02 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
historia_web de la creacion de un navegador_presentacion.pptx
clase auditoria informatica 2025.........
CyberOps Associate - Cisco Networking Academy
Presentación de Redes de Datos modelo osi
introduccion a las_web en el 2025_mejoras.ppt

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