En la programación orientada a aspectos , un punto de corte es un conjunto de puntos de unión . Pointcut especifica dónde exactamente aplicar los consejos , lo que permite separar las preocupaciones y ayuda a modularizar la lógica empresarial. [1] Los puntos de acceso a menudo se especifican usando nombres de clases o nombres de métodos, en algunos casos usando expresiones regulares que coinciden con el nombre de la clase o el método. Los diferentes marcos admiten diferentes expresiones de Pointcut; La sintaxis de AspectJ se considera estándar de facto. Los marcos están disponibles para varios lenguajes de programación como Java , Perl , Ruby y muchos más que admiten pointcut.
Fondo
Debido a las limitaciones en varios lenguajes de programación, la preocupación transversal no se ha modularizado. La preocupación transversal se refiere a partes del software que lógicamente pertenecen a un módulo y afectan a todo el sistema: esto podría ser la seguridad o el registro, por ejemplo. [2] La programación orientada a aspectos]] intenta resolver estas preocupaciones transversales permitiendo a los programadores escribir módulos llamados aspectos, que contienen fragmentos de código ejecutados en un punto particular. Las expresiones necesarias para seleccionar un punto en particular llevaron a la creación de Expresiones Pointcut.
Ejecución
Siempre que la ejecución del programa alcanza uno de los puntos de unión descritos en el pointcut, se ejecuta un fragmento de código asociado con el pointcut (llamado asesoramiento). Esto permite que un programador describa dónde y cuándo se debe ejecutar código adicional además del comportamiento ya definido. Pointcut permite la adición de aspectos al software existente, así como el diseño de software con una clara separación de preocupaciones , donde el programador teje (fusiona) diferentes aspectos en una aplicación completa.
Ejemplo
Supongamos que existe una aplicación donde podemos modificar registros en una base de datos . Siempre que los usuarios modifiquen la base de datos, queremos tener un registro de información sobre quién está modificando los registros. La forma tradicional de registrar es llamar a un método de registro justo antes de modificar la base de datos. Con la programación orientada a aspectos, podemos aplicar pointcut al método Modify Database y tener un aviso que se llama para registrar la información requerida. [3]
Expresiones
A continuación se muestran algunas de las expresiones de corte de puntos importantes admitidas por AspectJ . Estas expresiones se pueden combinar utilizando operadores lógicos. [4]
ejecución ( anular User . setPassword ( contraseña ))
Este pointcut coincide con la ejecución del método User.setPassword.
llamar ( void User . getPassword ())
Cuando se llama a User.getPassword, este punto de acceso coincide.
controlador ( ArrayIndexOutOfBounds )
Pointcut coincidirá cuando haya una excepción ArrayIndexOutOfBounds
este ( UserType )
Pointcut coincidirá cuando el objeto que se está ejecutando actualmente sea de UserType.
objetivo ( UserType )
Pointcut coincidirá cuando el objeto de destino sea de UserType.
dentro de ( UserType )
Pointcut coincidirá cuando el código en ejecución pertenezca a UserType.
Criticas
Los lenguajes de corte puntual impactan propiedades importantes del software como la capacidad de evolución y la comprensibilidad de manera negativa. Puede existir la posibilidad de que sea necesario realizar una refactorización para definir un aspecto correcto, lo que en general no debería suceder, ya que la refactorización es para hacer que el código sea más limpio. Tampoco es escalable cuando hay varios aspectos para aplicar en el mismo código y cada aspecto requiere una refactorización diferente. [5] En general, todos los aspectos estarán estrechamente relacionados con la estructura de una aplicación, ya que los pointcuts contienen explícitamente la firma de un método, por lo que cuando una aplicación cambia, el pointcut también debe cambiarse. Esto puede resultar bastante problemático para un desarrollador. [5]
Referencias
- ^ "Una clasificación de construcciones de lenguaje Pointcut" (PDF) . Consultado el 29 de diciembre de 2019 .
- ^ "Introducción a AspectJ" . Consultado el 14 de septiembre de 2016 .
- ^ "JBoss AOP - Guía del usuario" . docs.jboss.org . Consultado el 14 de septiembre de 2016 .
- ^ "Unir puntos y Pointcuts" . Consultado el 14 de septiembre de 2016 .
- ^ a b "PointCuts generados inductivamente para soportar la refactorización de Aspectos". CiteSeerX 10.1.1.2.594 . Cite journal requiere
|journal=
( ayuda )
enlaces externos
- Documento " Regreso al futuro: Pointcuts como predicados sobre rastros " por Karl Klose y Klaus Ostermann
- Documento " Remote Pointcut - Una construcción de lenguaje para AOP distribuido " por Muga Nishizawa , Shigeru Chiba y Michiaki Tatsubori
- Documento " Registro de datos como lenguaje puntual en la programación orientada a aspectos "
- Documento " Expresividad y complejidad de los lenguajes transversales " de Karl J. Lieberherr , Jeffrey Palm y Ravi Sundaram