Programación Orientada a
Aspectos (POA)
Expositor: Alex
http://javatutoriales.blogspot.com/
Se permite hacer preguntas en ...
Agenda
31/01/2015 Alex – Programación Orientada a Aspectos2
• ¿Qué la POA?
• Objetivo de la POA
• Problemas de Otros Parad...
¿Qué es la POA?
Es un paradigma de Programación cuya intención
es permitir una adecuada modularización de las
aplicaciones...
Objetivo de la POA
El principal objetivo de la POA es la separación
de las funcionalidades dentro del sistema.
31/01/2015 ...
¿Qué es un Aspecto?
Es un proceso realizado dentro de una clase pero
que no es parte de la misma.
La verificación de permi...
Problemas de Otros Paradigmas
• Código disperso (Scattered code): El mismo
código distribuido por toda, o gran parte de la...
Problemas de Otros Paradigmas (2)
En la POO, se tiene una clase que un momento
dado necesita la funcionalidad de otra.
Par...
Conceptos Cruzados
public class ClaseDeNegocio
{
public void metodoNegocio()
{
//Asegurar autorización
//Asegurar que la i...
Código Enmarañado (Tangling)
31/01/2015 Alex – Programación Orientada a Aspectos9
Seguridad
Registro de eventos
Manejo de ...
Código Disperso (Scattering)
Código Duplicado
31/01/2015 Alex – Programación Orientada a Aspectos10
Verificar Acceso
Autor...
Código Disperso (Scattering) - (2)
Código Complementario
31/01/2015 Alex – Programación Orientada a Aspectos11
Usuarios
au...
AspectJ
Es una extensión de Java para el desarrollo de
aplicaciones orientadas a aspectos.
Tiene un compilador especial qu...
Anatomía de un Aspecto
• Aspecto (Aspect)
• Punto de unión (Join Point)
• Consejo (Advice)
• Punto de corte (Pointcut)
• D...
Primer Ejemplo de Uso de Aspectos
public class ComunicadorMensajes
{
public void muestraMensaje(String mensaje)
{
S.o.p(me...
El método main
public class Prueba
{
public static void main(String[] args)
{
ComunicadorMensajes cm = new ComunicadorMens...
Nuestro Aspecto
public aspect AspectoModales
{
pointcut entregaMensaje():
call(* ComunicadorMensaje.muestraMensaje(..));
b...
Anatomía del Aspecto - Aspecto
Es la funcionalidad transversal (crosscutting) que
se va a implementar de forma modular y s...
Anatomia del Aspecto – Aspecto (2)
public aspect AspectoModales
{
pointcut entregaMensaje():
call(* ComunicadorMensaje.mue...
Anatomía del Aspecto - Advice
Es la implementación del aspecto, es decir,
contiene el código que implementa la nueva
funci...
Anatomía del Aspecto – Advice (2)
public aspect AspectoModales
{
pointcut entregaMensaje():
call(* ComunicadorMensaje.mues...
Anatomía del Aspecto – Referencias
• thisJoinPoint
• thisJoinPointStaticPart
• thisEnclosingJoinPointStaticPart
31/01/2015...
Anatomía del Aspecto - Pointcut
Define las partes de nuestro código Java en el que
se aplicarán los advices. Se especifica...
Anatomía del Aspecto – Pointcut (2)
public aspect AspectoModales
{
pointcut entregaMensaje():
call(* ComunicadorMensaje.mu...
Anatomía del Aspecto – Weaving
Es el proceso de aplicar aspectos a los objetos y
clases Java para crear nuevos objetos en ...
Anatomía del Aspecto – Join Pont
Es un punto de ejecución dentro del sistema
donde el aspecto puede ser insertado, como un...
Join Points por Tipo
31/01/2015 Alex – Programación Orientada a Aspectos26
Categoría de Join Point Sintaxis
Ejecución de M...
Otros Pointcuts Importantes
Pointcut Descripción
within(PatronTipo) Cualquier join point dentro del scope de la clase indi...
Anatomía del Aspecto – Join Pont(2)
public static void main(String[] args)
{
ComunicadorMensajes cm = new ComunicadorMensa...
Anatomía del Aspecto – Join Pont(3)
pointcut entregaMensaje():
execution(* ComunicadorMensaje.muestraMensaje(..));
31/01/2...
¿Cómo logra AspectJ hacer esto?
Esta es, a grandes rasgos, la forma en la que
trabaja AspectJ:
31/01/2015 Alex – Programac...
Advice
Ayuda a definir el “qué hacer”. Es una
construcción parecida a un método.
Existen tres tipos de advice:
31/01/2015 ...
Advice After
Se ejecuta después del join point. Existen tres
variaciones de este tipo de advice:
31/01/2015 Alex –Programa...
Advice After
after(): call(* Cuenta.*(..)) {….}
after() returning : (* Cuenta.*(..)) {….}
after throwing : call(* Cuenta.*...
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...
Join Points con Nombre
Los point cuts con nombre son elementos que
pueden ser referenciados en múltiples lugares,
haciéndo...
Join Points Anónimos
Son expresiones que se definen en el momento
de su uso. Como son anónimos, no pueden ser
referenciado...
Patrones de Firmas en Pointcuts
Algunas veces un pointcut especifica un joinpoint
usando una forma particular, pero otras,...
Operadores
AspectJ proporciona 3 operadores:
• “!” Negación
• “||” or lógico
• “&&” and lógico
31/01/2015 Alex – Programac...
Patrones de Firmas en Pointcuts (2)
Existen tres tipos de patrones de firmas:
• Patrones de Tipos (clases, interfaces)
• P...
Patrones de Tipos
Patrón de Firma Tipos Encontrados
Cuenta Tipos con nombre “Cuenta”
Cuenta* Tipos con nombre iniciado en ...
Patrones de Métodos
Patrón de Firma Métodos Encontrados
public void Collection.clear() Directo
public void Cuenta.debito(f...
Patrones de Constructores
Patrón de Firma Constructores Encontrados
public Cuenta.new() Invocación del constructor de la c...
Patrones de Atributos
Debe especificar el nombre del campo, el tipo, y
los modificadores.
31/01/2015 Alex – Programación O...
Pasando el Contexto de un Join
Point a un Advice
before(Cuenta cuenta, float cantidad) :
call(void Cuenta.credito(float))
...
Pasando el Contexto de un Join
Point a un Advice (2)
pointcut operacionCredito(Cuenta cuenta, float cantidad):
call(void C...
Pasando el Contexto de un Join
Point a un Advice (3)
after() throwing(RemoteException ex) :
call(* *.*(..) throws RemoteEx...
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...
Upcoming SlideShare
Loading in …5
×

Programación orientada a aspectos

12,891 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
12,891
On SlideShare
0
From Embeds
0
Number of Embeds
11,192
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Programación orientada a aspectos

  1. 1. Programación Orientada a Aspectos (POA) Expositor: Alex http://javatutoriales.blogspot.com/ Se permite hacer preguntas en cualquier momento.
  2. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 21. Anatomía del Aspecto – Referencias • thisJoinPoint • thisJoinPointStaticPart • thisEnclosingJoinPointStaticPart 31/01/2015 Alex – Programación Orientada a Aspectos21
  22. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 33. Advice After after(): call(* Cuenta.*(..)) {….} after() returning : (* Cuenta.*(..)) {….} after throwing : call(* Cuenta.*(..)) {….} 31/01/2015 Alex – Programación Orientada a Aspectos33
  34. 34. Ejemplo 2 31/01/2015 Alex – Programación Orientada a Aspectos34 Registro de Eventos
  35. 35. Ejemplo 3 31/01/2015 Alex – Programación Orientada a Aspectos35 Tiempo de Ejecución
  36. 36. Ejemplo 4 Manejo de Excepciones 31/01/2015 Alex – Programación Orientada a Aspectos36
  37. 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. 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. 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. 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. 41. Operadores AspectJ proporciona 3 operadores: • “!” Negación • “||” or lógico • “&&” and lógico 31/01/2015 Alex – Programación Orientada a Aspectos41
  42. 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. 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. 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. 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. 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. 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. 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. 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. 50. Ejemplo 5 Valor de las Variables 31/01/2015 Alex – Programación Orientada a Aspectos50
  51. 51. Ejemplo 6 this 31/01/2015 Alex – Programación Orientada a Aspectos51
  52. 52. Ejemplo 7 Join Points condicionales 31/01/2015 Alex – Programación Orientada a Aspectos52
  53. 53. Ejemplo 8 Declaración de Errores 31/01/2015 Alex – Programación Orientada a Aspectos53
  54. 54. ¿Preguntas? 31/01/2015 Alex - Programación Orientada a Aspectos54
  55. 55. Gracias 31/01/2015 Alex - Programación Orientada a Aspectos55 programadorjavablog@gmail.com http://javatutoriales.blogspot.com/ Java Tutoriales en Facebook

×